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