1. 程式人生 > 實用技巧 >Shell指令碼學習(2)

Shell指令碼學習(2)

一 條件測試

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     #判斷使用者是否是root
    
echo "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 $?
1
damon@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