目錄
一、shell指令碼的基本使用
1、語言規範
2、變數
3、重定向(>,>>)
二、運算子和常用判斷
1、比較運算子
2、邏輯運算子
3、常用判斷
三、程式結構
1、分支(if語句)
2、迴圈
四、函式
shell的本質是一段應用程式,它使得使用者和作業系統之間可以互動,是使用者和作業系統的中介。
一、shell指令碼的基本使用
1、語言規範
(1)檔案以.sh結尾;
(2)檔案頭為:#!/bin/bash (表示使用的是bash shell);
(3)以#開頭為註釋;
(4)輸出: echo "輸出內容";
(5)讀取:read -p "自定義讀取提示" name (name為讀取內容設定的變數名,也可設定多個變數名,以空格分隔,在讀取內容時也會以空格分隔內容並分配到相應的變數名)
2、變數
(1)變數的建立級賦值
變數名=變數值
變數名不用宣告型別,由字母、數字和下劃線組成,但不能以數字開頭;預設的大寫變數名錶示系統變數,小寫表示普通變數;
變數值可以為字元、數字和命令,當變數值為命令時需用反單引號(即esc下邊的鍵)包圍起來;
例:w=1`ls -l`
(2)變數值的輸出($)
需在變數前加上$符號,當使用echo加單引號時輸出的只是純文字,而不會將變數的值提取出來,想要得到變數的值,只能使用雙引號將變數包圍;
顯示所有使用者自定的變數用命令:set
顯示所有的系統變數用命令:env
(3)從程式外部給程式傳遞引數
可在程式內部加上$1,表示從外部傳程式序的第一個引數;同理$2表示第二個引數,外部的多個引數之間以空格分隔。
例:給程式a.sh傳入ab,22兩個引數,使用命令:a.sh ab 22
$0表示程式自身,$#表示所有輸入引數的個數,$@表示所有的引數。
如果不是很明瞭可參考python中的sys.argv,機理基本一樣 http://www.cnblogs.com/aland-1415/p/6613449.html
3、重定向(>,>>)
即通過命令將結果輸入到檔案中
例:ls -l >name.txt
如果檔案不存在將會建立檔案,如果檔案存在,使用“>”時將會對檔案進行覆蓋重寫,使用“>>”將會在檔案的末尾進行追加寫入。
也可以在>或>>前加上1或2,注意不要與>,>>之間有空格,其中1表示正確的命令,2表示錯誤的命令。
二、運算子和常用判斷
1、比較運算子
等於:==
不等於:!=
大於:>或-gt
小於:<或-lt
大於等於:>=或-ge
小於等於:<=或-le
在使用(( ))中的條件中只能使用>等符號而不能使用-gt,在shell中(( ))和[]在一定程度上是等價的。
2、邏輯運算子
邏輯與:-a
邏輯或:-o
邏輯非:!
3、常用判斷
-r 檔名:檔案是否存在且可讀
-w 檔名:檔案是否存在且可寫
-x 檔名:檔案是否存在且可執行
-f 檔名:判斷檔案是否存在且是普通檔案
-d 檔名:檔案是否存在且是目錄
-e 檔名:檔案是否存在
-z 變數:判斷字串長度是否等於0
-n 變數:字串長度是否不等於0
在需加[]的條件判斷中,如果在-r等前邊加上test則不用加[];
三、程式結構
1、分支(if語句)
(1)基本格式:
if [ 條件 ]
then
語句1
else
語句2
fi
注意:每個[ ] 左右兩端都需要有空格,條件語句中如果包含變數則需要用雙引號包圍。
then也可以寫在條件之後,不過要在條件之後加上分號。
(2)多個條件連線格式:
if [ condition1 ] ;then
sentence1
elif [ condition2 ] ;then
sentence2
elif [ condition3 ] ;then
sentence3
else
sentence4
fi
(3)case選擇
使用格式:
case $變數名 in
"值1")
語句1;;
"值2")
語句2;;
...
*)
語句n
esac
其中;;表示語句結束,*)表示上邊所有結果都不符合的最後選擇;
值也可以用區間,但最多隻能用0-9的數字。
2、迴圈
(1)while迴圈
格式
while [ 條件 ]
do
語句
done
常用迴圈變數變化寫法:
((i++))
((i+=1)
let i=i+1
i=$(($i+1))
i=$ [ $i+1 ]
常用運算迭代寫法:
((sum=$sum+$i))
sum=$[$sum+$i]
sum=$(($sum+$i))
(2)for 迴圈
for 迭代子
do
語句
done
for迴圈常用迭代子的寫法:
((i=1;i<=10;i++))
i in 1 2 3 4 5 6
i in `seq 1 2 15` #1和15表示起始點,2表示步長
四、函式
函式構造
函式名(){
內容
}
函式呼叫直接用函式名即可。