shell 實練(5)if 判斷

來源:互聯網
上載者:User

練習的小內容:

判斷當前檔案夾下是否存在a.txt檔案,若存在則建立a-1.txt檔案;否則建立t.txt檔案;

if 的三種條件運算式

1、

if  條件一;then

      command1

else

     command2

fi


code:

  1 #!/bin/bash
  2
  3 if  ls|grep a.txt;  then
  4         touch a-1.txt
  5 else    
  6         touch t.txt
  7 fi     

Loong:/home/yee/if# ls
if-1.sh  if-2.sh
Loong:/home/yee/if# sh -x if-1.sh
+ ls
+ grep a.txt
+ touch t.txt
Loong:/home/yee/if# ls
if-1.sh  if-2.sh  t.txt
Loong:/home/yee/if# touch a.txt
Loong:/home/yee/if# ls
a.txt  if-1.sh  if-2.sh  t.txt
Loong:/home/yee/if# sh -x if-1.sh
+ ls
+ grep a.txt
a.txt
+ touch a-1.txt
Loong:/home/yee/if#

2、

if [運算式];then                if與【】間要留空格,否則報錯;

command1

fi                                               分號 ;不能少,否則報錯:syntax error: unexpected end of file   ;不要分號則then 換行寫;

更複雜的情況,則可以使用這個文法:
if [ 條件判斷式一 ]; then
當條件判斷式一成立時,可以進行的指令工作內容;
elif [ 條件判斷式二 ]; then
當條件判斷式二成立時,可以進行的指令工作內容;
else
當條件判斷式一與二均不成立時,可以進行的指令工作內容;
fi


檔案運算式

條件運算式
if [ -f  file]   如果檔案存在
if [ -d...  ]   如果目錄存在
if [ -s file ]   如果檔案存在且非空 
if [ -r file ]   如果檔案存在且可讀

if [ -w file  ]   如果檔案存在且可寫
if [ -x file  ]   如果檔案存在且可執行  
if [ -e dir||file] 如果指定的檔案或者目錄存在返回真
   [ -z STRING ] 如果STRING的長度為零則為真
   [ -n STRING ] 如果STRING的長度非零則為真
   [ STRING1 = STRING2 ] 如果兩個字串相同則為真
   [ STRING1 != STRING2 ] 如果字串不相同則為真

整數Variant 運算式

if [ int1 -eq int2]   如果int1等於int2                      

                                                                                   -eq  -ne -lt 
-nt只能用於整數,不適用於字串,字串等於用賦值號=

if [ int1 -ne int2]    如果不等於   
if [ int1 -ge int2]      如果>=                                整數條件運算式,大於,小於,shell裡沒有> 和<,會被當作角括弧,只有-ge,-gt,-le,lt
if [ int1 -gt int2] 
     如果>
if [ int1 -le int2] 
     如果<=
if [ int1 -lt int2] 
     如果<
   

 字串Variant 運算式

If  [ $a = $b]             
 
如果string1等於string2               條件運算式引用變數要帶$,比較$a和$b,而不是比較a和b
                                     字串允許使用賦值號做等號
if  [ $string1 !=  $string2]  如果string1不等於string2        =放在別的地方是賦值,放在if
[ ]裡就是字串等於, =作為等於時,其兩邊都必須加空格,否則失效
if  [ -n$string ]           如果string 非空(非0),返回0(true) 
if  [ -z $string          如果string
為空白
if  [ $sting]                 如果string非空,返回0 (和-n類似) 

   邏輯非!                                     條件運算式的相反
if [ ! 運算式 ]
if [ ! -d $num]         如果不存在目錄$num

   邏輯與–a                                  條件運算式的並列
if [ 運算式1  –a  運算式2 ]

   邏輯或-o                                 條件運算式的或
if [ 運算式1  –o 運算式2 ]

  
   邏輯運算式

  •    運算式與前面的=  != -d –f –x -ne -eq -lt等合用
  •    邏輯符號就正常的接其他運算式,沒有任何括弧( ),就是並列

               if [ -z "$JHHOME" -a -d $HOME/

        注意邏輯與-a與邏輯或-o很容易和其他字串或檔案的運算子號搞混


code:

 1 #!/bin/bash
  2
  3 filename=/home/yee/if/a.txt
  4 if [ -f $filename ]; then
  5         touch a-1.txt
  6 fi
  7 if [ ! -e $filename ]; then
  8         touch t.txt
  9 fi

Loong:/home/yee/if# ll
總計 12
-rw-r--r-- 1 root root  75 11-07 11:42 if-1.sh
-rw-r--r-- 1 root root 130 11-07 16:08 if-2.sh
-rw-r--r-- 1 root root  38 11-07 14:21 if-3.sh
Loong:/home/yee/if# sh -x if-2.sh
+ filename=/home/yee/if/a.txt
+ '[' -f /home/yee/if/a.txt ']'
+ '[' '!' -e /home/yee/if/a.txt ']'
+ touch t.txt
Loong:/home/yee/if# ll
總計 12
-rw-r--r-- 1 root root  75 11-07 11:42 if-1.sh
-rw-r--r-- 1 root root 130 11-07 16:08 if-2.sh
-rw-r--r-- 1 root root  38 11-07 14:21 if-3.sh
-rw-r--r-- 1 root root   0 11-07 16:11 t.txt
Loong:/home/yee/if#

3、

if test 運算式 ;then

command1

fi

例:

if test $num -eq0     等價於   if [ $num –eq 0]

 

test 運算式,沒有 [  ]

  1 #!/bin/bash  2   3 filename=/home/yee/if/a.txt  4 if test -f $filename  5 then      6         touch a-1.txt  7 else  8         touch t.txt  9 fi      
Loong:/home/yee/if# ll總計 12-rw-r--r-- 1 root root  75 11-07 11:42 if-1.sh-rw-r--r-- 1 root root 130 11-07 16:08 if-2.sh-rw-r--r-- 1 root root  38 11-07 14:21 if-3.sh-rw-r--r-- 1 root root   0 11-07 16:11 t.txtLoong:/home/yee/if# sh -x if-3.sh + filename=/home/yee/if/a.txt+ test -f /home/yee/if/a.txt+ touch t.txtLoong:/home/yee/if# ll總計 12-rw-r--r-- 1 root root  75 11-07 11:42 if-1.sh-rw-r--r-- 1 root root 130 11-07 16:08 if-2.sh-rw-r--r-- 1 root root 103 11-07 16:20 if-3.sh-rw-r--r-- 1 root root   0 11-07 16:20 t.txtLoong:/home/yee/if# touch a.txtLoong:/home/yee/if# sh -x if-3.sh + filename=/home/yee/if/a.txt+ test -f /home/yee/if/a.txt+ touch a-1.txtLoong:/home/yee/if# ll總計 12-rw-r--r-- 1 root root   0 11-07 16:21 a-1.txt-rw-r--r-- 1 root root   0 11-07 16:21 a.txt-rw-r--r-- 1 root root  75 11-07 11:42 if-1.sh-rw-r--r-- 1 root root 130 11-07 16:08 if-2.sh-rw-r--r-- 1 root root 103 11-07 16:20 if-3.sh-rw-r--r-- 1 root root   0 11-07 16:20 t.txtLoong:/home/yee/if# 

 echo -e參數使輸出中的反斜線(\)的說明起作用
 echo -n參數使引號後的內容接著輸出(不換行)

相關文章

聯繫我們

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