echo ${ret%;*}
时间: 2023-11-01 18:54:37 浏览: 37
${ret%;*} 是一种 bash shell 的字符串处理方式,它表示从变量 ret 的末尾开始,删除第一个遇到的分号(;)及之后的所有字符,并返回剩余的字符串。换句话说,它会去掉 ret 字符串中最后一个分号及其后面的内容。
举个例子,如果 ret 的值是 "Hello;World;", 那么 ${ret%;*} 的结果将是 "Hello"。
相关问题
ret=0 result=0 echo "test read thermal by i2c start" echo "******************************" for i in `seq 10` do echo "test thermal : $i" cat /sys/class/hwmon/hwmon1/temp1_input ret=$? echo "ret : $ret" result=$(($result + $ret)) sleep 2s done echo "******************************" echo "test read thermal by i2c done" echo "test result : $result" if [ $result -eq 0 ];then echo "test OK" else echo "test FAIL" fi echo "******************************"逐行解读这段代码
好的,我来逐行解读这段代码:
第一行:`ret=0 result=0` 定义了两个变量,分别为 ret 和 result,初始化值为 0。
第二行:`echo "test read thermal by i2c start"` 输出一个字符串,用于提示测试开始。
第三行:`echo "******************************"` 输出一个字符串,用于分隔不同的测试结果。
第四行:`for i in `seq 10`` 开始一个 for 循环,循环次数为 10 次。
第五行:`echo "test thermal : $i"` 输出一个字符串,提示当前正在进行第几次测试。
第六行:`cat /sys/class/hwmon/hwmon1/temp1_input` 使用 cat 命令读取 /sys/class/hwmon/hwmon1/temp1_input 文件的内容,即硬件温度传感器的数据,并将其输出到终端。
第七行:`ret=$?` 将上一条命令执行的结果保存到变量 ret 中,$? 是一个特殊变量,表示上一条命令的退出码,如果命令执行成功,$? 的值为 0,否则不为 0。
第八行:`echo "ret : $ret"` 输出当前命令执行的退出码。
第九行:`result=$(($result + $ret))` 将当前命令执行的退出码加到变量 result 中。
第十行:`sleep 2s` 等待 2 秒钟,以便硬件温度传感器有足够的时间更新数据。
第十一行:`done` for 循环结束。
第十二行:`echo "******************************"` 输出一个字符串,用于分隔不同的测试结果。
第十三行:`echo "test read thermal by i2c done"` 输出一个字符串,用于提示测试结束。
第十四行:`echo "test result : $result"` 输出一个字符串,提示测试结果。
第十五行:`if [ $result -eq 0 ];then` 开始一个 if 判断语句,判断变量 result 的值是否为 0。
第十六行:`echo "test OK"` 如果变量 result 的值为 0,则输出 "test OK"。
第十七行:`else` 如果变量 result 的值不为 0,则执行 else 分支。
第十八行:`echo "test FAIL"` 输出 "test FAIL"。
第十九行:`fi` 结束 if 判断语句。
第二十行:`echo "******************************"` 输出一个字符串,用于分隔不同的测试结果。
以下shell脚本是什么意思,转成Python。 while read slot_current do nvme_sn=$(echo "$slot_current" | awk -F "SN:" '{print $2}') { nvme admin-passthru >nvme.txt 2>&1 RET=$? echo "$RET" > ret.txt exit $RET }& pid=$! echo "$nvme_sn $pid" >>TestPID.txt done < $test_sn_file
这段 shell 脚本的意思是从 `$test_sn_file` 文件中读取每一行字符串,然后提取出其中的 SN,执行 `nvme admin-passthru` 命令并将输出重定向到 `nvme.txt` 文件中,同时记录命令的返回值到 `ret.txt` 文件中,最后将 SN 和该命令的进程 ID 记录到 `TestPID.txt` 文件中。
下面是转换成 Python 的代码:
```python
import subprocess
with open('TestPID.txt', 'w') as pid_file:
with open('ret.txt', 'w') as ret_file:
with open('nvme.txt', 'w') as nvme_file:
with open('test_sn_file', 'r') as sn_file:
for line in sn_file:
nvme_sn = line.split('SN:')[1].strip()
cmd = 'nvme admin-passthru'
process = subprocess.Popen(cmd, shell=True, stdout=nvme_file, stderr=subprocess.STDOUT)
pid = process.pid
ret = process.wait()
ret_file.write(str(ret))
pid_file.write(f'{nvme_sn} {pid}\n')
```
注意,Python 中的 `subprocess.Popen` 函数默认不会阻塞进程,所以需要调用 `wait` 函数等待命令执行完毕,并获取命令的返回值。另外,Python 中的 `open` 函数默认打开文件的模式是只读,需要指定 `w` 模式才能写入文件。