Shell 腳本是 Linux/Unix 系統管理與自動化運維的核心技能。本文面向初學者,從編寫第一個腳本開始,循序漸進講解執行方式、權限、變量定義、算術運算、關係運算,並給出完整可運行示例。
| 模式 | 說明 |
|---|---|
| 交互式 | 用戶輸入一條命令,Shell 解釋執行一條 |
| 批處理 | 預先寫好腳本文件,一次性執行所有命令 |
#!/bin/bash 或 #!/bin/sh 指定解釋器。vi test.sh 進入編輯器:wq 保存退出#!/bin/bash echo "Hi, SB" read PERSON echo "$PERSON, ni shi hou zi pai lai de dou bi ma ?"
chmod +x ./test.sh # 必須!默認無執行權限 ./test.sh # 方式1:當前目錄執行 sh test.sh # 方式2:顯式調用解釋器
# 正確:等號兩邊無空格
name="ZhangSan"
age=25
# 錯誤:name = "ZhangSan" 會被識別為命令 name 參數 = 和 "ZhangSan"
# 使用變量:建議加大括號
echo "Name is ${name}"
echo "Age is $age" # 簡單情況可省略大括號
help 查看)| 類型 | 作用域 | 示例 |
|---|---|---|
| 局部變量 | 當前 Shell 實例/腳本內部 | name="Tom" |
| 環境變量 | 所有子進程可見 | export PATH=... |
| Shell 變量 | Shell 內部特殊變量 | $0, $#, $?, $$ |
Bash 原生不支持浮點運算,整數運算用 expr 或 $((...))。
#!/bin/bash
value=`expr 2 + 2` # 反引號 ` 非單引號 ',鍵盤 Esc 下方
echo "Total value: ${value}" # 輸出 4
a=10; b=20
value=`expr $a \* $b` # 乘法必須轉義 *
echo "a * b = ${value}" # 200
value=`expr $b % $a` # 取模
echo "b % a = ${value}" # 0
value=$((2 + 2)) value=$((a * b)) # 直接用 * 無需轉義 value=$((b % a)) value=$((a ** 2)) # 支持冪運算
只能用於整數,語法:[ $a -op $b ],括號內必須有空格。
| 運算符 | 含義 | 示例 |
|---|---|---|
| -eq | 等於 | [ $a -eq $b ] |
| -ne | 不等於 | [ $a -ne $b ] |
| -gt | 大於 | [ $a -gt $b ] |
| -lt | 小於 | [ $a -lt $b ] |
| -ge | 大於等於 | [ $a -ge $b ] |
| -le | 小於等於 | [ $a -le $b ] |
if [ $a -eq $b ]; then
echo "Equal"
else
echo "Not equal"
fi
# 簡寫單行
[ $a -gt $b ] && echo "a > b" || echo "a <= b"
#!/bin/bash # 算術與關係運算綜合練習 a=10 b=20 echo "a = $a, b = $b" echo "a + b = $((a + b))" echo "a - b = $((a - b))" echo "a * b = $((a * b))" echo "b / a = $((b / a))" echo "b % a = $((b % a))" if [ $a -eq $b ]; then echo "a == b"; else echo "a != b"; fi if [ $a -lt $b ]; then echo "a < b"; fi if [ $a -le $b ]; then echo "a <= b"; fi
a = 1 是命令,a=1 才是賦值。[$a==$b] 錯誤,[ $a == $b ] 正確(字符串比較用 ==,整數用 -eq)。expr 2+2 錯誤,expr 2 + 2 正確。expr 中 \*,$((...)) 中直接 *。$()(推薦)。Shell 腳本看似簡單,但細節決定成敗。掌握「無空格賦值、[ ] 內加空格、expr/$((...)) 運算、關係運算符」四大核心語法,配合 chmod +x 權限管理,即可編寫實用的自動化腳本。建議在終端反復練習本文示例,肌肉記憶比死記硬背更有效。