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&cmd2 cmd1和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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章