bash编程之if语句条件测试

bash脚本之条件测试

    条件测试的四种方式:

        testEXPRESSION

        [EXPRESSION ]

        [[ EXPRESSION ]]:双中括号与单中括号大部分时候是通用的,但有时候会与一些与或运算符冲突,使用中需注意

        COMMAND:此处测试的是命令执行的状态返回值,即命令执行成功与否,若成功则返回值为0否则为1-255之间的任意数字

        测试表达式:

        整数测试:A, B

            A -gt B: 大于

            A-ge B: 大于等于

            A-eq B: 等于

            A-lt B: 小于

            A-le B: 小于等于

            A-ne B: 不等于

        字符串测试:A, B

            A> B

            A< B

            A>= B

            A<= B

            A== B或A = B:等值比较

            A!= B: 不等于

            -zA: 判断A是否为空;空则为真,不空则假;

            -nA:判断A是否不空;不空则为值,空则为假;

条件测试之if语句

    单分支if语句

        if条件;then

            命令1

            命令2

            …

        fi

if语句单分支实例

100以内所有偶数之和,遍历所有的1-100整数

#!/bin/bash
declare -i sum=0
for i in{1..100};do
       if [ $[$i%2] -eq 0 ] ;then
                sum=$[$sum+$i]
            fi
done
echo"$sum"


fi语句也可以嵌套

if 条件 ;then

     if 条件;then

         命令1

         …

     fi

fi

条件取反

    !条件:不满足条件时为真满足时为假

if嵌套语句实例

     (1) 添加用户user1-user10;

 (2) 用户不存在时才添加;

     (3) 统计真正添加的用户数;

#!/bin/bash
declare -i users=0
for i in {1..10};do
if ! id user$i; then
useradd user$i
users=$[$users+1]
fi
done
echo "$users."


双分支if语句

if CONDITION-TRUE;then

            分支1

else

            分支2

fi

双分支if语句实例;

    (1)传递一个参数给脚本,此参数为用户名;

    (2)如果用户存在,则执行如下任务

        (a)如果用户的id号小于500,显示其为管理员或系统用户;

        (b)否则,显示其为普通用户;

    (3)如果用户不存在,则添加之;

#!/bin/bash
if id $1; then
    userid=`id -u $1`
    if [ $userid -lt 500 ]; then
        echo "$1 is sysadmin orsysuser."
    else
        echo "A common user."
    fi
else
    useradd $1
    if [ $? -eq 0];then
        echo "Add user $1 successfully."
    else
        echo "Cannot add $1."
    fi
fi


多分支的if语句:

ifCONDITION1-TRUE; then

分支1

elifCONDITION2-TRUE; then

分支2

elif CONDITION3-TRUE; then

分支3

...

else

分支n

fi

   

传递一个参数给脚本

如果参数为quit,则显示说要退出脚本;

如果参数为yes,则显示说继续;

否则,则显示为无法识别;

#!/bin/bash
if $1=quit;then
    echo "quit"
elif $1=yes ;then
    echo "yes"
else
    echo "no"
fi


文件测试

    -e$file:是否存在;存在则为真;

    -f$file: 文件是否存在,且为普通文件;

    -d$file: 是否存在且为目录;

    -h$file: 是否存在且为符号链接文件;

    -L$file:是否存在且为符号链接文件;

    -b$file: 是否存在且为块设备文件;

    -c$file: 是否存在且为字符设备文件;

    -S$file: 是否存在且为套接字文件;

    -p$file: 是否存在且为管道文件;

-r $file: 当前用户对此文件是否拥有读权限;

    -w$file: 当前用户对此文件是否拥有写权限;

    -x$file: 当前用户对此文件是否拥有执行权限;

    -u$file: 文件是否拥有suid权限;

    -g$file:文件是否拥有sgid权限;

    -k$file: 文件是否拥有sticky权限;

    -O$file: 当前用户是否为文件的属主;

    -G$file: 当前用户是否属于文件的属组;

    -N$file: 文件自从上一次被读取之后,是否被修改过;

    $f1-nt $f2: 文件f1是否比文件f2新;

    $f1-ot $f2: 文件f1是否比文件f2旧;

    $f1-ef $f2: f1和f2是否为同一个文件的硬链接;

文件测试实例

    写一个脚本,传递一个文件路径参数给脚本

    (1)如果脚本无参数,则显示必须给至少一个参数,退出脚本;退出码5;

    (2)路径指向的文件如果不存在,则直接退出脚本;退出码为6;

    (3)判断文件类型:

        (a)如果是普通文件,则显示为"common file";

        (b)如果是目录,则显示为"directory";

        (c)如果是符号链接,则显示为"symbolic link file";

        (d)如果是块设备,则显示为“block device file";

        (e)如果是字符设备,则显示为"character device file";

        (f)否则,则显示为“unkown”;

       

#!/bin/bash
        if[ $# -lt 1 ]; then
            echo "At least one argument."
            exit 5
        fi
        if[ ! -e $1 ]; then
            echo "No such file."
            exit 6
        fi
        if[ -f $1 ]; then
            echo "common file."
        elif[ -d $1 ]; then
            echo "directory."
        elif[ -L $1 ]; then
            echo "Symbolic link."
        elif[ -b $1 ]; then
            echo "block device."
        elif[ -c $1 ]; then
            echo "character device."
        else
            echo "unkown type."
        fi


组合测试条件:短路操作符

    与:COMMAND1 && COMMAND2

        COMMAND1的退出状态如果为假,则COMMAND2不用运行,即可有最终结果;

    或:COMMAND1 || COMMAND2

        COMMAND1的退出状态如果为真,则COMMAND2不用运行,即可有最终结果;

    非:! COMMAND

       

 [! -d /tmp/test ] && mkdir /tmp/test
 [ -d /tmp/test ] || mkdir /tmp/test


    短路操作符实例:写一个脚本实现以下功能

            (1)如果httpd进程或nginx进程处于运行中,则显示“web server started.”

            (2)否则显示“no web server.”

           

 #!/bin/bash
if pidof httpd && pidof nginx ;then
     echo“web server started”
else
     echo“no web server”
fi



你可能感兴趣的:(if语句,条件测试)