返回

使用 Shell 脚本实现进度条的两种方式

电脑技巧

使用 Shell 脚本创建进度条:内置方法与外部库

在 Shell 脚本中创建进度条可以极大地增强用户体验,通过直观地显示任务的完成情况,让用户了解进展。本博客将深入探討使用 Shell 脚本创建进度条的兩種主要方法:内置方法和外部库,揭示它們的優缺點,並提供實用的代碼範例。

内置方法:使用 printf 命令

Shell 脚本提供了內建的 printf 命令,可以靈活地格式化並輸出字符串。結合 sleep 命令,我們可以創建一個簡單的進度條。

#!/bin/bash

# 定義進度條長度
BAR_LENGTH=50

# 定義進度條完成百分比
PERCENT=0

# 循環更新進度條
while [ $PERCENT -lt 100 ]; do
  # 計算進度條的長度
  BAR_WIDTH=$(($PERCENT * $BAR_LENGTH / 100))

  # 清除當前行
  printf "\r"

  # 輸出進度條
  printf "["
  for i in $(seq 1 $BAR_WIDTH); do
    printf "="
  done
  for i in $(seq 1 $(($BAR_LENGTH - $BAR_WIDTH))); do
    printf " "
  done
  printf "]"

  # 輸出進度百分比
  printf " %3d%%" $PERCENT

  # 睡一小段時間,讓進度條看起來更順暢
  sleep 0.1

  # 增加進度百分比
  PERCENT=$((PERCENT + 1))
done

# 輸出換行符
printf "\n"

使用 pv 命令

pv 命令專門用於創建進度條。它比 printf 命令更靈活,提供了更多功能,例如顯示傳輸速度和剩餘時間。

#!/bin/bash

# 定義要複製的文件
FILE=large_file.txt

# 使用 pv 命令複製文件
pv $FILE > new_file.txt

使用外部庫:tqdm 庫

對於更複雜的進度條,我們可以使用外部庫。其中最流行的庫之一是 Python 的 tqdm 庫。

import tqdm

# 創建一個進度條
progress_bar = tqdm.tqdm(total=100)

# 更新進度條
for i in range(100):
  progress_bar.update(1)

# 關閉進度條
progress_bar.close()

內置方法與外部庫的比較

特點 內置方法 外部庫 (tqdm)
簡易性 較簡易 較複雜,需安裝額外軟體
客製化 無法客製化 可以客製化
功能性 基本功能 提供更多功能,例如剩餘時間和傳輸速度顯示
平台支援 Unix、Linux、macOS Unix、Linux、macOS,在 Windows 可能無法使用

結論

使用 Shell 脚本创建进度条的方法根据需要而有所不同。对于简单的进度条,内置方法就足够了。对于更高级的进度条,外部库提供了更多的功能和灵活性。本文提供了有关每种方法的详细信息,以便您做出明智的决定。

常見問題解答

  1. 如何自定义使用 printf 创建的进度条?
    答:无法自定义使用 printf 创建的进度条。

  2. 我可以在 Windows 上使用 tqdm 库吗?
    答:可能无法在 Windows 上使用 tqdm 库,具体取决于您使用的 Python 版本和环境。

  3. 除了 printftqdm,还有什么其他方法可以在 Shell 脚本中创建进度条?
    答:其他方法包括使用 whiptaildialogzenity 命令。

  4. 如何使使用 pv 创建的进度条更具交互性?
    答:您可以使用 --rate--eta 选项来显示传输速度和剩余时间。

  5. 我可以在 Shell 脚本中使用其他编程语言来创建进度条吗?
    答:是的,您可以使用 Python、Perl、Ruby 等其他编程语言来创建进度条。