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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章