#!/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腳本删除目錄下的指定檔案