首页 > 系统相关 >[转帖]shell编程-流程控制-if语句

[转帖]shell编程-流程控制-if语句

时间:2024-04-05 09:03:39浏览次数:31  
标签:tmp shell dbbak 编程 filename 转帖 date fi echo

1. 单分支if条件语句

单分支if条件语句有三种写法:

if [ 条件判断式 ]; then
    操作
fi

    或者

    if [ 条件判断式 ]
      then
         操作
    fi

      或者

      if [ 条件判断式 ];then 操作;fi

        说明:只有条件成立,才执行相应的操作。

        示例:

        if [ aa==aa ];then echo yes;fi
        • 1

        注意要点:

        • if语句使用fi结尾。
        • [ 条件 ] 中括号的内部两侧必须有空格。
        • 如果then和上面的if判断在同一行,要用分号;分割。

        示例:判断根分区的使用率

        写一个shell脚本usage.sh:

        #!/bin/bash
        # 判断根分区的使用率
        # Author: root
        

        rate=$(df -h | grep "/dev/sda3" | awk '{print $5}' | cut -d "%" -f1)
        # 把分区/dev/sda3的使用率作为值赋予变量rate

        if [ $rate -ge 80 ];then
        echo "Warning! /dev/sda3 is full"
        fi

          2. 双分支if条件语句

          基本格式:

          if [ 条件 ]
            then
              条件成立时,执行操作1
            else
              条件不成立时,执行操作2
          fi

            示例:备份mysql数据库

            #!/bin/bash
            #备份mysql数据库
            #Author: root
            

            ntpdate asia.pool.ntp.org &>/dev/null
            #同步系统时间,并将执行结果直接丢弃(即不输出到屏幕)
            #Linux默认没有ntpdate命令,可用 yum -y install ntpdate 安装

            date=$(date +%Y%m%d)
            #把当前系统时间按照“年月日”格式赋予变量date

            size=$(du -sh /var/lib/mysql)
            #统计mysql数据库的大小,并把其赋予size变量

            if [ -d /tmp/dbbak ]
            then
            echo "Date: \(date</span>"</span> &gt; /tmp/dbbak/dbinfo.txt <span class="hljs-built_in">echo</span> <span class="hljs-string">"Data size: <span class="hljs-variable">\)size" >> /tmp/dbbak/dbinfo.txt
            cd /tmp/dbbak
            tar -zcf mysql-lib-\(date</span>.tar.gz /var/lib/mysql dbinfo.txt &amp;&gt;/dev/null rm -rf /tmp/dbbak/dbinfo.txt <span class="hljs-keyword">else</span> mkdir /tmp/dbbak <span class="hljs-built_in">echo</span> <span class="hljs-string">"Date: <span class="hljs-variable">\)date" > /tmp/dbbak/dbinfo.txt
            echo "Data size: \(size</span>"</span> &gt;&gt; /tmp/dbbak/dbinfo.txt <span class="hljs-built_in">cd</span> /tmp/dbbak tar -zcf mysql-lib-<span class="hljs-variable">\)date.tar.gz /var/lib/mysql dbinfo.txt &>/dev/null
            rm -rf /tmp/dbbak/dbinfo.txt
            fi

              示例2:判断apache的运行状态

              #!/bin/bash
              
              #linux默认没有安装apache,可用 yum -y install httpd 快速安装
              #但如果是作为真实的服务器,建议用源码包安装apache
              

              state=$(nmap -sT 192.168.200.128 | grep tcp | grep http | awk '{print $2}')
              #使用nmap命令扫描服务器,并截取Apache服务器的状态,赋予变量state
              #Linux默认没有nmap命令,可用 yum -y install nmap 快速安装
              #说明:nmap命令比ps或netstat要好,它判断的更准确
              #比如apache虽然是启动状态但无法正常响应客户请求时,用nmap能检测出真实的运行状态

              if [ "\(state</span>"</span> == <span class="hljs-string">"open"</span> ] <span class="hljs-keyword">then</span> <span class="hljs-built_in">echo</span> <span class="hljs-string">"<span class="hljs-variable">\)(date) httpd is OK" >> /tmp/autostart-acc.log
              else
              /etc/rc.d/init.d/httpd restart &>/dev/null
              echo "$(date) restart httpd" >> /tmp/autostart-err.log
              fi

                可使用Linux的定时任务让该脚本文件每15分钟执行一次,从而保证apache的正常运行。

                3. 多分支if条件语句

                基本格式:

                if [ 条件1 ]
                    then
                        当条件1成立时,执行操作1
                elif [ 条件2 ]    
                    then
                        当条件2成立时,执行操作2
                ...
                else
                    当所有条件都不成立时,执行最终操作
                fi

                  示例:判断用户的输入

                  #!/bin/bash
                  #判断用户的输入
                  #Author:root
                  

                  read -p "Please input a filename: " filename
                  #接收键盘的输入,并赋给变量filename

                  if [ -z $filename ]
                  then
                  echo "Error, please input a filename"
                  exit 1
                  #exit后面跟数字,可以指定脚本执行后 \(? 的值。后面的代码不会执行。</span> <span class="hljs-keyword">elif</span> [ ! <span class="hljs-operator">-e</span> <span class="hljs-variable">\)filename ]
                  then
                  echo "There is no such file"
                  exit 2
                  elif [ -f \(filename</span> ] <span class="hljs-keyword">then</span> <span class="hljs-built_in">echo</span> <span class="hljs-string">"<span class="hljs-variable">\)filename is a regular file"
                  elif [ -d \(filename</span> ] <span class="hljs-keyword">then</span> <span class="hljs-built_in">echo</span> <span class="hljs-string">"<span class="hljs-variable">\)filename is a directory"
                  else
                  echo "$filename is a special file"
                  fi

                  <ul class="pre-numbering" style=""




                  标签:tmp,shell,dbbak,编程,filename,转帖,date,fi,echo
                  From: https://www.cnblogs.com/jinanxiaolaohu/p/16943678.html

                  相关文章

                  • [转帖]Linux内存–零拷贝
                    https://plantegg.github.io/2020/11/15/Linux%E5%86%85%E5%AD%98--%E9%9B%B6%E6%8B%B7%E8%B4%9D/ 本系列有如下几篇Linux内存问题汇总Linux内存–PageCacheLinux内存–管理和碎片Linux内存–HugePageLinux内存–零拷贝零拷贝“Zero-copy“describescomputeroper......
                  • shell多进程和并发
                    Shell实现多进程:     1..使用&和wait配合实现shell多进程并行    参考连接:https://blog.csdn.net/yuefei169/article/details/833404802..改串行执行为并行执行方式:将前台执行命令放在后台执行(串行命令后加 &符号).(生产少使用该方式)3..使用元祖模拟队列来控制进程数......
                  • 小美的蛋糕切割(美团2024届秋招笔试第一场编程真题)
                    题面核心思想前缀和(不过是以一整行或一整列的维度)(滑动窗口应该也可以)需要注意的是可以横着切也可以竖着切代码importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){finallongMOD=(long)(1e9+7);Scannerscanne......
                  • adb shell input keyevent
                    adbshellinputkeyevent命令用于模拟物理按键的输入事件,其参数是按键的键码(keycode)。键码是一个整数值,代表不同的按键,具体的键码可以在Android官方文档中找到 以下是Android系统中键码列表:KEYCODE_UNKNOWN(0):未知键码KEYCODE_SOFT_LEFT(1):左软键KEYCODE_SOFT......
                  • Python编程题(for循环与format合用)
                    题目描述:用 * 构造一个对角线长 55 个字符,倾斜放置的菱形。输出格式 * ******** *** *首先补充format()格式化刷新函数:当我们了解并会熟练使用format()函数的时候我们便可以写出代码: foriinrange(-2,3):print("{:^5}".format("*"*(5-abs(2*i)......
                  • 少儿编程 2024年3月电子学会图形化编程等级考试Scratch一级真题解析(选择题)
                    2024年3月scratch编程等级考试一级真题选择题(共25题,每题2分,共50分)1、单击下列哪个按钮,能够让舞台变为“全屏模式”A、B、C、D、答案:C考点分析:考查scratch平台的使用,四个选项分别是:开始程序,停止程序,全屏模式,恢复正常模式,答案C2、下列哪个选项可以将当前背景换成第二......
                  • C语⾔编程题 计算最⼤公约数 和 打印最⼩公倍数
                    1.计算最⼤公约数1.1 题⽬描述:      输⼊2个整数m和n,计算m和n的最⼤公约数,并打印出结果2.2解法思路:       最⼤公约数是指两个或多个整数共有约数中最⼤的⼀个。为了求出两个数的最⼤公约数,可以采⽤: •枚举试除法: 1.具体来说,公约数⼀定⼩于两个......
                  • Linux Shell:`cat`命令
                    LinuxShell:cat命令Linux系统中的cat命令是一种多用途的工具,主要用于查看、创建、连接和追加文件内容。其名称来源于concatenate的缩写,意味着它可以用来连接文件内容到标准输出(屏幕)。在日常使用中,cat命令的功能远不止于此,它还可以通过重定向和管道与其他命令结合使用......
                  • 前端学习<四>JavaScript基础——01-编程语言和JavaScript简介
                    计算机语言概念计算机语言:人与计算机之间通信的语言。它是人与计算机之间传递信息的媒介,它通过特定的语法规则和语义约定,将人类可理解的指令转化为计算机可以执行的机器指令。计算机程序:就是计算机所执行的一系列的指令集合,程序全部都是用我们所掌握的语言来编写的,如果我们......
                  • Golang vs Java: 一场编程语言的较量
                    在IT行业飞速发展的过程中,编程语言扮演着至关重要的角色。作为开发人员,选择合适的编程语言对于构建高效、可靠和可维护的应用程序至关重要。在这场编程语言的较量中,Golang和Java无疑是两个备受青睐的选择。我们现在将对这两种语言进行全面对比,探讨它们在性能、简洁性、并发......