對shell指令碼裡if語句的一點剖析

來源:互聯網
上載者:User

  寫過shell指令碼的肯定寫過這樣一段:

if [ -d dir ]
then
    echo"success"
else
    echo"failed"
fi

   凡是說到if的時候書裡都會提到這麼兩條規則:
   1、“[”的右邊和“]”的左邊必須有空格;
   2、如果要把then和if放到同一行,就要加個分號,寫成 if [-d /bin]; then 這樣的形式。

  大多數的書都介紹到這裡就為止了,我也一度死記硬了這兩條規則,我還一直認為shell指令碼沒規律、記不住、太難寫。其實不然,直到今天我才發現:

roovent@ubuntu-desktop:~ $ which [
/usr/bin/[

  原來“[”是個命令,和ls、rm一樣是一個命令。經查,“[”命令和test命令的功能、用法都基本一樣,在有的版本的linux中“[”就是test的一個連結。
  這就好解釋了,[ -d 其實就是一個命令帶一個參數,就像ls –a,命令和參數之間當然必須有空格。只不過“[”有一點特殊,它的最後一個參數必須是“]”,參數之間也必須有空格,這就很好解釋第一條規則。then和if放到同一行,就要在“]”後加個分號來告訴“[”命令到此結束,不然就會把then當成最後一個參數了。
  好了,原來一切都是這麼合情合理,shell指令碼的設計者不會沒事找事搞那麼複雜,只是“[”這麼奇怪的命令名不太能接受罷了。
  最後再多說一句,if後面可以跟各種語句,比如if echo “hello”也是合法的,判斷的依據就是這條語句是否執行成功,當然了if後面跟著用&&或||串連的多條語句也是可以的。

-----------------------------------------------------
- 原創文章,轉載請註明出處。
- 博 客 園:http://www.cnblogs.com/roovent/
- 百度空間:http://hi.baidu.com/roovent/home
- 電子郵箱:yangq.nj#gmail.com
-----------------------------------------------------

相關文章

聯繫我們

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