条件判断语句
test或[],这两是等价的。但用[]这种可能看起来更简洁
必须在[符号和检查条件之间留出空格,而test命令之后也总是应该有一个空格
如果要把test 和then 放一行上,那么必须在test语句和then之间加上分隔符“ ; "
第1种
if test -f /tmp/log.log; then
echo "Yes"
else
echo "No"
fi
第2种
if [ -f /tmp/log.log ]; then
echo "log exists"
fi
字符串比较 | 结果 |
---|---|
str1 = str2 | 字符串相同为真 |
str1 != str2 | 字符串不相同为真 |
-n string | 字符串不为空时,结果为真 |
-z string | 字符串为null(空串),不能值为null的串。结果为真 |
算术比较 | 结果 |
---|---|
exp1 -eq exp2 | 两表达式相等,结果为真 |
exp1 -ne exp2 | 两表达式不等,结果为真 |
exp1 -gt exp2 | exp1大于exp2,结果为真 |
exp1 -ge exp2 | exp1大于等于exp2,结果为真 |
exp1 -lt exp2 | exp1小于exp2,结果为真 |
exp1 -le exp2 | exp1小于等于exp2,结果为真 |
! exp1 | exp1为假,则结果为真,反之亦然 |
文件条件测试 | 结果 | |
---|---|---|
-d file | 文件是一个目录,结果为真 | |
-e file | 文件存在为真,目前更多使用-f file | |
-f file | 文件是普通文件为真 | |
-g file | 文件的set-group-id位被设置为真 | |
-r file | 文件可读为真 | |
-s file | 文件大小不为0为真 | |
-u file | 文件的set-user-id位被设置为真 | |
-w file | 文件 | |
-x file | 文件可执行为真 |
控制结构(if)
if 条件
then
语句
else
语句
fi
或使用elif多重选择
if 条件
then
语句
elif 条件
语句
else
语句
fi
num=1
if [ "$num" -eq 1 ]; then
echo 1
elif [ "$num" -eq 2 ]; then
echo 2
else
echo 3
fi
exit 0
for语句
for variable in values;
do
语句
done
#! /bin/bash
for i in $(ls /tmp);do
ls '/tmp/'$i
done
exit 0
while语句
while 条件 do;
语句
done
until语句
和whle相似,不过它是反复执行直到条件为真,而不是条件为真是反复执行
until 条件
do
语句
done
case语句
每个模式行都以分号;;结尾
case variable in
parttern [| parttern] ...) 语句;;
esac