文档章节

shell编程基础(四)——条件判断

shw23
 shw23
发布于 2016/06/08 15:11
字数 759
阅读 125
收藏 4

依据某些条件测试结果来决定程序的控制流向和下一步的处理动作。

在test语句中,shell一般先执行变量替换或命令替换,然后再执行条件测试。
test命令的语法格式,主要三种:
test expression
[ expression ]
[[ expression ]]
注意:方括号内侧的两边必须各加一个空格。条件测试返回0表示真,非0表示假。

1.test expression
[root@mrhcatxq01 shell]# cat test_test.sh
#!/bin/bash

fname=/install_cacti/shell/willdel.txt
if test -e ${fname}
then
    rm -f ${fname}
    echo "File ${fname} has removed."
else
    echo "File ${fname} is not exist"
fi
[root@mrhcatxq01 shell]#

2.[ expression ]
[root@mrhcatxq01 shell]# cat test_square_brackets.sh
#!/bin/bash

fname=/install_cacti/shell/willdel.txt
if [ -e ${fname} ]
then
    rm -f ${fname}
    echo "File ${fname} has removed."
else
    echo "File ${fname} is not exist"
fi
[root@mrhcatxq01 shell]#

3.[[ expression ]]
[root@mrhcatxq01 shell]# cat test_double_square_brackets.sh
#!/bin/bash

fname=/install_cacti/shell/willdel.txt
if [[ -e ${fname} ]]
then
    rm -f ${fname}
    echo "File ${fname} has removed."
else
    echo "File ${fname} is not exist"
fi
[root@mrhcatxq01 shell]#

条件测试一般是数值比较、字符串比较和文件属性检查。

1)数值比较

数值比较:
n1 -eq n2        检查n1是否等于n2 
n1 -ne n2        检查n1是否不等于n2 
n1 -gt n2         检查n1是否大于n2 
n1 -ge n2        检查n1是否大于等于n2 
n1 -lt n2          检查n1是否小于n2      
n1 -le n2         检查n1是否小于等于n2
[root@mrhcatxq01 shell]# test 12 -eq 12 ;echo $?
0
[root@mrhcatxq01 shell]# test 12 -eq 1 ;echo $?
1
[root@mrhcatxq01 shell]# test 12 -ne 12;echo $?
1
[root@mrhcatxq01 shell]# test 12 -ne 1;echo $?
0
[root@mrhcatxq01 shell]# [ 12 -gt 1 ];echo $?
0
[root@mrhcatxq01 shell]# [ 12 -gt 12 ];echo $?
1
[root@mrhcatxq01 shell]# [ 12 -lt 1 ];echo $?
1
[root@mrhcatxq01 shell]# [ 12 -lt 12 ];echo $?
1
[root@mrhcatxq01 shell]# [ 12 -ge 1 ];echo $?
0
[root@mrhcatxq01 shell]# [ 12 -ge 12 ];echo $?
0
[root@mrhcatxq01 shell]# [ 12 -le 1 ];echo $?
1
[root@mrhcatxq01 shell]# [ 12 -le 12 ];echo $?
0
[root@mrhcatxq01 shell]#
2)字符串比较

字符串比较:
str1 = str2                        检查str1与str2是否相同     
str1 != str2                       检查str1与str2是否不同
-z str1                            检查str1的长度是否为0    
-n str1                            检查str1的长度是否大于0
[[ ${option} =~ ^[0-9]+$ ]]        匹配数字
[[ ${option} =~ ^[A-Za-z]+$ ]]     匹配字母


s1 < s2   ASCII码值字符串s1小于s2,返回真
          test s1 < s2
          [ s1 \< s2 ]  单方括号中,< 需要转义
          [[ s1 < s2 ]
s1 > s2   ASCII码值字符串s1大于s2,返回真

[root@mrhcatxq01 shell]# a=hello
[root@mrhcatxq01 shell]# test "${a}" = hello ;echo $?   
0
[root@mrhcatxq01 shell]# test "${a}" = wo ;echo $?
1
[root@mrhcatxq01 shell]# [ "${a}" != hello ];echo $?
1
[root@mrhcatxq01 shell]# [ "${a}" != wo ];echo $?
0
[root@mrhcatxq01 shell]# [ -z "${a}" ];echo $?
1
[root@mrhcatxq01 shell]# [ -n "${a}" ];echo $?
0
[root@mrhcatxq01 shell]#
 #引用的变量一定要加双引号,否则若变量值为null时,shell将忽略变量表达式的存在而报语法错误
[root@mrhcatxq01 shell]# [ $b = hello ];echo $?
-bash: [: =: unary operator expected
2
[root@mrhcatxq01 shell]# echo $b

[root@mrhcatxq01 shell]# [ "${b}" = hello ];echo $?
1
[root@mrhcatxq01 shell]# [ "X${b}" = "Xhello" ];echo $?
1
[root@mrhcatxq01 shell]#
3)文件判断(检查)
-e 判断文件是否存在
-f 判断文件是否存在且是普通文件
-s 判断文件是否存在且非空
-d 判断文件是否存在且是目录

4)逻辑判断
-a   && 且
-o  || 或
! 非

© 著作权归作者所有

shw23
粉丝 0
博文 11
码字总数 14364
作品 0
武汉
程序员
私信 提问
Shell编程 (Ⅰ)——date、if、case、for、while、break、continue

Shell编程 (Ⅰ) 一、shell脚本介绍 shell是一种脚本语言 和传统的开发语言比较,会比较简单 shell有自己的语法;可以使用逻辑判断、循环等语法 可以自定义函数,目的就是为了减少重复的代码...

feng-01
2018/07/30
59
0
shell脚本编程——流程控制

shell脚本编程——流程控制 目 录 一、 if 二、 case 三、 for 四、 while 五、 until 六、 综合应用 一、if 1、语法 (1)单分支 if 判断条件;then fi (2)双分支 if 判断条件; then 条件...

hawapple
2017/09/17
0
0
bash脚本编程基础

bash脚本编程: 首先了解一下shell脚本编程的特点: 过程式编程语言 脚本类语言 解释型语言 过程式编程语言: 顺序执行结构: 以从左到右,从上到下顺序执行所有的语句(命令) shell脚本的主体...

001100ll
2017/05/06
0
0
shell编程 ---test

test命令用法。功能:检查文件和比较值 1)判断表达式 if test (表达式为真) if test !表达式为假 test 表达式1 –a 表达式2 两个表达式都为真 test 表达式1 –o 表达式2 两个表达式有一个为...

mjrao
2013/12/23
24
0
用shell脚本监控进程是否存在 不存在则启动的实例

用shell脚本监控进程是否存在 不存在则启动的实例 用shell脚本监控进程是否存在 不存在则启动的实例,先上代码干货: #!/bin/shps -fe|grep processString |grep -v grepif [ $? -ne 0 ]the...

xiaozhenkai
2017/07/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Centos7 安装zabbix-agent

rpm -i https://repo.zabbix.com/zabbix/4.2/rhel/6/x86_64/zabbix-release-4.2-2.el6.noarch.rpm 可以到https://repo.zabbix.com/zabbix找到对应的版本 yum install zabbix-agent -y 出现E......

abowu
昨天
8
0
文本编辑器GNU nano 4.4 发布

GNU nano 4.4 "Hagelslag" 更新日志: 启动时,光标可以放在第一个或最后一个出现位置 字符串前面带有+/string 或 +?string的字符串。 发生自动硬包装时((--breaklonglines),任何前导引号...

linuxCool
昨天
7
0
你知道字节序吗

字节序 最近在调一个自定义报文的接口时,本来以为挺简单的,发现踩了好几个坑,其中一个比较“刻骨铭心”的问题就是数据的字节序问题。 背景 自定义报文,调用接口,服务端报文解析失败 iO...

杭城小刘
昨天
3
0
设计模式之依赖倒置原则

方法

东风破2019
昨天
6
0
关于如何通过模拟器完成模拟步数提升傻瓜式解决方案(囧)

因为对Android开发不太了解,也没去问朋友所以误打误撞找到的一个提升步数的解决方案,当然只是针对某安APP运动RUN的解决方式吧。 对Android不太了解,所以找了很多的解决方案来看看能不能破...

华山猛男
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部