首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Shell中的if判断怎么用?

Shell中的if判断怎么用?

作者头像
入门笔记
发布于 2022-06-03 02:25:05
发布于 2022-06-03 02:25:05
86800
代码可运行
举报
文章被收录于专栏:入门小站入门小站
运行总次数:0
代码可运行

原文:https://blog.csdn.net/weixin_46659843/article/details/124139867

1. 单分支 if 条件语句

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

比如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if   [  条件判断式  ] 
    then
        程序 
fi

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash
#date:2022-4-13
#描述:if单分支语句示例,判断目录是否存在
read -p "请输入需要判断的目录:" name
if [ ! -d $name ]
    then
     echo "$name目录不存在,正在创建..."
     mkdir -p $name
     echo "$name目录创建完成."
fi
     echo "$name目录已存在,正在退出..."
  1. 双分支 if 条件语句

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if   [  条件判断式  ] 
    then
        条件成立时,执行的程序。 
    else
        条件不成立时,执行的另一个程序。 
fi

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

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

首先介绍端口扫描命令,nmap 端口扫描命令,

格式:nmap -sT 域名或 IP

子选项:

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

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

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

apache 服务也是 yum 安装。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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 不存在的错,但不影响结果。)

  1. 多分支 if 条件语句
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if   [  条件判断式1  ] 
    then
        当条件判断式1成立时,执行程序1。 
elif  [  条件判断式2  ] 
    then
        当条件判断式2成立时,执行程序2......(可加入更多条件) 
    else
        当所有条件不成立时,最后执行此程序。 
fi

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/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 条件语句

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
case  $变量名  in 
    “值1”) 
        如果$变量等于值1,则执行程序1 
    ;; 
    “值2”) 
        如果$变量等于值2,则执行程序2 
    ;; 
        ....省略... 
    *) 
        如果$变量的值不是以上值,则执行此程序 
    ;; 
esac

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 入门小站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
21.shell语言之if条件判断语句
then后面跟符合条件之后执行的程序,可以放在[]之后,用;分隔。也可以换行写入,
全栈程序员站长
2022/09/14
7730
Shell流程控制
if条件语句:设定一个条件如果怎么,然后怎么样,if语句的选择结构可以分为三种基本类型,适用于不同的应用场合。
剧终
2020/08/26
4790
Linux Shell学习简单小结(更新中……)
#! /bin/bash # 删除文件 和 新建文件 file=readme function delFile(){ if [ -e ./$file ];then rm -f ./$file echo "del $file ..." fi } function addFile(){ if [ ! -f ./$file ];then touch $file echo "add $file ..." fi } delFile addFile
阳光岛主
2019/02/19
9430
超牛逼!100 个开箱即用的 Shell 脚本,拿好了~
shell脚本是帮助程序员和系统管理员完成费时费力的枯燥工作的利器,是与计算机交互并管理文件和系统操作的有效方式。区区几行代码,就可以让计算机接近按照你的意图行事。
民工哥
2021/05/11
1.7K0
23 个非常实用的 Shell 拿来就用脚本实例
shell脚本是帮助程序员和系统管理员完成费时费力的枯燥工作的利器,是与计算机交互并管理文件和系统操作的有效方式。区区几行代码,就可以让计算机接近按照你的意图行事。
公众号机器学习与AI生成创作
2021/03/29
1K0
shell脚本编程之路3
描述:我们学过的每一种高级编程语言,都在存在流程/分支选择/循环等结构,同样shell编程中也有这是与windows上的bat编程不一样的点;shell选择分支嵌套建议不超过三层,为了执行的效率和其他人容易读懂;
全栈工程师修炼指南
2022/09/28
5720
shell脚本编程之路3
超实用!18 个开箱即用的 Shell 脚本,拿好了~
假设服务器环境为 lnmp,近期访问经常出现 502 现象,且 502 错误在重启 php-fpm 服务后消失,因此需要编写监控脚本,一旦出现 502,则自动重启 php-fpm 服务。
PHP开发工程师
2021/05/10
7220
超实用!18 个开箱即用的 Shell 脚本,拿好了~
shell的进阶下
12.1 条件判断式 只要讲到『程序』的话,那么条件判断式,亦即是『 if then 』这种判别式肯定一定要学习的! 因为 很多时候,我们都必须要依据某些数据来判断程序该如何进行。举例来说,我们在上头
小柒吃地瓜
2020/04/22
6400
101个shell脚本
emm。。这个脚本是因为tomcat没有自带的能够给service开机启动的脚本,我就琢磨着自己写了一个简单的启动脚本,如下:
端碗吹水
2020/09/23
1.5K0
101个shell脚本
每日shell练习题
(63)需求: –监控节点 一个网站,使用了cdn,全国各地有几十个节点。需要你写一个shell脚本来监控各个节点是否正常。 假如: 监控的url为www.aming.com/index.php 源站ip为88.88.88.88 以及各个节点ip列表文件为/tmp/ip.txt #!/bin/bash url="www.aming.com/index.php" s_ip="88.88.88.88" curl -x $s_ip:80 $url > /tmp/source.html 2>/dev/null fo
老七Linux
2018/05/31
4.8K0
Shell编程100例,超赞!
7、检测本机当前用户是否为超级管理员,如果是管理员,则使用 yum 安装 vsftpd,如果不是,则提示您非管理员(使用字串对比版本)
C语言中文社区
2022/05/31
3.8K0
Shell编程基础篇-下
惨绿少年
2017/12/27
1.7K0
Shell编程基础篇-下
一文彻底弄懂Linux-Shell编程
‐su: syntax error near unexpected token `} '
Maynor
2022/09/28
1.1K0
一文彻底弄懂Linux-Shell编程
Linux云计算运维之Shell
printf ‘输出类型输出格式’ 输出内容 输出类型 : %ns :输出字符串。n是数字指代输出几个字符 %ni :输出整数。n是数字指代输出几个数字 %m.nf : 输出浮点数。m和n是数字,指代输出的整数位数和小数位数。如%8.2f 代表共输出8位数,其中2位是小数,6位是整数。 输出格式 : \a : 输出警告声音 \b : 输出退格键,也就是Backspace键 \f : 清楚屏幕 \n : 换行
海仔
2020/06/08
6.1K0
Shell脚本编程_shell简单脚本
  shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务,在用户和内核之间充当翻译官的角色,是一个命令解释器。Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 shell。
全栈程序员站长
2022/11/09
8.5K0
Shell脚本编程_shell简单脚本
shell学习教程(超详细完整)[通俗易懂]
为了方便以后工作使用和复习,吐血整理记录一下学习shell脚本的笔记,看这篇文章需要对linux系统熟悉,希望对大家有所帮助!
全栈程序员站长
2022/09/23
7.1K0
详解shell脚本case条件语句,开发各种服务启动脚本跳板机
#前言:case条件语句我们常用于实现系统服务启动脚本等场景,case条件语句也相当于if条件语句多分支结构,多个选择,case看起来更规范和易读
老油条IT记
2020/09/04
9570
shell if条件判断_shell if 判断
下载httpd-2.2.27.tar.gz版本,下载URL解压,进入安装目录,configure;make;make install
全栈程序员站长
2022/09/23
2.1K0
给lnmp添加一键反代功能
为lnmp添加 lnmp proxy add命令,一键反代。 以后添加反代网站再也不用繁琐的复制文件再修改,用lnmp一键搞定
wo.
2021/06/15
1.3K0
LNMP自动添加vhost脚本(功能蛮强大的)
需求背景: 服务器上,跑的lamp环境,上面有很多客户的项目,每个项目就是一个网站。 由于客户在不断增加,每次增加一个客户(自动创建密码),就需要配置相应的mysql、ftp以及httpd. 这种工作是重复性非常强的,所以用脚本实现非常合适。 mysql增加的是对应客户项目的数据库、用户、密码,ftp增加的是对应项目的用户、密码(使用vsftpd,虚拟用户模式),httpd就是要增加虚拟主机配置段。 ---- 首先需要一个基础的nginx虚拟主机配置文件, 一般情况下,我们配置虚拟主机都是建一个vhost目
老七Linux
2018/05/31
9800
相关推荐
21.shell语言之if条件判断语句
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验