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

上网看到这样一段代码:

使用方法就是:xxx.sh file.tar

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

#!/bin/bash

if [ $# -ne 1 ]; then

echo "Usage: $0 file"

exit 1

fi

TSIZE=0

for FSIZE in $(tar tvvf $1 | awk '{print $3}'); do

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

TSIZE=$((TSIZE+FSIZE))

fi

done

[ $TSIZE -eq 0 ] && exit 1

MSG="Extracting..."

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

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

echo $MSG

PREV=-1

NSIZE=0

for FSIZE in $(tar xvvf $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="1 2 3 4 5 6 7 8 9"

for b in $a

do

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

done

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

而输出的结果确是是

123456789

|

我查了半天也没查到

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值