プログレスバーを使用してプログラムのインストールをシェルスクリプトで実行します。

必要

シェルを使用してソフトウェア インストール スクリプトを作成し、プログレス バーを表示する

#!/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コマンドを使用して string 内の改行文字を削除します\n。つまり、複数行の文字列を 1 行に結合します。

  3. $percentage: コードのこの部分は、進捗率の数値です。

  4. $(printf "[%-${total_steps}s] %d%%" ...): コードのこの部分では、printf書式設定された文字列の関数を使用して、$current_step文字#列と行の進行状況のパーセンテージを書式設定された文字列に挿入します。

具体的な説明は以下の通りです。

  • [%-${total_steps}s]$total_steps: これは、角括弧の固定長文字列を表す書式設定された文字列です。ここで-%、 は左揃えを表し、${total_steps}sパディング文字の文字列プレースホルダーを表します#

  • %d%%: これは、進行状況のパーセンテージの値を埋めるために使用される整数のプレースホルダーを表す書式設定された文字列であり、次の場合は%%パーセント記号文字を出力することを意味します%

最終的に、progress_bar文字列の内容は のようなものになり[##### ] 50%#インストールの進行に応じて数値と進行状況のパーセンテージが変化します。

効果

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/m0_47406832/article/details/132482385