新闻动态

shell脚本语言之if条件判断语句实例详解

发布日期:2022-07-20 19:49 | 文章来源:脚本之家

1.单分支if条件语句

then后面跟符合条件之后执行的程序,可以放在[]之后,用;分隔。也可以换行写入,

就不需要“;”了。

比如:

if [ 条件判断式 ]
then
程序
fi

1.1举例:判断目录是否存在,不存在则创建

#!/bin/bash
#date:2022-4-13
#描述:if单分支语句示例,判断目录是否存在
read -p "请输入需要判断的目录:" name
if [ ! -d $name ]
 then
  echo "$name目录不存在,正在创建..."
  mkdir -p $name
  echo "$name目录创建完成."
fi
  echo "$name目录已存在,正在退出..."

2.双分支if条件语句

if [ 条件判断式 ]
then
条件成立时,执行的程序。
else
条件不成立时,执行的另一个程序。
fi

2.1举例:监听并自动重启apache服务脚本

在日常工作中,服务器上的服务经常会宕机。如果我们对服务器监控不好,就会造成服务器中服务宕机了,而管理员却不 知道的情况。这是我们可以写一个脚本来监听本机的服务。如果服务停止或宕机了,可以自动重启这些服务。用apache举例:

首先介绍端口扫描命令

nmap端口扫描命令,

格式:nmap -sT 域名或IP

子选项:

-s 扫描

-T 扫描所有开启的TCP端口

nmap扫描后显示的端口一定是存活的。

脚本要使用nmap命令,首先用yum -y install nmap安装。

apache服务也是yum安装。

[root@xiaopeng ~]# cat autostart.sh 
#!/bin/bash 
port=$(nmap -sT 192.168.22.222 | grep tcp | grep http | awk '{print $2}') 
if [ "$port" == "open" ] 
 then 
  echo "$(date) httpd is ok!" >> /tmp/autostart-acc.log 
 else 
  /etc/rc.d/init.d/httpd start &> /dev/nullecho "$(date) restart httpd!!" >> /tmp/autostart-err.log 
fi

(首先用nmap命令查看是否开启apache并赋值给port。

然后进行条件判断。如果服务开启,输出当前时间+httpd is ok 到/tmp/autostart-

acc.log。

如果变量port的值不是open,那么执行else下操作。首先启动apache服务,将启动后 信息输出至位桶,然后在/tmp/autostart-err.log中记录。在本次脚本中nmap命令使用的是

IP查找端口,但并未指DNS,所以会报DNS不存在的错,但不影响结果。)

3.多分支if条件语句

if [ 条件判断式1 ]
then
当条件判断式1成立时,执行程序1。
elif [ 条件判断式2 ]
then
当条件判断式2成立时,执行程序2。
......(可加入更多条件)
else
当所有条件不成立时,最后执行此程序。
fi

3.1举例:判断用户输入的是文件还是目录

#!/bin/bash
#date:2022-4-13
#描述:判断文件类型
read -p "请输入一个文件:" file
if [ -z $file ]
 then
  echo "错误!输入的文件为空."
elif [ ! -e $file ]
 then
  echo "错误!输入的文件不存在."
elif [ -f $file ]
 then
  echo "$file是一个普通文件"
elif [ -d $file ]
 then
  echo "$file是一个目录"
else
  echo "$file是其他类型文件"
fi

4.case条件语句

多分支case条件语句

case $变量名 in
“值1”)
如果$变量等于值1,则执行程序1
;;
“值2”)
如果$变量等于值2,则执行程序2
;;
....省略...
*)
如果$变量的值不是以上值,则执行此程序
;;
esac

4.1举例:创建启动脚本,让service命令管理apache

[root@xiaopeng htdocs]# vim /etc/init.d/apached
#!/bin/bash
# chkconfig: 2345 64 36
# description: A very fast and reliable SQL database engine
httpd=/usr/local/apache2/bin/apachectl
case $1 in
start)
  $httpd start
  ;;
stop)
  $httpd stop
  ;;
restart)
  $0 stop  
  sleep 0.05  
  $0 start
  ;;
configtest)
$httpd  -t
;;
*)
  echo "usage:$0 start|stop|restart|configtest."
  ;;
esac

4.2举例:创建启动脚本,让service命令管理nginx

[root@xiaopeng conf]# vim  /etc/init.d/nginx
#!/bin/bash
#Author:liu
#chkconfig: 2345 99 33
#description: nginx server control tools
 
ngxc="/usr/local/nginx/sbin/nginx"
ngxc_fpm="/usr/local/php/sbin/php-fpm"
case "$1" in
 start)
  $ngxc -t &> /dev/null
  if [ $? -eq 0 ];then
 $ngxc
 $ngxc_fpm
 echo "nginx service start success!"
  else
 $ngxc -t
  fi
  ;;
 stop)
  $ngxc  -s  stop
  killall  php-fpm
  echo "nginx service stop success!"
  ;;
 restart)
  $0 stop
  $0 start
  ;;
 reload)
  $ngxc -t &> /dev/null
  if [ $? -eq 0 ];then
$ngxc  -s  reload
 pkill  -HUP  php-fpm
 echo "reload nginx config success!"
  else
 $ngxc -t
  fi
  ;;
 *)
  echo "please input stop|start|restart|reload."
  exit 1
esac

总结

到此这篇关于shell脚本语言之if条件判断语句的文章就介绍到这了,更多相关shell脚本if条件判断语句内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

海外服务器租用

版权声明:本站文章来源标注为YINGSOO的内容版权均为本站所有,欢迎引用、转载,请保持原文完整并注明来源及原文链接。禁止复制或仿造本网站,禁止在非www.yingsoo.com所属的服务器上建立镜像,否则将依法追究法律责任。本站部分内容来源于网友推荐、互联网收集整理而来,仅供学习参考,不代表本站立场,如有内容涉嫌侵权,请联系alex-e#qq.com处理。

相关文章

实时开通

自选配置、实时开通

免备案

全球线路精选!

全天候客户服务

7x24全年不间断在线

专属顾问服务

1对1客户咨询顾问

在线
客服

在线客服:7*24小时在线

客服
热线

400-630-3752
7*24小时客服服务热线

关注
微信

关注官方微信
顶部