![cover](/upload/linux.jpg)
使用shell的方式为自己的脚本添加进度条
使用shell的方式为自己的脚本添加进度条
样例一(适用于小型脚本,前提是知道自己的任务数量)
#!/bin/bash
# 函数:显示进度条
show_progress() {
current_step=$1
total_steps=5 # 总共有5个主要步骤
percent=$((current_step * 100 / total_steps))
echo -ne "\r["
for ((i=0; i<percent; i+=1)); do # 每个步骤约占1%
echo -ne "="
done
for ((i=percent; i<100; i+=1)); do
echo -ne " "
done
echo -ne "] $percent% 完成"
}
# 步骤1
echo "xxxxxx"
((current_step++)) #为每一个步骤下提供一个返回参数
show_progress $current_step #接收返回参数,并执行循环
# 步骤2
echo "xxxxxx"
((current_step++))
show_progress $current_step
# 步骤3
echo "xxxxxx"
((current_step++))
show_progress $current_step
# 步骤4
echo "xxxxxx"
((current_step++))
show_progress $current_step
# 步骤5
echo "xxxxxx"
((current_step++))
show_progress $current_step
echo # 最终的换行
样例二(适用于多任务处理)
#!/bin/bash
# 显示旋转指示器函数
show_spinner() {
local pid=$1
local delay=0.1
local spinstr='|/-\'
while [ "$(ps a | awk '{print $1}' | grep $pid)" ]; do
local temp=${spinstr#?}
printf " [%c] " "$spinstr"
local spinstr=$temp${spinstr%"$temp"}
sleep $delay
printf "\b\b\b\b\b\b"
done
printf " \b\b\b\b"
}
# 模拟任务执行函数,这里仅为演示,你的任务逻辑会在这里
do_tasks() {
# 这里用sleep模拟一个不确定长度的任务执行
sleep $((RANDOM%5 + 5))
}
# 在后台启动任务并获取其PID
do_tasks &
TASK_PID=$!
# 显示旋转指示器
show_spinner $TASK_PID
wait $TASK_PID
echo "任务完成!"
样例三(适用于多任务且能重复执行的脚本)
#!/bin/bash
# 初始化进度和任务计数器
PROGRESS=0
# 显示动态进度信息函数
show_progress() {
echo -ne "\r已完成任务数: $PROGRESS"
}
# 模拟任务执行函数,这里仅为演示,你的任务逻辑会在这里
do_task() {
# 这里用sleep模拟一个任务执行
yum -y install mariadb &>/dev/null
aa=$(echo $?)
}
do_task2() {
# 这里用sleep模拟一个任务执行
yum -y remove mariadb &>/dev/null
bb=$(echo $?)
}
# 无限循环,直到满足某个条件退出循环
while : ; do
# 执行任务1
do_task
# 更新进度并且显示
PROGRESS=$((PROGRESS + 1)) && show_progress
# 执行任务2
do_task2
# 更新进度并且显示
PROGRESS=$((PROGRESS + 1)) && show_progress
# 可以设置一个条件来跳出循环,比如达到某个任务数或者某个状态
# 这里只是演示,所以我们用一个随机的退出条件
if [ $bb -eq 0 ];then
break
fi
done
echo -e "\n任务全部完成!"
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果