(一)条件测试,与C语言相反,表达式为真时为0,为假时为非0.其测试语法为:test exp 或 [ exp ]
(1)字符串测试
- string 为空时是非0,空时为0,只有test才能使用
- -z string 判断是否为空串,空为0,不空为非零
- -n string 判断是否为空串,空为非0,不空为零
- str1 != str2 判断两个字符串是否不等
- str1 = str2 判断是否相等
(2)整数测试
- num1 -eq num2 相当于=
- num1 -ne num2 相当于!=
- num1 -lt num2相当于<
- num1 -gt num2 相当于>
- num1 -le num2 相当于<=
- num1 -ge num2 相当于>=
(3)文件测试
- -a 文件是否存在
- -e 同上
- -r 文件存在,文件是否有读权限
- -w 文件存在,文件是否有写权限
- -x 文件存在,文件是否有执行权限
- -d 文件存在,文件是否是目录
- -L 文件存在,文件是否是链接文件
- -c 文件存在,文件是否是字符文件
- -b 文件存在,文件是否是块文件
- -f 文件存在,文件是否是普通文件
- -s 文件存在,文件的长度是否大于0或者为非空文件,如果是非空文件,结果为0
(4)逻辑操作符
- !exp 逻辑非
- exp1 -o exp2 逻辑或,两个表达式只要有一个为真即为真。
- exp1 -a exp2 逻辑与,两个表达式只要有一个为假即为假。
例如:
tset “ a"−gt20−a a -lt 50
[ -a filename -a -w filename ]
(二)条件判断语句
(1)if
if exp
then
statement
...
else
statement
...
fi
或者
if exp
then
statement
...
elif exp ;
then
statement
...
elif exp
statement
...
else
statement
...
fi
例如输出成绩等级:
#!/bin/bash
echo "please input your scores :"
read score
if [ -z $score ];
then
echo "you can not input kong string"
exit 1
else
if [ $score -lt 0 -o $score -gt 100 ];
then
echo "please input true score"
read score
else
if [ $score -gt 90 ];then
echo "A"
else
if [ $score -gt 80 ];then
echo "B"
else
if [ $score -gt 70 ];then
echo "C"
else
echo "D"
fi
fi
fi
fi
fi
(2)case语句,形如:
case var in
a)
statement
...
;;
b)
statement
...
;;
.
.
.
*)
statement
...
;;
esac
例如:
read -p "please in a key:" key
if [ -z $key ]
then
echo "you do not input key"
exit 1
fi
case $key in
[1-9])
echo "digit key"
;;
[[:lower:]])
echo "lower key"
;;
[[:upper:]])
echo "upper key"
;;
*)
echo "other key"
;;
esac
(三)循环语句
(1)for
for val in 1 2 3 4 ...
do
statement
...
done
或
for val in {1..8}
do
statement
...
done
或
for val in {str1 str2 ....}//$(ls)
do
statement
...
done
或
for ((i=0;i<n; i++))
do
statement
...
done
例如九九乘法表:
#! /bin/bash
i=1
for (( i=1; i<=9; i++ ))
do
for (( j=1; j<=$i; j++ ))
do
printf "$i*$j=$(($i*$j))"
if [ $(($i*$j)) -gt 9 ]
then
printf " "
else
printf " "
fi
done
echo " "
done
(2)while
while [ exp ]
do
statement
...
done
(3)until
until [ exp ]
do
statement
...
done
例如批量添加用户:
#! /bin/bash
i=1
until [ $i -eq 21 ]
do
useradd user$i
echo "password" | passwd -stdin user$i >/dev/null
let "i++"
done