您的位置:首页 > 运维架构 > Shell

shell脚本之条件测试与判断

2017-12-23 16:46 519 查看

(一)条件测试,与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−aa -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:]])

4000
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell 脚本