Shell指令碼學習(2)
阿新 • • 發佈:2020-10-24
一 條件測試
1.型別
檔案測試、數值比較、字串比較
2.小程式
if ! test -d $1;then #測試引數1是否是目錄 mkdir $1 #不是目錄則建立目錄 fi
if [ ! -d $1 ]; then #和上面含義相同 mkdir $1
fi
#test 命令 相當於 [ ] 命令
if [ $UID -ne 0];then #判斷使用者許可權是否等於0 echo "no permission" exit fi if [$USER != "root"];then #判斷使用者是否是rootecho "no permission" exit fi
通過man test 去檢視所有判斷選項
3.字串比較
提示:使用雙引號
["$USER" = "root"]; echo $?
["$USER"== "root"]; echo $?
[-z "$damon"] 字元長度是0
[-n "$damon"] 字元長度不是0
例子:
damon@ubuntu:~$ v1= damon@ubuntu:~$ [ -z $v1 ];echo $? 0 damon@ubuntu:~$ [ -n $v1 ];echo $? 0 damon@ubuntu:~$ [ -n "$v1" ];echo $? 1damon@ubuntu:~$
可以看出字串變數是否加雙引號的結果是不一樣的,加雙引號的結果是正確的!
4.數值比較
root@ubuntu:/# [ 1 -lt 2 -a 5 -gt 10 ];echo $? 1 root@ubuntu:/# [ 1 -lt 2 -o 5 -gt 10 ];echo $? 0 root@ubuntu:/# [[ 1 -lt 2 && 5 -gt 10 ]];echo $? 1 root@ubuntu:/# [[ 1 -lt 2 || 5 -gt 10 ]];echo $? 0
5.If
#!/usr/bin/bash cat <<-EOF ########################### # A.Ross # # B.Chandler # # C.Joey # # D.Richel # # E.Fibe # # F.Monica # ########################### EOF read-p "Which person do you like best: " name if [ "$name" == "A" ];then echo "Ross" elif [ "$name" == "B" ];then echo "Chandler" elif [ "$name" == "C" ];then echo "Joey" elif [ "$name" == "D" ];then echo "Richel" elif [ "$name" == "E" ];then echo "Fibe" elif [ "$name" == "F" ]; then echo "Monica" else echo "Unknown name" fi
6.模式匹配:case
case只能進行字串匹配
case 變數 in
模式1)
命令序列1
;;
模式2)
命令序列3
;;
*)
無匹配後命令序列
esac
例子:
#!/usr/bin/bash cat <<-EOF ########################### # A.Ross # # B.Chandler # # C.Joey # # D.Richel # # E.Fibe # # F.Monica # ########################### EOF read -p "Which person do you like best: " name case "$name" in A|a) echo "Ross" ;; B|b) echo "Chandler" ;; C|c) echo "Joey" ;; D|d) echo "Richel" ;; E|e) echo "Fibe" ;; F|f) echo "Monica" ;; *) echo "Unknown name" ;; esac
二 迴圈
1.for
for 變數名 [in 取值列表]
do
迴圈體
done
for i in `seq 4` do echo i done
2.while
while 條件
do
迴圈體
done
#!/bin/bash i=1 while [ $i -le 4 ] do echo "$i" i=$[$i+1] done