八、Shell echo指令
你可以直接在終端輸入這樣的單行指令來測試學習,不用一直建立新的檔案。
1)顯示普通字元串
echo "hello world"
這裡的雙引号完全可以省略,以下指令與上面執行個體效果一緻:
echo hello world
完整示範如下:

2)顯示轉義字元
echo "\"hello world\""
示範如下:
3)顯示換行
使用\n換行:
echo -e "hello\n"
4)顯示不換行
echo -e "chuan! \c" # -e 開啟轉義 \c 不換行
示範:
5)顯示結果重定向至檔案
定向至test7.sh檔案:
echo "hello world" >test7.sh
6)顯示執行時間
echo `date`
這裡又到了最後了,補充一下printf跟echo指令是一樣的作用,是以我就不示範了,統一用echo來輸出。
九、Shell test 指令
1)數值測試
參數和說明如下:
-eq 等于則為真
-ne 不等于則為真
-gt 大于則為真
-ge 大于等于則為真
-lt 小于則為真
-le 小于等于則為真
示範一個參數如下:
num1=200
num2=200
if test $[num1] -eq $[num2]
then
echo '兩個數相等!'
else
echo '兩個數不相等!'
fi
即:
到這裡我先把前面建立的檔案删了:
rm -rf test1.sh test2.sh test3.sh test4.sh test5.sh test6.sh test7.sh test8.sh
代碼中的 [] 執行基本的算數運算,例如:
a=10
b=10
result=$[a+b] # 注意等号兩邊不能有空格
echo "result結果為: $result"
完整示範如下(我建立了一個檔案夾,免得打亂了):
我僅僅示範了加法,你也可以去嘗試一些别的計算。
2)字元串測試
參數如下:
= 等于則為真
!= 不相等則為真
-z 字元串 字元串的長度為零則為真
-n 字元串 字元串的長度不為零則為真
示範一個如下:
num1="chuan"
num2="chuan"
if test $num1 = $num2
then
echo '兩個字元串相等!'
else
echo '兩個字元串不相等!'
fi
3)檔案測試
參數:
-e 檔案名 如果檔案存在則為真
-r 檔案名 如果檔案存在且可讀則為真
-w 檔案名 如果檔案存在且可寫則為真
-x 檔案名 如果檔案存在且可執行則為真
-s 檔案名 如果檔案存在且至少有一個字元則為真
-d 檔案名 如果檔案存在且為目錄則為真
-f 檔案名 如果檔案存在且為普通檔案則為真
-c 檔案名 如果檔案存在且為字元型特殊檔案則為真
-b 檔案名 如果檔案存在且為塊特殊檔案則為真
舉一個例子:
if test -e ./test1.sh
then
echo '檔案已存在!'
else
echo '檔案不存在!'
fi
其它參數可以自行測試。
十、shell 控制流
1)if判斷流
if else
fi
文法格式如下:
if condition
then
command1
command2
...
commandN
fi
舉個例子:
-gt 大于則為真
測試代碼如下:
a=5
b=6
if test [$a -gt]
then
echo '大於'
else
echo '小於'
fi
再來進階測試代碼如下:
a=5
b=6
if test [$a==$b]
then
echo '等於'
elif [ $a -gt $b ]
then
echo "a 大于 b"
elif [ $a -lt $b ]
then
echo "a 小于 b"
else
echo "沒有符合的條件"
fi
2)for 循環
文法:
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
寫成一行則是:
for var in item1 item2 ... itemN; do command1; command2… done;
舉例子如下:順序輸出目前清單中的數字
for a in 1 2 3 4 5
do
echo "值依次爲: $a"
done
我們再來個進階:列印任意數的乘法表
echo "輸入一個數:"
read num
for (( i=1;i<=$num;i++ ))
do
for (( j=1;j<=$num;j++ ))
do
[ $j -le $i ] && echo -n "${i}*${j}=$((i*j)) " #判斷j是否小于i,當
j大于i時不輸出,輸出不換行,末尾加一個制表符
done
echo "" #輸出一個換行符
done
3)while循環
文法格式:
while condition
do
command
done
舉例為:依次輸出1到6
int=1
while(( $int<=6 ))
do
echo $int
let "int++"
done
4)until 循環
until 循環執行一系列指令直至條件為 true 時停止。until 循環與 while 循環在處理方式上剛好相反。
文法為:
until condition
do
command
done
condition 一般為條件表達式,如果傳回值為 false,則繼續執行循環體内的語句,否則跳出循環。
舉個例子:使用 until 指令來輸出 0 ~ 6 的數字
a=0
until [ ! $a -lt 6 ]
do
echo $a
a=`expr $a + 1`
done
5)case … esac
case … esac 為多選擇語句,與C語言中的 switch … case 類似,每個 case 分支用右圓括号開始,用兩個分号 ;; 表示 break,即執行結束.
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac
舉例:提示輸入 1 到 4,與每一種模式進行比對
echo '輸入 1 到 4 之間的數字:'
echo '你輸入的數字為:'
read a
case $a in
1) echo '你選擇了 1'
;;
2) echo '你選擇了 2'
;;
3) echo '你選擇了 3'
;;
4) echo '你選擇了 4'
;;
*) echo '你沒有輸入 1 到 4 之間的數字'
;;
esac
6)跳出循環
break
break指令允許跳出所有循環(終止執行後面的所有循環)。
do
echo -n "輸入 1 到 5 之間的數字:"
read aNum
case $aNum in
1|2|3|4|5) echo "你輸入的數字為 $aNum!"
;;
*) echo "你輸入的數字不是 1 到 5 之間的! 遊戲結束"
b
continue
continue指令與break指令類似,隻有一點差别,它不會跳出所有循環,僅僅跳出目前循環。
測試代碼為:
while :
do
echo -n "輸入 1 到 5 之間的數字: "
read aNum
case $aNum in
1|2|3|4|5) echo "你輸入的數字為 $aNum!"
;;
*) echo "你輸入的數字不是 1 到 5 之間的!"
continue
echo "遊戲結束"
;;
esac
done
是不是有人想問我怎麼結束呢?ctrl+c強制結束即可。