《Linux命令列與shell指令碼編程大全》 第十一章 學習筆記

來源:互聯網
上載者:User

第十一章:使用結構化命令

使用if-then語句

if commandthen    commandsfi

如果if後面的命令退出狀態代碼=0,那麼就執行then

另外一種形式

if command; then    commandsfi

 

if-then-else語句

if commandthen    commandselse    commandsfi

如果if後面的命令退出狀態代碼=0,那麼就執行then,否則,執行else

 

嵌套if(else if)

if command1then    commandselif command2then    commandsfi

 

test命令

test命令可以判斷3類條件

1.數值比較

2.字串比較

3.檔案比較

格式:

test condition

在if語句中,可以使用方括弧[]

if test conditionthen    commandsfi

或者

if [ command ]then    commandsfi

注意:方括弧兩邊必須加入一個空格,不然會報錯

 

數值比較

比較 描述
n1 -eq n2

檢查n1是否與n2相等

n1 -ge n2 檢查n1是否大於或等於n2
n1 -gt n2 檢查n1是否大於n2
n1 -le n2 檢查n1是否下雨或等於n2
n1 -lt n2 檢查n1是否小於n2
n1 -ne n2 檢查n1是否不等於n2

可以用在變數上

注意:不能使用浮點數

 

字串比較

比較 描述
str1 = str2 檢查str1是否和str2相同
str1 != str2 檢查str1是否和str2不同
str1 < str2 檢查str1是否比str2小
str1 > str2 檢查str1是否比str2大
-n str1 檢查str1的長度是否非0
-z str1 檢查str1的長度是否為0

 

順序比較需要注意:

1.大於小於符號要轉義,不然會被識別為重新導向符號                                                                                              

2.test命令根據ASCII順序排序,與sort命令不同

 

 字串長度

當變數為空白字串或者沒有初始化時,變成長度是0

Null 字元串或沒有初始化的變數可能會對程式有災難性影響,使用前最好先使用test命令中的-n和-z確認

 

檔案比較

比較 描述
-d file 檢查file是否存在並且是否是一個目錄
-e file 檢查file是否存在
-f file 檢查file是否存在並且是否是一個檔案
-r file 檢查file是否存在並可讀
-s 檢查file是否存在並非空
-w 檢查file是否存在並可寫
-x 檢查file是否存在並可執行
-O 檢查file是否存在並屬於目前使用者所有
-G 檢查file是否存在並且預設組與目前使用者相同

file1 -nt file2

檢查file1是否比file2新
file1 -ot file2 檢查file1是否比file2舊

以檢查目錄為例:

if [ -d $HOME ]then    cd $HOMEelse    echo "$HOME is not a directory"fi

 

複合條件測試

[ condition1 ] || [ condition2 ]

[ condition1 ] && [ condition2 ]

 

if-then的進階特性

1.用於數學運算式的雙圓括弧

2.用於進階字串處理的雙方括弧

雙圓括弧允許將進階數學運算式放入比較中

格式:

(( expression ))

命令符號

符號 描述
val++ 後增
val-- 後減
++val 先增
--val 先減
! 邏輯求反
~ 位求反
** 冪運算
<< 左位移
>> 右位移
& 位布爾和
| 位布爾或
&& 邏輯和
|| 邏輯或

 

雙方括弧格式

[[ expression ]]

提供了模式比對(pattern matching)特性,可以在其中使用Regex

if [ $USER == r* ]

 

case命令

命令格式:

case variable inpattern1 | pattern2) commands1;;pattern3) commands2;;*) default commands;;esac

bash中是可以在case中檢查字串的

從java到bash,文法轉變還是很大的,不過思想是不會變的

下面是一個簡單的樣本:

case $test inpork | beef | lamb )    echo "$test is meat!"    echo "I like it!";;potato | tomato | eggplant )    echo "$test is a vegetable"    echo "who likes it?";;*)    echo "what's this?";;esac

在java7之前,這麼寫是不可以的,switch case中不支援string類型

 

 

轉貼請保留以下連結

本人blog地址

http://su1216.iteye.com/

http://blog.csdn.net/su1216/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.