目錄
Linux shell 腳本語句
1. for 循環流程控制
1.1 基本語法格式
1.2 常見用法示例
1.3生產案例示例
2. while 循環
2.1 基本語法格式
2.2 常見用法示例
3. case 語句
3.1 基本語法格式
3.2 常見用法示例
3.3生產案例示例
4. shell 函數
4.1 函數的定義
4.2 函數的調用
4.3 函數的參數
4.4 函數的返回值
5. 數組
5.1 數組的定義
5.2 數組的訪問
5.3?數組元素的修改與刪除
Linux shell 腳本語句
1. for 循環流程控制
for 循環是 shell 腳本中用于重復執行一系列命令的流程控制結構,適合對列表中的每個元素執行相同或相似的操作。
1.1 基本語法格式
for 變量名 in 列表
do
????循環體命令
done
其中,“變量名” 會依次取 “列表” 中的每個值,每次取值后執行 “循環體命令”,直到列表中的元素全部處理完畢。
還有第2種寫法
for ((初始值; 限制值; 執行步長))
do
? ? ? ? 程序段
done
解釋:
初始值:即循環初始值。例如:i=1
限制值:即循環條件。例如:i<=5
執行步長:即循環初始值修改。例如:i++
1.2 常見用法示例
- 遍歷固定列表:列表為明確的多個值,用空格分隔。
比如,遍歷水果列表并輸出
執行后會依次輸出 “我喜歡的水果:apple”“我喜歡的水果:banana”“我喜歡的水果:orange”。
遍歷文件列表:列表為某個目錄下的文件
比如我要找當前目錄下的文本文件
若當前目錄有 11.txt、ip.txt,會輸出對應的文件名。
遍歷數字范圍:使用 “{起始值.. 結束值}” 表示數字范圍。
比如輸出1到5的數字
就會分別輸出數字1到5
1.3生產案例示例
比如,我要統計 /var/log 有多少個文件,并且顯示這些文件名,輸入以下命令
這邊分別解釋一下這些
1. sum=0??
?作用:初始化變量 sum 為 0,用于后續統計文件數量。
2. for i in $(ls -r *); do??
ls:列出目錄內容。
-r:逆序排序(從 Z 到 A)。
*:匹配所有文件和目錄(不包括隱藏文件)。
3.if [ -f "$i" ]; then??
??-f "$i"檢查 $i 是否是普通文件(不是目錄、鏈接等)。
??注意:變量 $i 必須用雙引號包裹("$i"),避免文件名含空格時出錯。
?4. let sum++??
??作用計數器 sum 加 1。
然后運行
2. while 循環
while 循環也是一種循環結構,它根據條件判斷結果來決定是否重復執行循環體,只要條件為真,就會一直執行,直到條件為假時停止。
2.1 基本語法格式
while 條件判斷
do
????循環體命令
done
每次執行循環前都會先判斷 “條件判斷” 的結果,若結果為真(返回 0),則執行 “循環體命令”;若為假(返回非 0),則退出循環。
2.2 常見用法示例
- 基本條件循環:通過條件控制循環次數。比如從1數到5
執行后會依次輸出 1 到 5 的計數。
- 無限循環:在語句在滿足特定條件時退出無限循環。
其中 exit 0 為退出循環,當我只要輸入的字符不是yes 則不會退出循環
3. case 語句
case 語句用于多分支條件判斷,它將一個變量與多個模式進行匹配,當匹配到某個模式時,執行對應的命令塊,適合處理多種固定的選擇場景。
3.1 基本語法格式
case 變量 in
????模式1)
????????命令塊1
????????;;
????模式2)
????????命令塊2
????????;;
????模式n)
????????命令塊n
????????;;
????*)
????????默認命令塊 ?# 當變量與所有模式都不匹配時執行
????????;;
esac
“變量” 會依次與每個 “模式” 進行比較,匹配成功則執行對應的 “命令塊”,每個命令塊以 “;;” 結束;“*” 表示默認模式,匹配所有未被前面模式匹配的情況。
3.2 常見用法示例
- 簡單菜單選擇:根據用戶輸入的選項執行不同操作。比如查看當前目錄,今天的日期
當用戶輸入 1 時,執行 ls -l 查看目錄;輸入 2 時,執行 date 查看時間;輸入 3 時退出;輸入其他內容時提示無效選項。
3.3生產案例示例
比如我要用case查看系統硬件的負載情況的信息(cpu,內存,磁盤)
保存以后分別運行,比如我輸入1,就可以查看cpu的負載情況
我輸入2,就可以查看內存的負載情況
輸入1,2,3,4以外的數字就會提示
4. shell 函數
shell 函數是將一系列命令組合在一起并賦予名稱的代碼塊,它可以實現代碼的復用,讓腳本結構更清晰,便于維護和修改。
4.1 函數的定義
shell 函數有兩種常見的定義方式:
方式一:
函數名() {
????函數體(一系列命令)
}
方式二:
function 函數名 {
????函數體(一系列命令)
}
其中,函數名遵循 shell 變量的命名規則,由字母、數字和下劃線組成,不能以數字開頭。函數體包含實現特定功能的命令序列。
4.2 函數的調用
定義好函數后,直接使用函數名即可調用該函數,無需加括號。
示例:定義一個輸出歡迎信息的函數
執行腳本后,會輸出 “歡迎使用本腳本!”。
4.3 函數的參數
函數可以接收參數,在函數內部通過$1、$2…… 來獲取參數,$0表示函數名本身,$#表示參數的個數。
示例:定義一個計算兩數之和的函數
?
執行后輸出 “3 + 5 = 8”。
4.4 函數的返回值
函數可以通過return語句返回一個整數(0-255)。也可以通過 echo 輸出結果,在調用時用變量接收。
示例:有返回值的函數
5. 數組
數組是 shell 中用于存儲多個值的變量類型,它可以存儲不同類型的數據,方便對一組相關數據進行管理和操作。
5.1 數組的定義
在 shell 中,數組的定義方式較為靈活,常見的有以下幾種:
- 方式一:直接定義數組元素
數組名=(元素1 元素2 元素3 ...)
示例:
fruits=("apple" "banana" "orange" "grape")
- 方式二:單獨為數組元素賦值
數組名[索引]=元素
示例:
numbers[0]=10
numbers[1]=20
numbers[2]=30
?
其中,數組的索引從 0 開始。
5.2 數組的訪問
訪問數組元素時,使用${數組名[索引]}的格式,若要訪問數組中的所有元素,使用${數組名[@]}或${數組名[*]}。
示例:
5.3?數組的遍歷
可以使用 for 循環遍歷數組中的所有元素。
示例:
執行后依次輸出數組中的每個元素。
5.3?數組元素的修改與刪除
- 修改數組元素:直接為指定索引的元素重新賦值
fruits[1]="watermelon"
echo "修改后的第二個水果:${fruits[1]}"
- 刪除數組元素:使用unset命令
unset fruits[2]
echo "刪除第三個元素后的水果:${fruits[@]}"