Bash编程的test和条件语句

1、if语句一句条件判断结果选择执行路径。最简单的if-then句型:

if  command    //如果command的退出状态为0,执行body
then
    body
fi

重点:if认为command的返回0表示为真!!!

2、test命令经常被用来当作command,来进行复杂的测试。其定义:test命令用来计算其逻辑值,如果结果为真就返回0,否则返回1

有时候,计算逻辑关系,“算”比“想”快!

重点:test除了因为逻辑关系,返回假(非0),还会因为内部错误返回假

一个简单的例子:

if  [  `whoami` = "root" ]
then
    echo "You are the superuser"
fi

过程是这个样子:命令whoami返回一个用户名的字符串,然后和“root”进行比较,如果相同,则返回0,表示成功执行,也就是说条件为真,执行echo “You are the  superuser"

3、易出错的地方:由于if认为0为真,如果上面的例子,修改成这样的逻辑:如果用户不是root,那么就输出一个错误信息,并退出,可以写成这个样子:

if   [ `whoami` != "root" ]
then
     echo "not root"
     exit 1
fi

正常情况下,如果用户是普通用户,那么输出“not root",然后退出吧。我们的想法是,如果不是root,就退出程序,然后给一个友好的提示。可是:如果这个时候,凑巧`whoami`写错了(我就写错过),比如写成了`whoai`(少写一个m),这是该命令返回一个非0整数,然后和字符串”root“比较,整个test肯定返回一个非0(因为比较出错了),这样就导致整个test返回非0,这样就会导致跳过了if语句,没有达到预期的目的。

if   [ `whoai` != "root" ]   #少写一个m,导致跳过if语句,即使是非root用户也不会退出
then
     echo "not root"
     exit 1
fi

注意:条件测试的时候,一定要注意命令嵌套命令导致的返回非0值,从而跳过if语句。

原文地址:https://www.cnblogs.com/litifeng/p/8452095.html