快速入門shell指令碼編寫(二)

來源:互聯網
上載者:User

上次在寫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。


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.