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
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和条件语句的更多相关文章
- bash编程之多分支if 语句及for循环
第十七章.bash编程之多分支if 语句及for循环 if语句三种格式 多分支if语句练习 for循环 17.1.if语句的三种格式 单分支if语句 if condition;then 条件为真执行的 ...
- 02 shell编程之条件语句
Shell编程之条件语句 学习目标: 掌握shell脚本条件测试 掌握if语句编程 目录结构: 条件测试 条件测试概述 l 对特定的条件进行判断,以决定如何执行操作 l 测试的方法 方法1:tes ...
- Python编程基础[条件语句if 循环语句 for,while](二)
ython条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语句的执行过程: if 判断条件: 执行语句……else: 执行语句…… x= ...
- Shell 编程 条件语句
本篇主要写一些shell脚本条件语句的使用. 条件测试 test 条件表达式 [ 条件表达式 ] 文件测试 -d:测试是否为目录(Directory). -e:测试文件或目录是否存在(Exist). ...
- if语句 条件测试 shell编程之条件语句
shell 编程之条件语句一.条件测试 ① test命令 测试 ② 文件测试 ③ 整数值比较 ④ 字符串比较 ⑤ 逻辑测试二.if语句的结构 单分支结构 双分支结构 多分支结构三.ca ...
- Shell编程之条件语句:if、case语句
Shell编程之条件语句:if.case语句 一.条件测试 1)test命令测试 2)整数值比较 ...
- Pyhton编程(二)之变量、用户输入及条件语句
一:变量 变量定义的规则 1)只能由数字.字母.下划线组成(不能以数字开头) 2)不能使用关键字作为变量名 ['and', 'as', 'assert', 'break', 'class', 'con ...
- shell编程之条件语句
目录: 一.条件测试 1.test命令测试 2.文件测试 3.字符串比较 4.逻辑测试 二.if语句 1.if单分支语句 2.if双分支语句 3.if多分支语句 三.case语句 case多分支语句 ...
- bash编程总结
bash应该是目前Linux上最流行的shell脚本解释程序了(还有个shell叫dash,我太讨厌这个东东了.),只要你在linux上工作,并且希望自己能够工作得更愉悦,那么你应该熟悉最基本的bas ...
随机推荐
- .7z.001,.7z.002这样的文件如何解压
1 如图所示,压缩分卷没有显示关联的软件来打开,Winrar右击也无法解压 2 可以使用7-ZIP软件打开该文件,然后选择提取(相当于Winrar的解压),然后选择提取路径,默认是同一个文件夹,点击确 ...
- ArcEngine10.x开发的许可问题
1. ArcEngine9.x迁至ArcEngine10.x 相信很多同学都知道,在ArcEngine9.x下正常编译的代码到ArcEngine10.x会报错:ArcGIS version not s ...
- Silverlight 之 新建项目解析
新建一个silverlight项目(项目名称为SilverlightTest)后,若在" 新建Silverlight应用程序窗口 " 勾选 " 在新网站中承载Silver ...
- eclipse JRE(unbound)问题
eclipse eclipse eclipse eclipse eclipse JRE(unbound) createTime--2016年10月18日14:18:59 Author:Mary ...
- demo02
class PhoneNumber(): def __init__(self,number): self.a=number[1:4] self.b=number[6:9] self.c=number[ ...
- java RandomAccessFile类(随机访问文件)
该类可以实现对同一个文件的读写操作,与其他IO流不同的是可以指定读写指针的脚标(seek),有跳过指定个数字节(skipBytes)操作. 另外该类也可用于断点续传. 简单示例如下: import j ...
- c中的static
static的作用 1)保持变量值:在函数体,一个被声明为静态的变量在这一函数中可以维持其值.这句话可能描述不太准确,大家看下面这个例子吧. void staticLocalVar() { stati ...
- git版本库管理介绍,撤销git pull操作
Git是分布式版本控制系统,GitHub 是最大的 Git 版本库托管商,是成千上万的开发者和项目能够合作进行的中心. 大部分 Git 版本库都托管在 GitHub,很多开源项目使用 GitHub 实 ...
- PHP-线程安全与非线程安全版本的区别
Windows版的PHP从版本5.2.1开始有Thread Safe(线程安全)和None Thread Safe(NTS,非线程安全)之分,这两者不同在于何处?到底应该用哪种?这里做一个简单的介绍. ...
- eclipse新建maven工程的各种坑
尽量按照最后强烈推荐的那篇创建maven工程. 1.jsp文件头报错 2.xml配置文件头红叉 3.Archive for required library...blabla 4.pom依赖出错 5 ...