特殊变量:$?上一个命令执行状态的返回值。
程序执行可能有两种返回值: 1. 程序执行结果 2. 程序状态返回吗(0-255) 0 则为执行正确 1-255 则执行出错(1,2,127系统预留);
$#:获取当前shell命令行中参数的总个数 $*:获取当前shell的所有参数 “$1 $2 $3 …,受IFS控制 $@:这个程序的所有参数 “$1″ “$2″ “$3″ “…”,不受IFS控制 $0 获取当前执行的shell脚本的文件名 $n 获取当前执行的shell脚本的第n个参数值,n=1..9 $$ 获取当前shell的进程号(PID) $! 执行上一个指令的PID
如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null:
/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。
如果希望屏蔽 stdout 和 stderr,可以这样写:
$ command > /dev/null 2>&1注意:0 是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。
这里的 2 和 > 之间不可以有空格,2> 是一体的时候才表示错误输出。
array_name=(value1 value2 ... valuen)读取数组元素值的一般格式是:
${array_name[index]}使用@ 或 * 可以获取数组中的所有元素,例如:
#!/bin/bash my_array[0]=A my_array[1]=B my_array[2]=C my_array[3]=D echo "数组的元素为: ${my_array[*]}" echo "数组的元素为: ${my_array[@]}"获取数组长度的方法与获取字符串长度的方法相同,例如:
#!/bin/bash my_array[0]=A my_array[1]=B my_array[2]=C my_array[3]=D echo "数组元素个数为: ${#my_array[*]}" echo "数组元素个数为: ${#my_array[@]}"
我们先看下/bin/sh,发现它被指向了dash,怎么解决呢,将它指向bash
sudo dpkg-reconfigure dashexample:
循环读取txt文件内容
#!/bin/bash declare -i sum=0 declare -i a=0 declare -i b=0 declare -i c=$1 declare -i sc=0 declare -i fc=0 #for x in `seq 1 $[$num-$i]`;do for I in `seq 1 $c`;do #let sum+=$I #./lck.sh>log.txt ./ini_local.sh|tee log.txt cat log.txt >> log_s.txt echo " cat file whiel read line" #cat log.txt |while read line while read line do echo $line; if [ $a == 1 ] then if [[ $line == "serdes check finish" ]] then #let sc+=1 #sc = `expr $sc + 1` sc=$((${sc} + 1)) echo finish..... echo $sc else let fc+=1 echo $fc fi a=0 else a=0 fi if [[ $line == "serdes check start" ]] then # echo str1 == str3 a=1 echo start..... else # echo str1 != str3 a=0 fi done <log.txt wait ./reset_taishan_new.sh sleep 15m #20min done #echo "1-100 all positive integer's sum : $sum" echo "total:$I success:$sc fail:$fc"