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
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
fi

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

最新文章

  1. CentOS中Mysql常用操作
  2. POJ 3278 题解
  3. C#删除datable空行
  4. java.lang.IllegalStateException: Ambiguous mapping found. Cannot map 'XXXXX' bean
  5. Windows下使用Redis(一)安装使用
  6. 43. 动态规划求解n个骰子的点数和出现概率(或次数)[Print sum S probability of N dices]
  7. 优化过的redis封装类
  8. PHP学习笔记 - 进阶篇(9)
  9. js的function中的指向自身的属性
  10. vue2.0路由变化1
  11. selenium自动化测试资源整理(含所有版本chrome、chromedriver、firefox下载链接)
  12. Dynamics CRM Web API中的and和or组合的正确方式!
  13. mysql授权grant
  14. 国内优秀MVC开源框架jfinal简介
  15. mysql 架构 ~ binlog_server
  16. iOS - UIAlertController三种显示提示框代码
  17. CRM 2016 请求"System.Security.Permissions.FilelOPermission,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"类型的权限已失败.
  18. target runtime apache v6.0 not defined解决
  19. ORACLE的init.ora配置文件中参数详解
  20. linux下使用docker-thunder-xware进行离线下载

热门文章

  1. Foreda8上安装Ant1.9.2
  2. sed 常用的命令
  3. Chrome浏览器内嵌的各种手机模拟器
  4. UE如何去除重复行,删除重复行
  5. ListView与Button共存问题
  6. iOS强引用和弱引用
  7. 新浪面试题:只允许使用++操作符实现加减乘除运算(c语言版)
  8. Table '' is marked as crashed and should be repaired 解决方法
  9. XMPP serverejabberd-14.12本地搭建
  10. HTTP协议详解之响应篇