Shell介绍(四)条件表达式,字符串比对
[root@web01 scripts]# [ -f /etc/hosts ] && echo 为真 || echo 为假 为真
函数库使用
[root@web01 scripts]# cat ping.sh #!/bin/sh [ -f /etc/init.d/functions ] && . /etc/init.d/functions read -p "请输入一个网址: " url ping -c 1 -W 1 $url >/dev/null 2>&1 [ $? -eq 0 ] && action "ping $url is" /bin/true || action "ping $url is" /bin/false
数值的比较
[root@web01 scripts]# [ 10 -eq 10 ] && echo ok || echo error ok [root@web01 scripts]# [ 10 -gt 10 ] && echo ok || echo error error
[root@web ~]# echo $USER root [root@web ~]# [ "$USER" = "root" ] [root@web ~]# echo $? 0 [root@web ~]# [ "$USER" = "alex" ] [root@web ~]# echo $? 1
-z #字符串长度为0为真, -n #字符串长度不为0为真
[root@web ~]# name="" [root@web ~]# [ -z $name ] [root@web ~]# echo $? 0 [root@web ~]# [ ! -z $name ] [root@web ~]# echo $? 1 [root@web ~]# name="alex" [root@web ~]# [ -z $name ] [root@web ~]# echo $? 1 [root@web ~]# [ -n $name ] [root@web ~]# echo $? 0
正则比对
[[ ]]=~ 匹配 [root@web01 scripts]# [[ "$USER" =~ ^r ]]#以r开头 [root@web01 scripts]# echo $? 0 [root@web01 scripts]# [[ "$USER" =~ t$ ]]#以t结尾 [root@web01 scripts]# echo $? 0
多整数比对
[root@web01 scripts]# [ 10 -eq 10 -a 100 -eq 100 ] [root@web01 scripts]# echo $? 0 [root@web01 scripts]# [ 10 -eq 10 -o 100 -ne 100 ] [root@web01 scripts]# echo $? 0 [root@web01 scripts]# [[ 10 -eq 10 && 100 -ne 100 ]] [root@web01 scripts]# echo $? 1 [root@web01 scripts]# [[ 10 -eq 10 || 100 -ne 100 ]] [root@web01 scripts]# echo $? 0
#!/bin/sh [ $# -ne 2 ] && echo "please input two number" && exit [[ ! $1 =~ ^[0-9]+$ ]] && echo "请输入整数" && exit 50 [[ ! $2 =~ ^[0-9]+$ ]] && echo "请输入整数" && exit 100 [ $1 -eq $2 ] && echo "$1=$2" [ $1 -gt $2 ] && echo "$1>$2" [ $1 -lt $2 ] && echo "$1<$2"
[root@web01 scripts]# cat useradd.sh #!/bin/sh read -p "please input prefix: " name read -p "创建的个数: " num for i in `seq $num` do useradd $name$i >/dev/null 2>&1 echo 123456|passwd --stdin $name$i &>/dev/null [ $? -eq 0 ] && echo "$name$i create is ok" done
[root@web01 scripts]# cat ping.sh #!/bin/sh [ -f /etc/init.d/functions ] && . /etc/init.d/functions for i in `seq 254` do { IP=10.0.0.$i ping -c 1 -W 1 $IP >/dev/null 2>&1 [ $? -eq 0 ] && action "ping $IP is" /bin/true } & done
字符串比对
[ "name" = "name" ] #等于 [ "name" != "name" ]#不等于 -z#字符串个数等于0 -n#字符串个数不等于0
read -p "请输入名字" name1 [ -z $name1 ] && echo "请输入姓名否则不继续执行" && exit read -p "请输入年龄" age1 echo $name1 $age1
判读传参的参数是否为整数
[root@web01 scripts]# age=188 [root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]] [root@web01 scripts]# echo $? 0 [root@web01 scripts]# age=188q [root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]] && echo $? [root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]] || echo $? 1 [root@web01 scripts]# age=18.8 [root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]] [root@web01 scripts]# echo $? 1
方法2
expr $1 + 0 >/dev/null 2>&1 [ $? -ne 0 ] && exit
多整数比对
[ 10 -eq 10 -a 100 -ne 100 ] [root@web01 scripts]# [ 10 -eq 10 -a 100 -ne 100 ] [root@web01 scripts]# echo $? 1 [root@web01 scripts]# [ 10 -eq 10 -a 100 -eq 100 ] [root@web01 scripts]# echo $? 0 [root@web01 scripts]# [ 10 -eq 10 -o 100 -ne 100 ] [root@web01 scripts]# echo $? 0
案例: 传入两个数字 比对两个数字的大小
#!/bin/sh [ $# -ne 2 ] && echo "please input two number" && exit [[ ! $1 =~ ^[0-9]+$ ]] && echo "请输入整数" && exit 50 [[ ! $2 =~ ^[0-9]+$ ]] && echo "请输入整数" && exit 100 [ $1 -eq $2 ] && echo "$1=$2" [ $1 -gt $2 ] && echo "$1>$2" [ $1 -lt $2 ] && echo "$1<$2"
[root@web01 scripts]# cat useradd.sh #!/bin/sh #read -p "please input prefix: " name #read -p "创建的个数: " num for i in {1..10} do echo oldboy$i done [root@web01 scripts]# cat useradd.sh #!/bin/sh read -p "please input prefix: " name read -p "创建的个数: " num for i in `seq $num` do useradd $name$i >/dev/null 2>&1 echo 123456|passwd --stdin $name$i &>/dev/null [ $? -eq 0 ] && echo "$name$i create is ok" done