shell script的簡單介紹
shell變數
1.命名規則
- 命名只能使用英文字母,數字和下劃線,首個字元不能以數字開頭
- 中間不能有空格,可以使用下劃線(_)
- 不能使用標點符號。
- 不能使用bash裡的關鍵字
2.定義變數:name=value
3.使用變數:$name
4.只讀變數:readonly name
5.刪除變數:uset name
6.變數型別
- 區域性變數:當前shell有效
- 環境變數:所有的應用程式有效
shell字串
- 雙引號:可解析變數,可以出現轉義字元
- 單引號:不解析變數,原樣輸出
- 字串拼接:
name="hello"
# 使用雙引號拼接
greeting="hello, "$name" !"
greeting_1="hello, $name} !"
echo $greeting $greeting_1
# 使用單引號拼接
greeting_2='hello, '$name' !'
greeting_3='hello, ${name} !'
echo $greeting_2 $greeting_3
輸出結果為:
hello, hello ! hello, hello} !
hello, hello ! hello, ${name} !
- 獲取字串長度
string="abcd"
echo ${#string} #輸出 4
- 提取子字串
string="hello world"
echo ${string:1:4}#輸出 ello
# 字串下標從0開始
- 查詢子字串
string="hello world"
echo `expr index $string e`#輸出2
7.反引號和$()一樣,裡面的語句當作命令執行
shell陣列
- 陣列定義:arrname=(value0 value1 value3)
- 陣列讀取:${arrname[]},中括號內為陣列下標,從0開始
- 獲取陣列長度:length=${#arrname[@]},*號也可以
- 或許陣列單個元素的長度:lengthn=${#arrname[n]},n為陣列下標
shell註釋
- 單行註釋:#
- 多行註釋:<<EOF以EOF結束,EOF可以是任意字母
shell傳遞引數
- 向指令碼傳參
- $0:執行的檔名
- $1:為第一個引數
- $2:為第二個引數 以此類推
- 特殊引數
- $#:傳遞到指令碼的引數個數
- $$:指令碼執行的當前程式ID
- $!:後臺執行的最後一個程式ID
- $?:回傳碼,顯示最後命令的退出狀態
- $@,$*:顯示所有傳遞的引數
shell運算子
- 算數運算子
假設變數a=10,b=20
運算子 | 說明 | 舉例 |
---|---|---|
+ | 加法 | expr $a + $b 結果為 30。 |
- | 減法 | expr $a - $b 結果為 -10。 |
* | 乘法 | expr $a \* $b 結果為 200。 |
/ | 除法 | expr $b / $a 結果為 2。 |
% | 取餘 | expr $b % $a 結果為 0。 |
= | 賦值 | a=$b 將把變數 b 的值賦給 a。 |
== | 相等 | 用於比較兩個數字,相同則返回 true。 [ $a == $b ] 返回 false。 |
!= | 不相等 | 用於比較兩個數字,不相同則返回 true。 [ $a != $b ] 返回 true。 |
- 關係運算子
運算子 | 說明 | 舉例 |
---|---|---|
-eq | 檢測兩個數是否相等,相等返回 true。 | [ $a -eq $b ] 返回 false。 |
-ne | 檢測兩個數是否不相等,不相等返回 true。 | [ $a -ne $b ] 返回 true。 |
-gt | 檢測左邊的數是否大於右邊的,如果是,則返回 true。 | [ $a -gt $b ] 返回 false。 |
-lt | 檢測左邊的數是否小於右邊的,如果是,則返回 true。 | [ $a -lt $b ] 返回 true。 |
-ge | 檢測左邊的數是否大於等於右邊的,如果是,則返回 true。 | [ $a -ge $b ] 返回 false。 |
-le | 檢測左邊的數是否小於等於右邊的,如果是,則返回 true。 | [ $a -le $b ] 返回 true。 |
- 邏輯運算子
運算子 | 說明 | 舉例 |
---|---|---|
&& | 邏輯的 AND | [[ $a -lt 100 && $b -gt 100 ]] 返回 false |
|| | 邏輯的 OR | [[ $a -lt 100 || $b -gt 100 ]] 返回 true |
- 布林運算子
運算子 | 說明 | 舉例 |
---|---|---|
! | 非運算,表示式為 true 則返回 false,否則返回 true。 | [ ! false ] 返回 true。 |
-o | 或運算,有一個表示式為 true 則返回 true。 | [ $a -lt 20 -o $b -gt 100 ] 返回 true。 |
-a | 與運算,兩個表示式都為 true 才返回 true。 | [ $a -lt 20 -a $b -gt 100 ] 返回 false |
- 字串運算子
假設變數a=hello,b=world
運算子 | 說明 | 舉例 |
---|---|---|
= | 檢測兩個字串是否相等,相等返回 true。 | [ $a = $b ] 返回 false。 |
!= | 檢測兩個字串是否相等,不相等返回 true。 | [ $a != $b ] 返回 true。 |
-z | 檢測字串長度是否為0,為0返回 true。 | [ -z $a ] 返回 false。 |
-n | 檢測字串長度是否不為 0,不為 0 返回 true。 | [ -n "$a" ] 返回 true。 |
$ | 檢測字串是否為空,不為空返回 true。 | [ $a ] 返回 true |
- 檔案測試運算子
操作符 | 說明 | 舉例 |
---|---|---|
-b file | 檢測檔案是否是塊裝置檔案,如果是,則返回 true。 | [ -b $file ] 返回 false。 |
-c file | 檢測檔案是否是字元裝置檔案,如果是,則返回 true。 | [ -c $file ] 返回 false。 |
-d file | 檢測檔案是否是目錄,如果是,則返回 true。 | [ -d $file ] 返回 false。 |
-f file | 檢測檔案是否是普通檔案(既不是目錄,也不是裝置檔案),如果是,則返回 true。 | [ -f $file ] 返回 true。 |
-g file | 檢測檔案是否設定了 SGID 位,如果是,則返回 true。 | [ -g $file ] 返回 false。 |
-k file | 檢測檔案是否設定了粘著位(Sticky Bit),如果是,則返回 true。 | [ -k $file ] 返回 false。 |
-p file | 檢測檔案是否是有管道,如果是,則返回 true。 | [ -p $file ] 返回 false。 |
-u file | 檢測檔案是否設定了 SUID 位,如果是,則返回 true。 | [ -u $file ] 返回 false。 |
-r file | 檢測檔案是否可讀,如果是,則返回 true。 | [ -r $file ] 返回 true。 |
-w file | 檢測檔案是否可寫,如果是,則返回 true。 | [ -w $file ] 返回 true。 |
-x file | 檢測檔案是否可執行,如果是,則返回 true。 | [ -x $file ] 返回 true。 |
-s file | 檢測檔案是否為空(檔案大小是否大於0),不為空返回 true。 | [ -s $file ] 返回 true。 |
-e file | 檢測檔案(包括目錄)是否存在,如果是,則返回 true。 | [ -e $file ] 返回 true |
流程控制
- if 語句語法格式:
if condition
then
command1
command2
...
commandN
fi
- if else 語法格式:
if condition
then
command1
command2
...
commandN
else
command
fi
- if else-if else 語法格式:
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
for迴圈一般格式為:
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
- while 迴圈一般格式
while condition
do
command
done
- until 迴圈一般格式
until condition
do
command
done
- case in格式
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac
- 跳出迴圈:
- break跳出所有迴圈
- continue跳出當前迴圈
函式定義
輸入輸出重定向
- 檔案描述符
- 標準輸入 0
- 標準輸出 1
- 標準錯誤輸出 2
- stdin<file 標準輸入重定向
- stdout>file 標準輸出重定向
- stderr>>file 標準錯誤輸出重定向,以追加的方式
shell檔案包含
- .filename
- source filename