当前位置:  技术问答>linux和unix

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

    来源: 互联网  发布时间:2016-08-07

    本文导语:  上网看到这样一段代码: 使用方法就是: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 '{pr...

上网看到这样一段代码:
使用方法就是: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

|

我查了半天也没查到

    
 
 

您可能感兴趣的文章:

  • shell脚本如何调用另外一个shell脚本的函数?
  • 急救!关于Shell脚本删除过期文件的问题,Shell脚本达人乱入
  • shell 脚本中命令别名在脚本外无法使用
  • 傻瓜问题,请问shell编程和shell脚本编程的关系
  • C语言调用shell脚本后,通过何种方法能获取脚本中变量的值
  • 想用shell脚本定时执行另一个脚本
  • 一个shell执行另一个带参数shell脚本????????????
  • 如何给shell脚本加密,脚本中有密码。最好是比较直接的,不要说让用 shc
  • Shell脚本调用Sql脚本并向其中传递变量
  • 请问,Shell中如何执行另外一个Shell脚本?
  • 如何传递参数给linux shell 脚本(当脚本从标准输入而不是从文件获取时)
  • nohup执行的shell脚本,全局变量不能传递到脚本中使用吗?
  • cd、zip等命令在shell提示符下能执行,在shell脚本中为什么不能执行呢?
  • shell脚本问题 关于父脚本和子脚本的问题
  • shell脚本错误输出
  • 请教shell脚本启动程序
  • 关于shell脚本的。
  • 关于arm linux下的别名配置脚本如何在进入用户时让shell执行的问题,如bashrc,profile,.bash_profile等脚本,寻求高手解答
  • 高分请教关于Shell脚本执行中断问题?
  • linux shell脚本
  • shell 进度条实现代码
  • linux shell进度条实现方法
  • shell中如何实现进度条功能?(只有10分了,对大家不住了~~)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Centos6下安装Shell下文件上传下载rz,sz命令
  • 不同类型的shell*(K SHELL , C SHELL) 用命令怎么切换?
  • linux bash shell命令:grep文本搜索工具简介
  • 菜鸟问问题:shell是什么呢?普通的ls、cp、pwd这些命令算不算shell呢?如何把自己写的文件变成shell呢?
  • linux bash shell命令:文本搜索工具grep中用于egrep和 grep -E的元字符扩展集
  • 小弟没写过shell,求解 linux shell 命令
  • linux bash shell命令:文本搜索工具Grep命令选项及实例
  • 如何编写Shell,当SQL执行完毕后,继续调用Shell命令。
  • linux bash shell命令:文本搜索工具grep正则表达式元字符集(基本集)
  • Linux 下的cd命令为什么要实现成shell的内建命令
  • shell 命令有as命令吗
  • Linux命令、编辑器与Shell编程 和 UNIX SHELL范例精解(第4版) 区别大么?
  • 有关裁减内核及shell命令的问题
  • redhat linux7.2/7.3,SHELL下,reboot是重启,那么要在SHELL下关机是什么命令???
  • 内核执行shell命令问题
  • 最近学shell命令,但它大量的命令选项特别让人郁闷,不知道有什么方法可以记住这些选项?
  • Linux程序中运行shell命令
  • unix shell如何在不把命令结果打出来的情况下判断命令是否可以执行呢?
  • 在shell命令行中敲一个可执行文件,起一个进程pc,这个进程属于shell进程
  • 求教高手,关于shell命令
  • 在B shell里怎麽执行曾经执行过的命令
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • 我在执行shell时,想在shell里直接向mysql数据库插入数据,我该如何写shell。
  • shell变量和子shell的问题请教
  • 请问“当前shell”和“子shell”的区别?
  • 怎么知道当前是B_SHELL 还是C_SHELL
  • 用户登陆后运行某SHELL退出SHELL就回到LOGIN是怎么作到的?
  • 怎么写shell代码 写好shell怎么运行?
  • 请问一个shell中如何获取这个shell自身抛出的错误?
  • 非登录shell是什么 意思,和登录shell有什么区别啊
  • Solaris 8中修改root的shell为一个非法的Shell后怎么办?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3