shell进度条

1. 熟悉shell语法 

1、条件测试

掌握test或[可以测试一个条件是否成立,如果测试结果为真,则该命令的退出吗为0,如果测试命令为假,则 命令的退出码为1.恰好与C语言的逻辑相反


                                                                              


                                                


在左方括号[确实是一个命令,传给命令的各参数之间应该用空格隔开

[  -z  "$val"]           判断是空串

[  -n  "$val"]           判断 不是空串

[  -d "$myfile]            路径当中是否是一个目录

[  -f   "$myfile"]          是否是普通文件

[  -b  "$myfile"]          设备是否是块    硬盘是块设备

[  -c  "$myfile"]          是否是字符

1,求最大最小,平均值保留两位小数

                      

求1+1=2 1+2=3 2+3=5  即任意一位数前两位之和

                       

以数组方式求前两位之和

                     

                

2. 编写shell进度条 


           

    

echo-e"\033[40;37m 黑底白字 \033[0m"

echo-e"\033[41;30m 红底黑字 \033[0m"

重新设置属性到缺省设置

0  重新设置属性到缺省设置

1 设置粗体

2 设置一半亮度(模拟彩色显示器的颜色)

4 设置下划线(模拟彩色显示器的颜色)

5 设置闪烁

7 设置反向图象

8 消隐 

22 设置一般密度

24 关闭下划线

25 关闭闪烁

27 关闭反向图象

// 字体颜范围(前景颜色):30~39

30:黑31:红32:绿33:黄34:蓝色35:紫色36:深绿37:白色38:在缺省的前景颜色上设置下划线39:在缺省的前景颜色上关闭下划线

// 字背景颜色范围(背景颜色):40~49 

40:黑41:深红42:绿43:黄色44:蓝色45:紫色46:深绿47:白色 

nA 光标上移n行 nB 光标下移n行 nC 光标右移n行 nD 光标左移n行 y;xH设置光标位置2J 清屏 K 清除从光标到行尾的内容 s 保存光标位置 u 恢复光标位置 ?25l 隐藏光标 ?25h 显示光标

### 如何在 Shell 脚本中实现进度条显示 为了实现在 Shell 中的进度条显示,可以采用多种方法来创建不同类型的进度条。下面介绍一种简单的方法以及更复杂的多层进度条。 #### 简单彩色进度条 通过使用 ANSI 控制序列改变终端颜色并更新同一行上的输出,能够构建一个直观且视觉上吸引人的进度指示器: ```bash #!/bin/bash i=0 b="" array=('-' '\\' '|' '/') while [ $i -le 100 ]; do let idx=i%4 printf "\e[31m\033[40m[%-100s]\e[32m\033[47m [%d%%] \e[30m \033[47m [%c] \e[0m\r" "$b" "$i" "${array[$idx]}"[^1] b+='#' usleep 200000 let i++ done ``` 这段脚本会打印出带有百分比和旋转字符(如 `-`, `\`, `|`, `/`)的红色背景黑色文字方括号内的绿色填充进度条,并每增加一次循环就向右移动一格直到达到百分之百。 #### 动态任务进度条 对于需要跟踪具体操作进展的情况,则可以通过修改上述基础结构来适应特定需求。例如,在执行某些耗时较长的任务期间展示其完成度变化情况: 当运行名为 `schedule_rotate.sh` 的脚本文件后可以看到如下提示信息:“Finished”,这表明该进程已经结束并且成功地展示了整个过程中的进度状况[^2]。 #### 多层次进度条 如果项目涉及多个阶段或子任务,那么可能还需要考虑设计一个多级联式的进度条界面以便更好地反映整体工作流的状态转换关系。这里给出了一种三层嵌套形式的例子,其中每一层都对应着不同的活动部分;随着各环节逐步推进直至最终全部达成目标——即“安装完成”。 ```bash # 假设这是模拟三个独立但相互关联的过程... for phase in "准备环境" "配置服务" "部署应用"; do echo "[${phase}] 开始..." # 对应于当前处理阶段内部的小步迭代逻辑 for ((j = 0; j <= 100; j += 5)); do sleep .1 bar=$(printf '#%.0s' $(seq 0 $((j / 2)))) spaces=$(printf ' %.0s' $(seq 0 $(((100 - j) / 2)))) printf "[%-${spaces}s][%-60s][%d%%%%] %s\n" \ "" "${bar}" ${j} "$(date)" done echo "[${phase}] 完成." done echo "所有步骤均已完毕!" ``` 此代码片段不仅实现了基本的功能,还加入了时间戳记录功能以帮助调试或日志保存用途。每次进入新的大项之前都会清屏重绘新一层的内容,从而保持清晰易读的效果[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值