Shell脚本【7】Shell 条件表达式

条件表达式

基本命令和变量赋值语句属于顺序语句,条件和分支属于选择语句,for,while和until语句属于循环语句

条件表达式是用于判断条件是否满足的逻辑表达式,当条件为真,返回0,否则返回1

常用语法:

1、test 测试表达式

2、[ 测试表达式 ] #两边需要有空格

3、[[ 测试表达式 ]]

4、(( 测试表达式 ))

第一种和第二种是等价的,第三种是扩展的test命令,语法4常用于计算
在[[]] 双中括号中可以使用通配符等进行模式匹配,&& || > < 等操作符可以直接应用于双中括号中,但不能用于单中括号中

1.test语法示例

[root@system1 ~]# test -f /etc/passwd && echo 1 || echo 0
1
[root@system1 ~]# test -f /etc/haha && echo 1 || echo 0
0

2.单中括号[]示例

[root@system1 ~]# [ -f /etc/passwd ]&& echo 1 || echo 0
1
[root@system1 ~]# [ -f /etc/haha ]&& echo 1 || echo 0
0

3.双中括号示例[[]]

[root@system1 ~]# [[ 3 > 2|| 1 > 2 ]]&& echo 1 || echo 0
1
[root@system1 ~]# [[ 3 > 2 && 1 > 2 ]]&& echo 1 || echo 0
0

文件状态操作符

常用的文件状态操作符总结如下:

文件状态操作符说明
-d filename若文件为目录文件,则返回真
-f filename若文件为普通文件,则返回真
-r filename若文件可读,则返回真
-s filename若文件长度大于0,则返回真
-u filename若文件的SUID位被设置,则返回真
-w filename若文件可写,则返回真
-x filename若文件可执行,则返回真

示例:

[root@system1 ~]# [ -f  /etc/passwd ]&& echo 1 || echo 0
1
[root@system1 ~]# [ -d  /etc/passwd ]&& echo 1 || echo 0
0

字符串操作符

字符串操作符用于判断字符串的性质以及字符串之间的关系

字符串操作符说明
string若字符串非空,则返回真
-n string若字符串长度大于0,则返回真
-z string若字符串长度为0,则返回真
string1 = string2若两个字符串相等,则返回真
string1 != string2若两个字符串不相等,则返回真

示例:

[root@system1 ~]# [ " " ]&& echo 0 || echo 1
0
[root@system1 ~]# [ "ab" = "abc" ]&& echo 1 || echo 0
0
[root@system1 ~]# [ -n "abc" ]&& echo 1 || echo 0
1

数字操作符

数字操作符操作的对象是数值,用于比较两个数值的大小关系

数字操作符说明
n1 -eq n2判断是否相等,相等返回真
n1 -ne n2判断是否不相等,不等返回真
n1 -lt n2判断n1小于n2,若小于返回真,助记:less than
n1 -gt n2判断n1大于n2,若大于返回真,助记:greater than
n1 -le n2判断n1不大于n2,若不大于返回真,助记:less equal
n1 -ge n2判断n1不小于n2,若不小于返回真,助记:greater equal

示例:

[root@system1 ~]# test "$x" -eq 5 
[root@system1 ~]# echo $?
0
[root@system1 ~]# test "$x" = 5 
[root@system1 ~]# echo $?
1

[root@system1 ~]# [ 2 -gt 3 ]&& echo 1 || echo 0
0
[root@system1 ~]# [ 2 -lt 3 ]&& echo 1 || echo 0
1

[root@system1 ~]# test "2" -gt "1" && echo 1 || echo 0
1
[root@system1 ~]# test "2" -lt "1" && echo 1 || echo 0
0

逻辑操作符

若操作对象是逻辑表达式,则用逻辑操作符

逻辑操作符说明
e1 -a e2同时为真返回真
e1 -o e2有一个为真返回真
! e1表达式e1不为真时返回真

示例:

[root@system1 ~]# count=10
[root@system1 ~]# test "$count" -ge 0 -a "$count" -lt 10
[root@system1 ~]# echo $?
1
[root@system1 ~]# test "$count" -ge  0 -o "$count" -lt 10
[root@system1 ~]# echo $?
0

命令分隔符

命令分隔符说明
cmd1;cmd2以独立的进程依次执行cmd1和cmd2
(cmd1;cmd2)在同一进程中依次执行cmd1和cmd2
cmd1&cmd2cmd1和cmd2同时运行,分属于不同的进程组
cmd1&&cmd2当cmd1为真时,执行cmd2
cmd1 cmd2当cmd1不为真时,执行cmd2
cmd1&cmd1以后台方式运行
[root@system1 ~]# file=test01.sh
[root@system1 ~]# test -s $file && cat $file	#若文件存在,则打开文件
#!/bin/bash
echo $0
echo $#
echo $*
echo $?
echo $@
echo $$
echo $!
exit
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值