条件测试
- 为命令的执行提供最直接的识别依据
- 文件或目录的读/写等状态
- 数值的大小
- 字符串是否匹配
- 多条件组合
基本用法
[ test 表达式 ] 或 [ 表达式 ]
注意需要空格
条件测试操作本身不显示出任何信息. 需要查看变量 [ $? ] 的值作出判断
字符串测试
[ a == b ]
-
比较两个字符串是否相同
[ $USER == “root” ] / test $USER == “root”
[ echo $? ]
[ a != b ]
-
比较两个字符串是否不同
[ $USER != “root” ]
[ echo $? ]
[ -z $a ] / [ ! -z $a ]
-
如果变量为空 , 有可能报错 , 加双引号可以避免
-
判断变量是否为空
[ -z $USER ]
[ echo $? ]
-
判断变量是否非空
[ ! -z $USER ] / [ -n $USER ]
[ echo $? ]
[ && ] , [ || ] , [ ; ]
-
一行执行多条命令的情况
A && B #仅A命令执行成功后 , 才执行B命令
A || B #仅当A命令失败后 , 才执行B命令
A ; B #执行完A后执行B , 两者无关联 , 仅先后关系
&& , || 逻辑组合
-
&&,逻辑与
- 都成立则true
-
||,逻辑或
- 有一个成立则true
数值比较
[ 数值1 操作符 数值2 ]
[ -eq ] ----- 等于( Equal )
[ -ne ] ----- 不等于( Not Equal )
[ -ge ] ----- 大于等于( Greater Equal )
[ -le ] ----- 小于等于( Lesser Equal )
[ -gt ] ----- 大于( Greater Than )
[ -lt ] ----- 小于( Lesser Than )
识别文件/目录的状态
[ -e ] ----- 判断对象是否存在 ----- [ -e “/opt/a” && echo “yes” || echo “no” ]
[ -d ] ----- 判断对象是否存在且是目录 ----- [ -d “/opt/b” ]
[ -f ] ----- 判断对象是否存在且是文件 ----- [ -f “/opt/c” ]
[ -r ] ----- 判断对象是否可读 ----- [ -r “/opt/a” ]
[ -w ] ----- 判断对象是否可写 ----- [ -w “/opt/a” ]
[ -x ] ----- 判断对象是否有执行权限 ----- [ -x “/opt/a” ]
If选择结构
if 条件测试 ;
then 命令序列 1
elif 条件测试 ;
then 命令序列 2
else
命令序列 3
fi
循环结构
[ for ] 循环
for 变量名 in 值1 值2 值3
do
命令序列
done
[root@svr5 ~]# vim for01.sh
#!/bin/bash
for i in 1 2 3 4 5
do
echo "hello world"
done
[root@svr5 ~]# vim for02.sh
#!/bin/bash
for i in {1..10}
do
echo "abc"
done
a=10
for i in $(seq $a) #如果循环次数是通过变量决定可以用seq指令
do
echo "$i"
done
#!/bin/bash
for i in $(cat /opt/name.txt)
do
useradd $i
done
[ while ] 循环
while循环属于条件式的执行流程,会反复判断指定的测试条件,只要条件成立即执行固定的一组操作,直到条件变化为不成立为止。所以while循环的条件一般通过变量来进行控制,在循环体内对变量值做相应改变,以便在适当的时候退出,避免陷入死循环.
#根据条件的结果决定是否要执行任务,条件测试成功的话就执行,如果失败立刻结束循环
while 条件测试
do
命令序列
done