Shell 之 if

来源:互联网 发布:源码资本投资的项目 编辑:程序博客网 时间:2024/06/07 01:14

转自:http://blog.sina.com.cn/s/blog_4a071ed80101nww2.html


1、字符串判断

A = B    当两个串有相同内容、长度时为真
A != B   当串A和B不等时为真
-n A    当串的长度大于0时为真(串非空)
-z A    当串的长度为0时为真(空串)
A      当串A为非空时为真

2、数字的判断
A -eq B    两数相等为真
A -ne B    两数不等为真
A -gt B    A大于B为真
A -ge B    A大于等于B为真
A -lt B    A小于B为真
A -le B    A小于等于B为真

3、文件的判断
-r file     用户可读为真
-w file     用户可写为真
-x file     用户可执行为真
-f file     文件为正规文件为真
-d file     文件为目录为真
-c file     文件为字符特殊文件为真
-b file     文件为块特殊文件为真
-s file     文件大小非0时为真
-t file     当文件描述符(默认为1)指定的设备为终端时为真

4、复杂逻辑判断
-a 与
-o 或
!  非

一下是一些使用实例:
#!/bin/sh
myPath="/var/log/httpd/"
myFile="/var /log/httpd/access.log"
#这里的-x 参数判断$myPath是否存在并且是否具有可执行权限

if [ ! -x "$myPath"];then
mkdir "$myPath"
fi

#这里的-d 参数判断$myPath是否存在
if [ ! -d "$myPath"];then
mkdir "$myPath"
fi

#这里的-f参数判断$myFile是否存在
if [ ! -f "$myFile" ];then
touch "$myFile"
fi

#其他参数还有-n,-n是判断一个变量是否是否有值
if [ ! -n "$myVar" ];then
echo "$myVar is empty"
exit 0
fi

#两个变量判断是否相等
if [ "$A" == "$B" ];then
echo '$A eq $B'
else
echo '$A not eq $B'
fi

if list then
do something here
elif list then
do another thing here
else
do something else here
fi

#!/bin/sh
SYSTEM=`uname -s` #获取操作系统类型,我本地是linux
if [ $SYSTEM = "Linux" ];then #如果是linux的话打印linux字符串
echo "Linux"
elif [ $SYSTEM = "FreeBSD" ];then
echo "FreeBSD"
elif [ $SYSTEM = "Solaris" ];then
echo "Solaris"
else
echo "What?"
fi #ifend
基本上和其他脚本语言一样。没有太大区别。不过值得注意的是. []里面的条件判断


实例:检查 OpenVPN 脚本
[root@80uncle shell]# cat vpn.sh
sslvpn=`netstat -anp|grep openvpn |grep udp |wc -l`
if [ $sslvpn -eq 1 ];then
echo openvpn is running
else
/sbin/service openvpn restart

sleep 2

sslvpn_new_status=`/bin/sh /data/shell/vpn.sh | awk '{print$3}'`
if [ $sslvpn_new_status == "ok" ];then
echo Openvpn is running
else
echo "Openvpn is not running" | mail -s "Notice! openvpn status isNot OK" root#80uncle.com ### 邮件通知脚本
fi
fi

注意:
1、if 与 [ 之间必须有空格
2、[ ] 与判断条件之间也必须有空格
3、] 与 ; 之间不能有空格
原创粉丝点击