shell 编写一个带有进度条的程序安装脚本_sh脚本安装环境实现进度条显示

#!/bin/bash

# 模拟软件安装的步骤列表
steps=("解压文件" "安装依赖" "配置设置" "复制文件" "")

# 计算总步骤数
total\_steps=${#steps[@]}

# 安装进度的初始值
progress=0

# 打印安装进度函数
print\_progress() {
    local current\_step=$1
    local percentage=$2
    local step=$3

    # 清除当前行
    printf "\r\033[K"

    # 构建进度条字符串
    local progress\_bar=$(printf "[%-${total\_steps}s] %d%%" "$(yes "#" | head -n $current\_step | tr -d '\n')" "$percentage")


    # 打印安装进度
    printf "安装进度: %s %s" "$progress\_bar" "$step"
}

# 循环执行每个步骤
for ((i=0; i<total\_steps; i++)); do
    step=${steps[$i]}

    # 模拟每个步骤的安装操作
    sleep 1

    # 更新进度
    ((progress = (i+1) \* 100 / total\_steps))

    # 打印安装进度
    print_progress "$((i+1))" "$progress" "$step"
done

# 打印安装完成消息
printf "\n软件安装完成!\n"

在这个示例中,使用 ANSI 转义序列来实现覆盖原来的打印信息,并保持进度条在同一行显示。通过使用 \r 进行回车,然后使用 \033[K 清除当前行的内容,可以实现覆盖效果。

在 print_progress 函数中,首先清除当前行的内容,然后构建进度条字符串,并使用 \r 实现回车到行首的效果。进度条字符串包含了当前步骤的填充部分和进度百分比。

最后,通过调用 print_progress 函数来打印安装进度,并在安装完成后打印安装完成消息。

细节

local progress_bar=$(printf "[%-${total_steps}s] %d%%" "$(yes "#" | head -n $current_step | tr -d '\n')" "$percentage")
这行如何理解 ?

这行代码是用来构建进度条字符串 progress_bar 的。

逐步解释这行代码的含义:

  1. yes "#" | head -n $current_step:这部分代码使用 yes 命令生成一个无限重复的 # 字符串,并使用 head -n $current_step 命令截取前 $current_step 行。这样就生成了一个由 # 字符构成的字符串,长度为 $current_step
  2. tr -d '\n':这部分代码使用 tr 命令删除字符串中的换行符 \n,即将多行字符串合并为单行。
  3. $percentage:这部分代码是进度百分比的数值。
  4. $(printf "[%-${total_steps}s] %d%%" ...):这部分代码使用 printf 格式化字符串的功能,将 $current_step 行的 # 字符串和进度百分比插入到格式化的字符串中。

具体解释如下:

  • [%-${total_steps}s]:这是一个格式化字符串,表示一个固定长度为 $total_steps 的方括号字符串,其中 -% 表示左对齐,${total_steps}s 表示字符串占位符,用来填充 # 字符。
  • %d%%:这是一个格式化字符串,表示一个整数占位符,用来填充进度百分比的数值,同时后面的 %% 表示打印一个百分号字符 %

最终,progress_bar 字符串的内容类似于 [##### ] 50%,其中 # 的数量和进度百分比随着安装进度的增加而变化。

效果

最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

资料预览

给大家整理的视频资料:

给大家整理的电子书资料:

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!
给大家整理的电子书资料:

[外链图片转存中…(img-CPUHNEzl-1727250828036)]

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值