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