1 shell程式設計用途
通過終端編寫腳本程式,輔助開發人員完成工程自動化操作
2 編寫規範
- 腳本程式是Unix/Linux系統中的特殊檔案,需要妥善管理
- 放在指定路徑的scripts/目錄下
- 字尾名統一使用.sh
- 第一行代碼 #!/bin/bash 指定程式執行
3 執行方式
- 通過指令執行
- bash 檔案名
- sh 檔案名
- 直接執行(需要執行權限)
- ./檔案名
4 注釋
- 除第一行的#!/bin/bash,單行注釋以 # 開頭
- 多行注釋(多行注釋方法較多,這裡隻是其中一種)
- :<<自定義字元 注釋内容 自定義字元
5 标準輸出
- 列印完換行
- echo “要列印的資訊”
- 列印完不換行
- echo -n “要列印的資訊”
- 可以不加雙引号,但規範寫法要添加
6 标準輸入
- 顯示輸入資訊:
- read -p “提示資訊”
- 不顯示輸入資訊
- read -s “提示資訊”
7 變量
- 命名規則
- 遵循變量命名規則(見名知義、字母數字下劃線組成、數字不能開頭)
- 指派
- 變量名=值
- 兩邊不需要空格
# 可以用雙引号也可以不用雙引号
name=Jack
- 使用變量
- 在變量名前面添加 $ 符号 "
- 與其他字元串拼接使用 ${name}_001
echo "name:$name
echo "${name}_001"
- 引号
- 雙引号-強引用:輸出指派
- 單引号-弱引用:不輸出指派
8 選擇結構
8.1 單分支結構
- 判斷表達式中符号的兩端或**[ ]内兩端**要有空格,指派沒有空格
if 條件
then
條件為True執行的代碼
fi
8.2 雙分支結構
if [ 條件1 ];then
條件1為True執行的代碼
else
條件不滿足執行代碼
fi
8.3 多分支結構
if [ 條件1 ];then
條件1為True執行的代碼
elif [ 條件2 ];then
條件2為True執行的代碼
elif ....
else
任何條件都不滿足執行的代碼
fi
8.3 判斷符号
8.3.1 檔案判斷
- 判斷檔案是否存在 if [ -e 檔案路徑 ]
- 判斷是否檔案 if [ -f 檔案路徑 ]
- 判斷是否檔案夾 if [ -d 檔案路徑 ]
- 判斷檔案是否可讀 if [ -r 檔案路徑 ]
- 判斷檔案是否可寫 if [ -d 檔案路徑 ]
- 判斷檔案是否可執行 if [ -x 檔案路徑 ]
8.3.2 字元串判斷
- 判斷兩個字元是否相等 if [ s1 = s2 ]
- 判斷兩個字元是否不相等 if [ s1 != s2 ]
- 判斷字元串長度是否為0 if [ -z s ]
- 判斷字元串是否為空 if [ -n s ]
8.3.3 整數判斷
- 判斷是否相等 [ num1 -eq num2 ]
- 判斷是否不相等 [ num1 -eq num2 ]
- 判斷是否大于 [ num1 -eq num2 ]
- 判斷是否小于 [ num1 -eq num2 ]
- 判斷是否大于等于 [ num1 -eq num2 ]
- 判斷是否小于等于 [ num1 -eq num2 ]
8.3.4 邏輯判斷
- 并且關系 [ a && b ] 或 [ a -a b ]
- 或者關系 [ a || b ] 或 [ a -o b ]
- 取反 [ ! a ]
8.4 case流程控制
case 變量 in
變量1)
代碼1
;;
變量2)
代碼2
;;
*)
全部都沒有比對成功的代碼
;;
esac
9 循環結構
9.1 for循環
for 臨時變量 in (資料組)
do
循環執行代碼
done
9.2 while循環
while 條件
do
循環執行的代碼
done
10 整數運算
- 運算符号
- 求和 num1 + num2
- 求差 num1 - num2
- 求積 num1 * num2 或 num1 * num2
- 求商 num1 / num2
- 取餘 num1 % num2
- 表達式
-
expr 表達式
expr n u m 1 + num1+ num1+num2 # 操作符号兩邊不加空格是拼接
expr $num1 + $num2 # 相加(其他運算同理)
expr $num1 \ $num2* # expr乘法運算*不能直接使用,否則會報錯,需要轉義後才能相乘
- $(()) 表達式,可以直接運算,可以指派
- res=$((num1 + num2))
- $[] 表達式,可以直接運算,可以指派
- res=$[num1+num2]
- let 關鍵字
-
let i++
let num+=1
11 函數
11.1 函數聲明
- 标準文法
function 函數名稱(){
函數中的代碼
}
- 簡潔方式
函數名稱(){
函數中的代碼
}
- shell中函數參數傳遞有自己的方式,不要在括号内添加形式參數
11.2 函數調用
- 直接使用函數名稱調用,後面不需要加()
11.3 函數傳遞
- 參數不需要在函數内聲明,直接通過函數擷取
- 調用函數的同時傳遞參數,參數直接放在函數名稱後面,用空格分隔
函數名 參數1 參數2 參數3
11.4 函數傳回值
- $* 擷取所有的參數
- [email protected] 擷取所有的參數
- $# 擷取參數的個數
- $n 擷取第n個參數
- $? 擷取上一個指令或五福執行結果,傳回0,執行正常或服務運作中,傳回1,執行不正常,傳回3,服務已停止;傳回4,服務不存在
12 指令替換
先完成 `` 裡面的指令行,然後将其結果替換出來