Shell 腳本擅長處理重複性任務、批量操作、系統管理自動化。若你常面臨:頻繁重複手動操作、高級語言大材小用、需要批量處理文件/日志,Shell 是最佳利器。
#!/bin/bash
cd ~ # 切換到用戶主目錄
mkdir shell_test # 創建目錄
for ((i=0; i<10; i++)) # C 風格 for 循環
do
touch test_$i.txt # 創建 test_0.txt ~ test_9.txt
done
逐行解析:
#!/bin/bash:指定解釋器(shebang)cd ~:切換目錄mkdir:創建目錄for ((...)):循環 10 次touch:創建空文件cd/mkdir/touch 是系統命令(通常在 /bin);for/do/done 是 Shell 關鍵字。# 開頭為註釋。
$:echo $varvar1=10
var2="Jelly Think" # 含空格必須加引號,等號兩邊不能有空格
echo $var1
echo $var2
read var1
echo $var1
| 引號類型 | 變量展開 | 示例輸出 |
|---|---|---|
雙引號 "$var" | 是 | This is JellyThink |
單引號 '$var' | 否 | This is $var |
轉義 "\$var" | 否 | This is $var |
$HOME:用戶主目錄$PATH:命令搜索路徑$0:腳本名稱$#:參數個數$$:腳本進程 PID(常用於生成唯一臨時文件)#!/bin/bash
echo "參數個數:$#"
echo "腳本名稱:$0"
echo "第一個參數:$1"
echo "第二個參數:$2"
執行 ./argsDemo.sh Jelly Think 輸出:
參數個數:2
腳本名稱:./argsDemo.sh
第一個參數:Jelly
第二個參數:Think
Shell 通過命令退出碼判斷真假(0 為真)。test 與 [ ] 等價,[ ] 更具可讀性(注意空格)。
if test -f testDemo.sh; then echo "exists"; fi
if [ -f test.c ]; then echo "exists"; else echo "not found"; fi
| 類別 | 操作符 | 含義 |
|---|---|---|
| 字符串 | str1 = str2 | 相等為真 |
str1 != str2 | 不等為真 | |
-n str | 非空為真 | |
-z str | 空串為真 | |
| 算術 | -eq | 相等 |
-ne | 不等 | |
-gt | 大於 | |
-ge | 大於等於 | |
-lt | 小於 | |
-le | 小於等於 | |
| 文件 | -d file | 是目錄 |
-f file | 是普通文件/存在 | |
-r file | 可讀 | |
-s file | 大小非 0 | |
-w file | 可寫 | |
-x file | 可執行 |
if [ "$var1" = "$var2" ]; then
echo "equal"
elif [ "$var1" = "other" ]; then
echo "other"
else
echo "different"
fi
避坑:變量必須加雙引號,防止空值導致語法錯誤(如 [ = "yes" ])。
for foo in Jelly Think Website; do
echo $foo
done
while [ "$pwd" != "root" ]; do
read pwd
done
until [ "$count" -gt 10 ]; do
((count++))
done
case "$input" in
yes|y|Yes|YES) echo "Good Morning" ;;
no|n|No|NO) echo "Good Afternoon" ;;
*) echo "Invalid input" ;;
esac
| 合並模式* 兜底匹配pattern) 後接命令,;; 結束cmd1 && cmd2:cmd1 真才執行 cmd2(短路)cmd1 || cmd2:cmd1 假才執行 cmd2(短路)foo() {
local var="local" # 局部變量
echo $var
}
var="global"
foo
echo $var # 輸出 global
name() { ... } 或 function name { ... }local 聲明局部變量,覆蓋同名全局變量(僅函數內有效)$1、$@ 等訪問,函數結束自動恢復本文涵蓋 Shell 基礎語法:變量、條件判斷、循環、分支、函數。下一篇將介紹常用文本處理命令(sed、awk、grep 等)與實戰腳本技巧。