700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > linux 命令执行进度 shell脚本实现“显示命令执行进度”

linux 命令执行进度 shell脚本实现“显示命令执行进度”

时间:2020-02-07 00:30:23

相关推荐

linux 命令执行进度 shell脚本实现“显示命令执行进度”

上网看到这样一段代码:

使用方法就是:xxx.shfile.tar

在解压文件的时候会给出解压进度

#!/bin/bash

if[$#-ne1];then

echo"Usage:$0file"

exit1

fi

TSIZE=0

forFSIZEin$(tartvvf$1|awk'{print$3}');do

if["$FSIZE"="${FSIZE//[^0-9]/}"];then

TSIZE=$((TSIZE+FSIZE))

fi

done

[$TSIZE-eq0]&&exit1

MSG="Extracting..."

PROG_POS=$((${#MSG}+1))

PERC_POS=$((${#MSG}+53))

echo$MSG

PREV=-1

NSIZE=0

forFSIZEin$(tarxvvf$1|awk'{print$3}');do

if["$FSIZE"="${FSIZE//[^0-9]/}"];then

NSIZE=$((NSIZE+FSIZE))

PERCENT=$((NSIZE*100/TSIZE))

if[$PERCENT-ne$PREV];then

PLUS=$((PERCENT/2))

PROGRESS=$(printf"%.${PLUS}d"|tr'0''+')

echo-e"e[Ae[${PROG_POS}G${PROGRESS}=>"

echo-e"e[Ae[${PERC_POS}G${PERCENT}%"

PREV=$PERCENT

fi

fi

done

下面这句存在疑问,不知实现的原理是什么:

echo-e"e[Ae[${PROG_POS}G${PROGRESS}=>"

上网查了一下,-e表示开启转义,e会打印出ESC字符,曾经看过e[30m可以改变终端颜色,但后面跟个[A是做什么呢?

${PROG_POS}是个数字,这里是13,那e[13G,后面再跟一个字符窜是什么意思呢?

请大家帮忙分析下,谢谢了~

|

${PROG_POS}是个数字,这里是13,那e[13G,后面再跟一个字符窜是什么意思呢

这个我知道从第13个位置开始输出结合你的代码echo-e"e[Ae[${PROG_POS}G${PROGRESS}=>"就是在第13开始输出${PROGRESS}=>而${PROGRESS}是+号所以就是输出+=>

echo-e"e[Ae[${PERC_POS}G${PERCENT}%"

这一句e[${PERC_POS}G是从PERC_POS的位置开始输出从代码上边来看是PROG_POS+2的位置而${PERCENT}%是百分比所以就是在PROG_POS+2位置开始输出进度的百分比即+=>之后+=>x%

|

e[A这个的意思虽然我不敢确认

但是我在CentOS里做了测试发现它有在同一行输出的意思

见下面代码

#!/bin/bash

a="123456789"

forbin$a

do

echo-e"e[Ae[${b}G${b}"

done

echo-e"e[Ae[${b}G${b}"的意思是在第b位输出b

而输出的结果确是是

123456789

|

我查了半天也没查到

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。