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语句。

Bash编程的test和条件语句的更多相关文章

  1. bash编程之多分支if 语句及for循环

    第十七章.bash编程之多分支if 语句及for循环 if语句三种格式 多分支if语句练习 for循环 17.1.if语句的三种格式 单分支if语句 if condition;then 条件为真执行的 ...

  2. 02 shell编程之条件语句

    Shell编程之条件语句 学习目标: 掌握shell脚本条件测试 掌握if语句编程 目录结构: 条件测试 条件测试概述 l  对特定的条件进行判断,以决定如何执行操作 l  测试的方法 方法1:tes ...

  3. Python编程基础[条件语句if 循环语句 for,while](二)

    ython条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语句的执行过程: if 判断条件: 执行语句……else: 执行语句…… x= ...

  4. Shell 编程 条件语句

    本篇主要写一些shell脚本条件语句的使用. 条件测试 test 条件表达式 [ 条件表达式 ] 文件测试 -d:测试是否为目录(Directory). -e:测试文件或目录是否存在(Exist). ...

  5. if语句 条件测试 shell编程之条件语句

    shell 编程之条件语句一.条件测试  ① test命令 测试  ② 文件测试  ③ 整数值比较  ④ 字符串比较  ⑤ 逻辑测试二.if语句的结构  单分支结构  双分支结构  多分支结构三.ca ...

  6. Shell编程之条件语句:if、case语句

    Shell编程之条件语句:if.case语句               一.条件测试                1)test命令测试                2)整数值比较         ...

  7. Pyhton编程(二)之变量、用户输入及条件语句

    一:变量 变量定义的规则 1)只能由数字.字母.下划线组成(不能以数字开头) 2)不能使用关键字作为变量名 ['and', 'as', 'assert', 'break', 'class', 'con ...

  8. shell编程之条件语句

    目录: 一.条件测试 1.test命令测试 2.文件测试 3.字符串比较 4.逻辑测试 二.if语句 1.if单分支语句 2.if双分支语句 3.if多分支语句 三.case语句 case多分支语句 ...

  9. bash编程总结

    bash应该是目前Linux上最流行的shell脚本解释程序了(还有个shell叫dash,我太讨厌这个东东了.),只要你在linux上工作,并且希望自己能够工作得更愉悦,那么你应该熟悉最基本的bas ...

随机推荐

  1. Shell程序荟萃

    --------------纯输出----------------1.sh #!/bin/sh echo -e "Hello!world!\a\n"exit 0 --------- ...

  2. Discuz常见小问题-如何修改网站标题title

    在全局-SEO设置中,找到论坛的title修改即可

  3. android开发步步为营之67:使用android开源项目android-async-http异步下载文件

    android-async-http项目地址 https://github.com/loopj/android-async-http.android-async-http顾名思义是异步的http请求, ...

  4. Struts2(一)

    一.Struts下载地址 http://struts.apache.org/download.cgi 二.导入包.配置Web.xml和struts.xml 在下载的包中从示例中找到一些包就可以 str ...

  5. PHP $_POST

    $_POST 变量用于收集来自 method="post" 的表单中的值. $_POST 变量 $_POST 变量是一个数组,内容是由 HTTP POST 方法发送的变量名称和值. ...

  6. 除掉inline-block 间距

    1.现象: <!doctype html> <html lang="en"> <head> <meta charset="UTF ...

  7. HDU 4847 陕西邀请赛A(水)

    HDU 4847 Wow! Such Doge! pid=4847" style="">题目链接 题意:给定文本,求有几个doge,不区分大写和小写 思路:水题.直 ...

  8. rarcrack

    apt-get install rarcrack使用方法:rarcrack --threads xx --type rar xx.rar

  9. java String字符串

      五.java数据类型之String(字符串) CreateTime--2017年7月21日16:17:45 Author:Marydon (一)数据格式 (二)初始化 // 方式一 String ...

  10. JVM内存管理、JVM垃圾回收机制、新生代、老年代以及永久代

    内存模型 JVM运行时数据区由程序计数器.堆.虚拟机栈.本地方法栈.方法区部分组成,结构图如下所示. JVM内存结构由程序计数器.堆.栈.本地方法栈.方法区等部分组成,结构图如下所示: 1)程序计数器 ...