shell 指令碼基礎語法

2021-08-15 18:24:29 字數 4725 閱讀 6596

這句一般在 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`

doif((i%3==0))

then

echo $i

continue

fidone

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

filet "a++"

done

shell指令碼刪除目錄下的指定檔案

Shell指令碼語法基礎

shell是linux下的乙個命令解析器,把一系列的命令序列寫入文字檔案就構成了shell指令碼 類似於windows中的批處理 bin sh echo something echo hello world echo hello mkdir tnt 符號 用來指定該指令碼檔案的解析程式。在上面例子中...

shell指令碼基礎 語法

一 變數 root t foot home2 zzz01 a hello root t foot home2 zzz01 echo a hello root t foot home2 zzz01 echo world hello world 其實 a和 作用相同,但是為了防止字串在拼接時,計算機無法...

shell指令碼基礎語法(if 和 陣列)

條件判斷命令 test 或者 例 test 1 lt 4 判斷1 4 test語句的等價形式 1 lt 4 檔案測試符號 f 存在且是普通檔案 d 存在且是目錄 s 存在且位元組數大於0 r 存在且可讀 w 存在且可寫 x 存在且可執行 如 test d mydoc 判斷mydoc是否是目錄例子 1...