shell脚本之条件测试与判断

(一)条件测试,与C语言相反,表达式为真时为0,为假时为非0.其测试语法为:test exp 或 [ exp ]
(1)字符串测试
  • string 为空时是非0,空时为0,只有test才能使用
  • -z string 判断是否为空串,空为0,不空为非零
  • -n string 判断是否为空串,空为非0,不空为零
  • str1 != str2 判断两个字符串是否不等
  • str1 = str2 判断是否相等
(2)整数测试
  • num1 -eq num2 相当于=
  • num1 -ne num2 相当于!=
  • num1 -lt num2相当于<
  • num1 -gt num2 相当于>
  • num1 -le num2 相当于<=
  • num1 -ge num2 相当于>=
(3)文件测试
  • -a 文件是否存在
  • -e 同上
  • -r 文件存在,文件是否有读权限
  • -w 文件存在,文件是否有写权限
  • -x 文件存在,文件是否有执行权限
  • -d 文件存在,文件是否是目录
  • -L 文件存在,文件是否是链接文件
  • -c 文件存在,文件是否是字符文件
  • -b 文件存在,文件是否是块文件
  • -f 文件存在,文件是否是普通文件
  • -s 文件存在,文件的长度是否大于0或者为非空文件,如果是非空文件,结果为0
(4)逻辑操作符
  • !exp 逻辑非
  • exp1 -o exp2 逻辑或,两个表达式只要有一个为真即为真。
  • exp1 -a exp2 逻辑与,两个表达式只要有一个为假即为假。
    例如:
    tset “ a"gt20a a -lt 50
    [ -a filename -a -w filename ]
(二)条件判断语句
(1)if
if exp
then
    statement
    ...
else 
    statement
    ...
fi

或者

if exp
then
    statement
    ...
elif exp ;
then
    statement
    ...
elif exp
    statement
    ...
else 
    statement
    ...
fi

例如输出成绩等级:

 #!/bin/bash

 echo "please input your scores :"
 read  score

 if [ -z $score ];
 then
     echo "you can not input kong string"
     exit 1
 else
     if [ $score -lt 0 -o $score -gt 100 ];
     then
         echo "please input true score"
         read  score
     else
         if [ $score -gt 90 ];then
             echo "A"
         else
             if [ $score -gt 80 ];then
                 echo "B"
             else
                 if [ $score -gt 70 ];then
                     echo "C"
                 else
                     echo "D"
                 fi
             fi
         fi
     fi
 fi
(2)case语句,形如:
case var in
    a)
        statement
        ...
        ;;
    b)
        statement
        ...
        ;;
    .
    .
    .
    *)
        statement
        ...
        ;;
esac

例如:

 read -p "please in a key:" key

 if [ -z $key ]
 then
     echo "you do not input key"
     exit 1
 fi
 case $key in
     [1-9])
         echo "digit key"
         ;;
     [[:lower:]])
         echo "lower key"
         ;;
     [[:upper:]])
         echo "upper key"
         ;;
     *)
         echo "other key"
         ;;
 esac
(三)循环语句
(1)for
for val in 1 2 3 4 ...
do
    statement
    ...
done

for val in {1..8}
do
    statement
    ...
done

for val in {str1  str2 ....}//$(ls)
do
    statement
    ...
done

for ((i=0;i<n; i++))
do
    statement
    ...
done 

例如九九乘法表:

#! /bin/bash

i=1
for (( i=1; i<=9; i++ )) 
do
    for (( j=1; j<=$i; j++ ))
    do
        printf "$i*$j=$(($i*$j))"
        if [ $(($i*$j)) -gt 9 ]
        then
            printf  " "
        else
            printf  "  "
        fi
    done
    echo " "
done
(2)while
while [ exp ]
do
    statement   
    ...
done
(3)until
until [ exp ]
do
    statement   
    ...
done

例如批量添加用户:

#! /bin/bash
i=1

until [ $i -eq 21 ]
do
    useradd user$i
    echo "password" | passwd -stdin user$i >/dev/null
    let "i++"
done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值