努力讓自己工作變得高效,會寫腳本,會用腳本,往往事半功倍。所以,今天就抽出一些時間學習學習Shell腳本。
--------------前方高能預警,本文寫的略自娛自樂,如有看著不適,請狂戳右上角----------------------
shell有兩種執行命令的方式:
交互式(Interactive):解釋執行用戶的命令,用戶輸入一條命令,Shell就解釋執行一條。
批處理(Batch):用戶事先寫一個Shell腳本(Script),其中有很多條命令,讓Shell一次把這些命令執行完,而不必一條一條地敲命令。
我們要知道bash和sh不是一個東西,我們需要了解,bash完全兼容sh,也就是說,用sh寫的腳本可以不加修改的在bash中執行。
由於本人是用vi寫的,剛開始用vi會感覺這東西尼瑪是人用的麼,難用的要死,如果決定用vim編輯器,在開始寫shell之前,還是默默的熟悉一下vi的編輯命令吧。可以參考鏈接http://blog.csdn.net/hnulwt/article/details/43062065
來吧,開始寫shell
終端輸入 vi test.sh
開始編輯輸入一下內容:(其實在vi編輯器裡面輸入內容是最難的了!!!)
echo "Hi, SB" read PERSON echo "$PERSON, ni shi hou zi pai lai de dou bi ma ?"輸入完畢後,按Esc,然後輸入 wq,按enter
好了已經保存並且退出了。(以上步驟如果還不夠熟練,建議你換個姿勢~再來一次並且明白每個步驟的作用)
接著運行,運行的話有好幾種方式,這裡用倆種吧
第一種,輸入 ./test.sh(注意!前面有個點,表示當前目錄下)
第二種,輸入 sh test.sh (當然bash test.sh也可以啦,前面說了bash對sh兼容是很好的,當然我這裡不是看敲sh方便嘛,就倆個字符。(尼瑪!多敲倆個字符能死。。))
好了,看看結果。咦?怎麼不對。。。
Linux有個權限系統,我們這樣創建的文件是沒有執行權限的,因為默認創建的文件權限是 -rw-r--r--,至於不了解這一出字符的意思,查吧,網上資料到處都是。所以,在執行之前還需要給他加權限,命令行輸入 chmod +x ./test.sh,即可,這樣就增加了可執行權限。(偶爾我會簡單粗暴的chmod 777 ./test.sh,當然這不是什麼好方法~,這個和前面說的是有區別的哈,可以通過 ls -l | grep test.sh 查看倆個賦予權限的區別),至於上面敘述的有疑問,就借助搜索引擎吧,也可以直接回復提問
好了,這下可以運行我們的程序了,敲入 ./test.sh 或 sh test.sh 運行,是不是有驚喜啊!居然說出了“Hi SB”,緊接著我輸入了nima 然後後面的字符也就出來了。運行結果如下圖:
變量概念
好了,第一個小程序運行成功了,接下來看看變量定義:<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+wP3X06O6dmFyaWJsZU5hbWU9"value"
首先有一點,變量名和等號之間不能有空格,這點千萬注意,因為我們平時寫其他程序的時候可能已經養成了這種習慣,在shell這裡需要注意這個習慣,
然後要知道的一些變量命名規則:
1,首個字符必須為字母(a-z,A-Z)。
2,中間不能有空格,可以使用下劃線(_)。
3,不能使用標點符號。
4,不能使用bash裡的關鍵字(可用help命令查看保留關鍵字)。
定義好變量我們就要開始使用變量了,如何使用變量,需要在自己定義的變量名上加上大括號,然後最前面寫上$字符,例如
who="dog"
echo who is ${who}?
其實變量可以直接用$who取,但是為了養成好習慣,還是加上括號吧。
接著我們對shell的變量類型做個了解,有三種變量:
算數運算
Bash 支持很多運算符,包括算數運算符、關系運算符、布爾運算符、字符串運算符和文件測試運算符。
原生bash不支持簡單的數學運算,但是可以通過其他命令來實現,例如 awk 和 expr,expr 最常用。
expr 是一款表達式計算工具,使用它能完成表達式的求值操作。
接著寫一小段shell,按照下圖:
# /bin/bash value=`expr 2 + 2` echo "Total value :${value}"圖中有幾個點要注意,第一行是linux的注釋,以#號開頭。
在第二行中注意賦值地方是沒有空格的,而在計算表達式的時候之間是有空格的。 expr 2 + 2表達式被 ` 號括起來。注意 · 號並不是單引號,而是鍵盤上Esc下面的符號。(半角英文模式)
運行結果
Lee@Lee-PC /Desktop
$ sh test.sh
Total value :4
好了接著跟我一起輸入如下內容:
# /bin/bash a=10 b=20 value=`expr 2 + 2` echo "Total value :${value}" value=`expr $a \* $b` echo "a * b : ${value}" value=`expr $b % $a` echo "a % b : ${value}" if [ $a == $b ] then echo "a equals b" fi if [ $a != $b ] then echo "a not equals b" fi
$ sh test.sh
Total value :4
a * b : 200
a % b : 0
a not equals b
對上面稍做說明:
在計算a * b的時候,我們的表示有用到轉義字符 \ (反斜槓)
條件表達式要放在方括號之間,並且要有空格,例如 [$a==$b] 是錯誤的,必須寫成 [ $a == $b ]
if...then...fi 是條件語句,後面我們會對其再進行了解
關系運算
接著上面的腳本,我們繼續編輯輸入:
if [ $a -eq $b ] then echo "$a -eq $b" else echo "a not equals b " fi if [ $a -gt $b ] then echo "$a gt $b" else echo "a not greater than b" fi if [ $a -le $b ] then echo "$a le $b" else echo "a not less or equal to b" fi
$ sh test.sh
Total value :4
a * b : 200
a % b : 0
a not equals b
a not equals b
a not greater than b
10 le 20
好了,寫腳本的時候就能猜出來-gt 和-le的作用吧。我們系統的來看看
關系運算符列表
運算符 說明 舉例 -eq 檢測兩個數是否相等,相等返回 true。 [ $a -eq $b ] 返回 true。 -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。