天天看點

shell 腳本基礎文法

#!/bin/sh

這句一般在 shell 腳本的第一行。

告訴作業系統, 此腳本的解釋器為 /bin/sh 這個可執行檔案。類似地, 如果你的腳本用 bash, ksh, 解釋, 第一行就應該是      
#!/bin/bash      
#!/bin/ksh      

注意: shell 腳本對空格要求十分嚴格,關鍵字和符号之間必須加空格。

一、判斷

1、字元串判斷

str1 = str2 (或者‘==’)     當兩個串有相同内容、長度時為真

str1 != str2                             當串 str1 和 str2 不等時為真

-n str1                               當串的長度大于0時為真(串非空)

-z str1                                當串的長度為0時為真(空串)

str1                                  當串 str1 為非空時為真

2、數字的判斷

int1 -eq int2                              兩數相等為真

int1 -ne int2                              兩數不等為真

int1 -gt int2                               int1 大于 int2 為真

int1 -ge int2                              int1 大于等于 int2 為真

int1 -lt int2                                int1 小于 int2 為真

int1 -le int2                                  int1 小于等于 int2 為真

3、檔案的判斷

-r file                                        使用者可讀為真

-w file                                       使用者可寫為真

-x file                                        使用者可執行為真

-f file                                        檔案為正規檔案為真

-d file                                       檔案為目錄為真

-c file                                        檔案為字元特殊檔案為真

-b file                                        檔案為塊特殊檔案為真

-s file                                        檔案大小非0時為真

-t file                                        當檔案描述符(預設為1)指定的裝置為終端時為真

4、複雜邏輯判斷

-a                                            與

-o                                          或

!                                          非

5、條件判斷

5.1 if -then 文法格式:                          if     [  條件  ] ;  then 

                                                              elseif  [  條件2  ] ;  then

                                                              else

                                                              fi     #if 語句結束辨別

示例1:輸入分數輸出成績:

#! /bin/sh  
echo "Please enter a score:"  
  
read score  
  
if [ -z "$score" ]; then  
   echo "You enter nothing.Please enter a score:"  
   read score  
else  
   if [ "$score" -lt 0 -o "$score" -gt 100 ]; then  
      echo "The score should be between 0 and 100.Please enter again:"  
      read score  
   else  
      #如果成績大于90  
      if [ "$score" -ge 90 ]; then  
         echo "The grade is A."  
      #如果成績大于80且小于90  
      elif [ "$score" -ge 80 ]; then  
         echo "The grade is B."  
      #如果成績大于70且小于80  
      elif [ "$score" -ge 70 ]; then  
         echo "The grade is C."  
      #如果成績大于60且小于70  
      elif [ "$score" -ge 60 ]; then  
         echo "The grade is D."  
      #如果成績小于60  
      else  
         echo "The grade is E."  
      fi  
   fi  
fi 
           

5.2 case-esac 文法格式:                     case   $變量名稱  in 

                                                             "第一個變量内容")

                                                              程式段

                                                              ;;

                                                              "第二個變量内容")

                                                              程式段

                                                              ;;

                                                             *)

                                                             程式段

                                                             ;;

                                                            esac

二、循環

1. for 循環

文法格式:                                           for  ...     in  ....

                                                            do

                                                            程式段

                                                            done #結束辨別

示例2:輸出 1-100 之間可以被 3 整除的數:

#!/bin/sh

for i in `seq 100`
do
if((i%3==0))
then
echo $i
continue
fi
done
           

三、shift 用法

shift 指令用于對參數的移動(左移),通常用于在不知道傳入參數個數的情況下依次周遊每個參數然後進行相應處理(常見于Linux 中各種程式的啟動腳本)

示例3:依次讀取輸入的參數并列印參數個數:

#!/bin/sh  
while [ $# != 0 ];do  
echo "第一個參數為:$1,參數個數為:$#"  
shift  
done
           

上面的檔案名是 demoTest.sh ,輸入如下指令運作:demoTest.sh  a b c d e f

結果顯示如下:

第一個參數為:a,參數個數為:6

第一個參數為:b,參數個數為:5

第一個參數為:c,參數個數為:4

第一個參數為:d,參數個數為:3

第一個參數為:e,參數個數為:2

第一個參數為:f,參數個數為:1

從上可知 shift(shift 1) 指令每執行一次,變量的個數($#)減一(之前的$1變量被銷毀,之後的$2就變成了$1),而變量值提前一位。

同理,shift n 後,前 n 位參數都會被銷毀。

示例4:

#!/bin/sh  
echo "參數個數為:$#,其中:"  
for i in $(seq 1 $#)  
do  
  eval j=\$$i  
  echo "第$i個參數($"$i"):$j"  
done  
  
shift 3  
  
echo "執行shift 3操作後:"  
echo "參數個數為:$#,其中:"  
for i in $(seq 1 $#)  
do  
  #通過eval把i變量的值($i)作為變量j的名字  
  eval j=\$$i  
  echo "第$i個參數($"$i"):$j"  
done
           

建立檔案: touch

建立檔案夾: mkdir

示例5:

#!/bin/bash
#往腳本裡傳 待删除檔案個數  待删除圖檔個數   待删除檔案路徑  待删除圖檔路徑
a=1
#file Num
fileN=$1+1
#imageUrl Num
imagN=$2+1
for i in "$@"
do
    if [ $a -ge 3 ] && [  $a -le  $(($fileN+2)) ]
    then
#rm -f or  rm
#         echo $i
     rm -f $i
    fi
#delate imageUrlFile
    if [ $a -gt  $(($fileN+2)) ]
    then
#      echo $i
      rm -f $i
    fi

    let "a++"
done
           

推薦:(優質文章)

shell腳本删除目錄下的指定檔案

繼續閱讀