条件表达式
基本命令和变量赋值语句属于顺序语句,条件和分支属于选择语句,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