使用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任务全部完成!"