bash下的进度条--progress

1、进度条的代码以及展示

事情起源于今天的巡检脚本时间太长,不知是死是活,所以用一下进度条,没有花里胡哨的,都是一看就懂的那种代码。
1、证明自己还活着的信息
在这里插入图片描述
下面是代码

[root@slave1 ~]# cat c.sh
#!/bin/bash
progress(){
	i=1
	s=1
        b='/'
	while [ $s -eq 1 ]
	do
        	printf "please wait %s \r" $b
        	sleep 0.3
		let c=$i%4
		let i+=1
        	case $c in
                	0) b="/";;
                	1) b="-";;
                	2) b="\\";;
                	3) b="|";;
        	esac
 		let x+=1
	done
}

progress &
sleep 10
sh /root/d.sh
[root@slave1 ~]# cat d.sh
#!/bin/bash
kill -9 `ps -aux | grep c.sh | grep -v grep | awk  '{print $2}'`

为什么要写两个脚本,因为kill这条命令我放到c.sh的脚本的最后,但是我发现他并没有完全杀死这个后天的进程,所以我就把kill命令放到了另外一个文件中。
2、第二种显示
在这里插入图片描述

[root@slave1 ~]# cat a.sh
#!/bin/bash
processBar()
{
    process=$1
    whole=$2
    printf "[%03d/%03d]\r" $process $whole
}

whole=100
process=0
while [ $process -lt $whole ] 
do
    let process++
    processBar $process $whole
    sleep 0.1
done
printf "\n"

3、第三种显示
在这里插入图片描述

[root@slave1 ~]# cat pro1.sh 
# !/bin/bash
# progress.sh: show how to make a char progress bar

b=""
for((i=0;i<=100;i+=2))
do
    printf "progress: [%-50s] %d%%\r" $b $i
    sleep 0.2
    b+='#'
done
echo

2、核心内容解释

1、\r的讲解
以上三种进度条都有一个共同的核心就是"\r",\r是一种可以让光标显示到这一行的行首,所以当你显示别的内容时就覆盖了之前的,举个例子:

[root@slave1 ~]# vi test1.sh 
#!/bin/bash
printf "我今天好好学习了\r"
sleep 10
printf "ni\r"
sleep 30
printf "\n"

开始执行就输出,我今天要好好学习了。
在这里插入图片描述
sleep10秒以后你会发现,我变成了ni,其他不变,这是因为位数太短没有全部覆盖。
在这里插入图片描述
2、[ ] 100% 介绍
首先看一下单独执行printf “progress: [%-50s] %d%%” 有什么效果。
在这里插入图片描述
可以看出这只是要输出我们想要的长度而已,下一步去一点点覆盖。那么如何把这个###写进去。printf "progress: [%-50s] %d%%\r" $b $i'printf "中%-50s和%d是一个占位符,执行脚本结束,$b的内容会替代%-50s, $i会替代%d,而%%在printf中才能输出一个%。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值