在Shell腳本編程中,嵌套循環是一種強大的工具,可以用于處理復雜的任務和數據結構。通過在一個循環內部再嵌套另一個循環,我們可以實現對多維數組、矩陣操作、文件處理等多種高級功能。本文將通過幾個實際的應用案例來展示如何使用嵌套循環解決具體的編程問題。
案例一:打印乘法表
一個常見的應用是打印乘法表。通過嵌套循環,我們可以輕松地生成并打印出指定范圍內的乘法表。
腳本示例:
#!/bin/bashfor ((i=1; i<=9; i++)); dofor ((j=1; j<=i; j++)); doprintf "%d*%d=%-4d" $j $i $((i*j))doneecho ""
done
說明:
- 外層循環控制行數(即乘數),內層循環控制列數(即被乘數)。
printf
函數用于格式化輸出,使得每一項占據相同寬度,從而保持表格整齊。
案例二:遍歷目錄樹
假設我們需要編寫一個腳本來遞歸遍歷目錄及其子目錄,并列出每個目錄下的所有文件。
腳本示例:
#!/bin/bashtraverse_directory() {local directory=$1 # 獲取傳入的目錄路徑for file in "$directory"/*; doif [ -d "$file" ]; thenecho "Directory: $file"traverse_directory "$file" # 遞歸調用自身以遍歷子目錄elif [ -f "$file" ]; thenecho "File: $file"fidone
}root_directory="/path/to/start/directory"
traverse_directory "$root_directory"
說明:
- 使用遞歸函數
traverse_directory
來遍歷目錄樹。 - 對于每個項目,首先檢查它是目錄還是文件,然后根據類型采取相應的行動。
案例三:矩陣轉置
給定一個二維數組(矩陣),我們可以使用嵌套循環將其轉置(即將行變為列,列變為行)。
腳本示例:
#!/bin/bashmatrix=("1 2 3""4 5 6""7 8 9"
)rows=${#matrix[@]}
cols=$(echo "${matrix[0]}" | wc -w)echo "Original Matrix:"
for ((i=0; i<rows; i++)); doecho "${matrix[$i]}"
doneecho ""echo "Transposed Matrix:"
for ((j=0; j<cols; j++)); dorow=""for ((i=0; i<rows; i++)); dovalue=$(echo "${matrix[$i]}" | cut -d' ' -f$((j+1)))row="$row $value"doneecho "$row"
done
說明:
- 首先確定矩陣的行列數。
- 外層循環遍歷每一列,內層循環遍歷每一行,構建轉置后的矩陣。
案例四:批量處理文件
假設我們需要對某個目錄下的所有.txt
文件進行批量處理,比如為每個文件添加前綴或后綴。
腳本示例:
#!/bin/bashprefix="backup_"directory="/path/to/txt/files"
cd "$directory" || exitfor file in *.txt; doif [ -f "$file" ]; thennew_name="${prefix}${file}"mv "$file" "$new_name"echo "Renamed '$file' to '$new_name'"# 進一步處理新命名的文件for operation in "operation1" "operation2"; docase $operation in"operation1")echo "Performing operation1 on $new_name";;"operation2")echo "Performing operation2 on $new_name";;esacdonefi
done
說明:
- 外層循環遍歷當前目錄下的所有
.txt
文件,并重命名它們。 - 內層循環對每個重命名后的文件執行一系列預定義的操作。
結語
感謝您的閱讀!如果你有任何疑問或想要分享的經驗,請在評論區留言交流!