Shell程式設計總結
一、Hello World
建立檔案test.sh
然後編輯代碼:
cd 到目标目錄下:
另一種運作方式:
二、變量
變量名要求:
a) 隻能是數字,字元,下劃線,并且首字母不能是數字
b) 中間不能有空格,但是可以有下劃線
c) 不能用關鍵詞
使用變量:
花括号加不加都行,加花括号隻是友善解釋器識别變量邊界。
另外變量和運算符之間不能有空格。
隻讀變量
隻讀變量意味着不能更改
删除變量
echo myshell #可以看到什麼也沒輸出
變量類型
a) 局部變量:隻在shell中起作用,shell運作的時候其他指令不能調用它
b) 環境變量:shell運作的時候,其他指令可以調用的
c) shell變量:是由shell程式設定的特殊變量,有局部變量也有環境變量,這些變量是保證shell的正常運作
shell字元串
a) 單引号:
i. 任何字元都會原樣輸出,單引号裡面的變量無效
ii. 單引号裡面不能出現單引号(轉義的也不行)
b) 雙引号
i. 雙引号裡可以有變量
ii. 雙引号裡可以出現轉義字元
eg:
拼接字元:
擷取字元串長度
提取子串
這個地方運作的時候用sh test.sh可能會不相容,可以用 chmod +x ./test.sh運作
查找子串
shell數組
shell隻支援一維數組
a) 格式:
數組名=(val1 val2…) #用空格分離
b) 随機通路下标:
c) 讀取數組:
i. ${數組名[下标]}
ii. 讀取全部元素${數組名[@]}
d) 擷取長度
# 取得數組元素的個數
length=${#數組名[@]}
# 或者
length=${#數組名[*]}
# 取得數組單個元素的長度
lengthn=${#數組名[n]}
shell注釋
前面加#
三、shell傳遞參數
傳遞參數的格式,$n,$0表示執行檔案名,$1表示第一個參數,之後以此類推:
A+B的小例子:

幾個特殊符号:
參數處理
說明
$#
傳遞到腳本的參數個數
$*
一第一個單字元顯示所有腳本傳遞的參數。
$$
腳本運作的目前程序ID号
$!
背景運作的最後一個程序的ID号
$@
與$*相同,使用時加引号,是傳回每個參數
$-
顯示shell使用的目前選項,與set指令功能相同
$?
顯示最後指令的退出狀态。0表示沒有錯誤,其他任何值都表示有錯誤。
四、shell基本運算符
a) 基本包括:算數運算符、關系運算符、布爾運算符、字元串運算符、檔案測試運算符。
bash不支援原生的數學運算,可以通過其他指令來實作,awk和expr
b) 算數運算符
運算符
舉例
+
加法
`expr $a + $b`
-
減法
`expr $a - $b`
*
乘法
`expr $a * $b`
/
除法
`expr $a / $b`
%
取餘
`expr $a % $b`
=
指派
a=$b
==
相等,傳回true
[$a == $b]
!=
不相等,傳回true
[$a != $b]
c) 關系運算符
-eq
兩個數是否相等
[ $a –eq $b ]
-ne
兩個數是否不相等
[ $a –ne $b ]
-gt
左邊是否大于右邊
[ $a –gt $b ]
-lt
左邊是否小于右邊
[ $a –lt $b ]
-ge
左邊是否大于等于右邊
[ $a –ge $b ]
-le
左邊是否小于等于右邊
[ $a –le $b ]
d) 布爾運算符
!
非運算
[ ! false ]
-o
或運算
[ $a –lt 20 –o $b –gt 100 ]
-a
與運算
[ $a –lt 20 –a $b –gt 100 ]
e) 邏輯運算符
&&
邏輯的AND
[[ $a -lt 100 && $b -gt 100 ]]
||
邏輯的 OR
[[ $a -lt 100 || $b -gt 100 ]]
f) 字元串運算符
檢測兩個字元串是否相等
[ $a = $b ]
檢測兩個字元串是否不等
[ $a != $b ]
-z
檢測字元串長度是否為零
[ -z $a ]
-n
檢測字元串長度是否不0
str
檢測字元串是否為空
[ $a ]
g) 檔案測試符
操作符
-b file
檢測檔案是否是塊裝置檔案
[ -b $file ]
-c file
檢測檔案是否是字元裝置檔案
[ -c $file ]
-d file
檢測檔案是否是目錄
[ -d $file ]
-f file
檢測檔案是否是普通檔案
[ -f $file ]
-g file
檢測檔案是否設定了SGID位
-k file
檢測檔案是否設定了黏着位
[ -k $file ]
-p file
檢測檔案是否有名管道
[ -p $file ]
-u file
檢測檔案是否設定了SUID位
[ -u $file ]
-r file
檢測檔案是否可讀
[ -r $file ]
-w file
檢測檔案是否可寫
[ -w $file ]
-x file
檢測檔案是否可執行
[ -x $file ]
-s file
檢測檔案是否為空
[ -s $file ]
-e file
檢測檔案是否存在
[ -e $file ]
五、echo指令
a) 顯示字元串
i. echo “It is a test”
ii. 雙引号可以省略:echo It is a test
b) 顯示轉義字元
i. echo “\”It is a test \””
c) 顯示變量
d) 顯示換行
i. echo –e “ok! \n” # -e 開啟轉義
e) 顯示不換行
i. echo –e “ok! \c” # -e 開啟轉義
f) 将結果重定向至檔案
i. echo “It is a test” > myfile
g) 原樣輸出到字元串,不進行轉移或取變量
i. echo ‘$name\”’s
h) 顯示執行指令結果
i. echo `date` #這裡用的是反引号
六、Shell流程控制、
a) if
文法格式:
b) if else
c) if else-if else
d) for 循環
格式:
例子:
e) while循環
f) until循環
就像do-while和while循環的差別一樣
g) case
就像switch。
h) break、continue、esac
七、shell函數
例子:
八、輸入輸出重定向
指令
Command > file
将輸出重定向到file
Command < file
将輸入重定向到file
Command >> file
将輸出以追加的方式重定向到file
n > file
将檔案描述符為n的檔案重定向到file
n >> file
将檔案描述符為n的檔案以追加的方式重定向到file
n >& m
将輸出檔案m和n合并
n <& m
将輸入檔案m和n合并
<< tag
将開始标記tag和結束标記tag之間的内容作為輸入
九、Shell檔案包含
. filename #注意點号和檔案名中間有一空格
或
source filename
執行個體:
test1.sh
test2.sh
我每天都在努力,隻是想證明我是認真的活着.