上次在寫shell的時候發現vi和vim不一樣:vim是vi的升級版本,它不僅相容vi的所有指令,而且還有一些新的特性在裡面。vim要比vi好用許多。
這次接著上次的內容,基礎知識,繼續學習,本文作者也在自學中,紕漏錯誤在所難免,若有人發現問題請指出謝謝。
Lee出品,轉載請註明出處http://blog.csdn.net/hnulwt/article/details/43155797
布林運算子
先大致熟悉一下布爾相關的三個運算子
! 非運算
-o 或運算(or)
-a 與運算(and)
接著寫程式熟悉一下:
1 #!/bin/sh 2 3 a=4 4 b=6 5 6 if [ $a != $b ] 7 then 8 echo "$a != $b a is not equal to b" 9 else 10 echo "a = b" 11 fi 12 13 if [ $a -gt 3 -a $b -lt 10 ] 14 then 15 echo "and && true" 16 else 17 echo "a < 3 or b > 10" 18 fi
運行結果:
Lee@Lee-PC /Desktop
$ sh test.sh
4 != 6 a is not equal to b
and && true
布林運算子比較簡單,和我們平時自己使用的程式設計語言區別不大,只需注意他的或運算和與運算子號即可。
shell指令碼有倆類較為特殊的運算子:1,字串相關運算子 2檔案測試運算子
字串 和 字串運算子
提到了字串,先講講shell中的字串,他大概是shell中最常用的資料類型了(貌似除了他也沒有其他類型了),先來看看字串的表示方式
字串可以用單引號,也可以用雙引號,也可以不用引號
單引號
倆點需要注意:
單引號裡的任何字元都會原樣輸出,單引號字串中的變數是無效的;
單引號字串中不能出現單引號(對單引號使用轉義符後也不行)
雙引號
雙引號基本沒有什麼限制,一般常用雙引號,雙引號裡面可以使用逸出字元,可以帶入變數
例:
1 animal="dog" 2 say="Hi, \"$animal\"" 3 4 echo $say
運行結果:
$ sh teststr.sh
Hi, "dog"
可以看出倆個冒號被轉義了,animal代表的字串被代入新的句子中。
這裡再說有關於字串的幾個方法
1,擷取字串長度的方法
1 animal="dog" 2 3 echo ${#animal}
輸出結果:3 (這裡不能用echo $#animal ,你可以測試一下,輸出結果就不對喔,這樣$#會代表 傳遞給指令碼或函數的參數個數,所以會輸出:0animal)
2,尋找字串
1 animal="dog, pig, cat, lion and so on" 2 3 echo `expr index "$animal" cat`
輸出結果:11(注意這裡第三行,expr 和 cat之後有特殊符號,該符號不是單引號,是Esc鍵下面那個)
好了,接著我們來看看字串運算子有哪些
= 和 != 判斷倆個字串是否相等(還記得判斷數字是否相等的運算子麼(-eq和-ne))
-z 、 -n 或者直接將字串代入 判斷字串長度是否為零(-z當字串長度為0返回 true,)
下面看測試程式:
1 #! /bin/sh 2 3 a="abasdf" 4 b="sdfa" 5 6 if [ $a = $b ] 7 then 8 echo "1" 9 else 10 echo "2" 11 fi 12 13 if [ -z $a ] 14 then 15 echo "3" 16 else 17 echo "4" 18 fi 19 20 if [ $a ] 21 then 22 echo "5" 23 else 24 echo "6" 25 fi
看看運行結果:
$ sh test.sh
2
4
5
檔案測試運算子
首先我們在案頭上建立一個檔案,執行命令touch file.test
這時候我們已經建立了檔案,但是我們並不知道他的許可權是什麼,運行命令:ls -l | grep file.test查看許可權,運行結果如下圖所示:
這裡我們對Linux許可權做簡單的介紹:
上圖中許可權最開始是-(常規檔案),而還有可能的開頭還有,
“d”目錄(非常常見,你隨便找一個目錄,在這個目錄的上一層目錄ls -l一下就可以看到)
“l”符號連結(通過ln 建立的一些連結)
“c”字元專門裝置檔案
“b”塊專門裝置檔案
“p”先進先出
“s”通訊端
然後我們開始看第一個-後面的欄位,三個為一組看,第一個三元字元組(rw-)代表檔案所有者的許可權,第二個(r--)代表檔案的組的許可權,第三個(r--)代表所有其他使用者的許可權
r 和 w分別代表什麼意思呢。分別代表 可讀read 和 可寫write。還有一個目前檔案沒有該許可權,即x 可執行(execute),那我們現在到底有什麼許可權呢,一般我們擁有 第一個三元字元組 代表的許可權,即:可讀可寫
好了,那我麼賦於他可執行許可權 chmod +x file.test,這樣是賦予三個檔案所有者可執行許可權,我們也可以執行 chmod u+x file.test僅僅給我們自己加許可權。
有關於chmod指令詳細介紹,可以執行chmod --help查看
現在許可權已經賦於檔案了。準備工作已經做好,接下來我們準備對我們新增的這個檔案做個測試。
寫如下shell用於熟練和測試:
1 #! /bin/sh 2 3 file="/Desktop/file.test" 4 5 if [ -r $file ] 6 then 7 echo "1" 8 fi 9 10 if [ -w $file ] 11 then 12 echo "3" 13 else 14 echo "4" 15 fi 16 17 if [ -f $file ] 18 then 19 echo "file is an ordinary file" 20 else 21 echo "special file" 22 fi 23 24 if [ -d $file ] 25 then 26 echo "directory" 27 else 28 echo "not direcotry" 29 fi
運行結果:
$ sh test.sh
1
3
file is an ordinary file
not direcotry
可能還對上面的某些操作符不熟悉,下面附詳細的操作符表。
操作符 |
說明 |
-b file |
檢測檔案是否是塊裝置檔案,如果是,則返回 true。 |
-c file |
檢測檔案是否是字元裝置檔案,如果是,則返回 true |
-d file |
檢測檔案是否是目錄,如果是,則返回 true。 |
-f file |
檢測檔案是否是普通檔案(既不是目錄,也不是裝置檔案),如果是,則返回 true。 |
-g file |
檢測檔案是否設定了 SGID 位,如果是,則返回 true。 |
-k file |
檢測檔案是否設定了粘著位(Sticky Bit),如果是,則返回 true。 |
-p file |
檢測檔案是否是具名管道,如果是,則返回 true。 |
-u file |
檢測檔案是否設定了 SUID 位,如果是,則返回 true。 |
-r file |
檢測檔案是否可讀,如果是,則返回 true。 |
-w file |
檢測檔案是否可寫,如果是,則返回 true。 |
-x file |
檢測檔案是否可執行,如果是,則返回 true。 |
-s file |
檢測檔案是否為空白(檔案大小是否大於0),不為空白返回 true。 |
-e file |
檢測檔案(包括目錄)是否存在,如果是,則返回 true。 |