shell显示进度条
【1】参数($0、$?、$*、$@、$#、$$、$!)
$0:就是该bash文件名,个位数的,可直接使用数字,但两位数以上,则必须使用 {} 符号来括住,如${10}.
$?:是上一指令的返回值,成功是0,不成功是1。一般来说,UNIX(linux) 系统的进程以执行系统调用exit() 来结束的。这个回传值就是status值。回传给父进程,用来检查子进程的执行状态。一般指令程序倘若执行成功,其回传值为 0;失败为 1。
$*:所有脚本参数的内容:就是调用调用本bash shell的参数。
$@:基本上与上面相同。只不过是“$*”返回的是一个字符串,字符串中存在多外空格。 “$@”返回多个字符串。
$#:返回所有脚本参数的个数。
$$ :Shell本身的PID(ProcessID),即当前进程的PID。
$! :Shell最后运行的后台Process的PID
$- :使用Set命令设定的Flag一览
【案例实践】
(1)显示进度条
fun_wait(){ pid=`echo $!` count_tar=1 while [ -d /proc/$pid ] do count_tar=$(expr $count_tar + 1 ) for ((i=1;i<$count_tar;i++ )) do echo -n "." sleep 0.5 done done if [ $? -eq 0 ];then echo -e "\n" action "" /bin/true else echo -e "\n" action " " /bin/false exit 1 fi } main(){ tar -C /usr/local/ -zxf $mysql_tar& echo -n "tar -zxf $mysql_tar -C /usr/local ..." fun_wait elif [ "${mysql_tar##*.}" = "xz" ]; then xz -d $mysql_tar& echo -n "xz -dkf $mysql_tar ." fun_wait local_tmp_tar=${mysql_tar%.*} tar xf $local_tmp_tar -C /usr/local& echo -n "tar xf $local_tmp_tar -C /usr/local ." fun_wait }
效果: