shell 实现主板测试
初接触shell,只能需要用到什么功能现学先用了。本文总结一下完成测试程序当中遇到的技巧和问题。
01. 变量生存期的问题,在函数中的变量无法在其他地方使用,在函数中只能使用在函数前定义的全局变量;
02. 利用函数,参数传递的方法,$1, $2, 分别表示第一个和第二个参数;
03.
printf "waiting....\r"
可以将光标移至当前行开头;
04.粘一个别人的小结;
05. shell 指令一般会有一个返回值,如果指令执行成功返回0, 有错误返回1,可以利用
if [ $? -ne 0 ]
捕捉到;
06.
> /dev/null
将输出抛至垃圾站;
07. 有些板子的shell版本较低,支持的语法很少,例如重定向&>是将正常和错误均重定向,在不支持的板子上可以使用
> log.txt 2> log.txt
替代;
08. 又例如有些板子不支持数组(不知道是不是busybox的缘故),可以利用变量名+序列号替代:
test_items_0=Stuck test_items_1=Value test_items_2=XOR test_items_3=SUB test_items_4=MUL var_op="test_items_"$arg1 #赋值给新变量 # echo ${!var_op} 直接打印出变量内容 eval var_item=\$$var_op #间接引用,适用于一个变量名是另一个变量的内容 echo $var_item #间接引用,打印出原始变量的内容
09.
grep "Done." < log.txt > /dev/null
在log.txt 中查找字符串, 可用在if判断中;(未找到在字符串中匹配指定字符串的语法,例如在n行字符串中,匹配含有“abc” 子串的是哪行)
10. 字符串查询判断方法:
01. if echo ${string} | grep -q "ok" ;then 02. re=$(echo $string | grep "out") if [[ "$re" != "" ]] then echo "包含" else echo "不包含" fi
11. 只保留字符串中的数字:
num_f=`echo $numf_3 | tr -cd '[0-9]'`
种树最好的时间是十年前,其次是现在。