`

Linux学习笔记-9.5. 流程控制

 
阅读更多

 

 

 

9.5.流程控制

 

9.5.1.if

 

9.5.1.1.单分支if条件语句

 

 

1、单分支的2种写法

 

if [ 条件判断式 ]; then

         程序

fi

 

或者

 

if [ 条件判断式 ]

         then

                   程序

fi

 

 

2、单分支条件语句需要注意以下几点:

a)   if语句使用fi结尾,和一般语言使用大括号结尾不同。

b)  [ 条件判断式 ]就是使用test命令判断,所以中括号和条件判断式之间必须有空格

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

 

 

3、判断分区的使用率

 

 

写一个脚本,当根分区的使用率超过80%时,告警磁盘空间快使用完了

 

如下展示根分区使用率为7%

[root@localhost sh]# df -h

Filesystem               Size  Used Avail Use% Mounted on

/dev/mapper/centos-root   17G  1.2G   16G   7% /

devtmpfs                 446M     0  446M   0% /dev

tmpfs                    456M     0  456M   0% /dev/shm

tmpfs                    456M  6.1M  450M   2% /run

tmpfs                    456M     0  456M   0% /sys/fs/cgroup

/dev/sda1               1014M  125M  890M  13% /boot

tmpfs                     92M     0   92M   0% /run/user/0

 

通过grep只选择根分区

[root@localhost sh]# df -h|grep ""/dev/mapper/centos-root

/dev/mapper/centos-root   17G  1.2G   16G   7% /

 

通过awk命令提取使用率那一列

[root@localhost sh]# df -h|grep ""/dev/mapper/centos-root|awk '{print $5}'

7%

[root@localhost sh]#

 

通过cut命令,拆分出来数字

[root@localhost sh]# df -h|grep ""/dev/mapper/centos-root|awk '{print $5}'|cut -d "%" -f 1

7

[root@localhost sh]#

 

 

把使用率的值赋给变量rate,然后使用if进行判断,超过80时,则输出警告信息。

#!/bin/bash

#统计根分区的使用率

rate=$(df -h|grep "/dev/mapper/centos-root"|awk '{print $5}'|cut -d "%" -f 1)

 

if [ $rate -ge 80 ]

        then

                echo "Waring! /dev/mapper/centos-root is full!"

fi

 

 

后面学习通过定时任务每天晚上执行

 

 

 

9.5.1.2.双分支if条件语句

 

 

 

1、语法

 

if [ 条件判断式 ]

         then

                   条件成立时,执行的程序

         else

                   条件不成立时,执行的另一个程序

fi

 

 

2、备份mysql数据库

 

#!/bin/bash

ntpdate asia.pool.ntp.org &> /dev/null

#同步系统时间

date=$(date +%y%m%d)

#把当前系统时间按照年月日格式赋予变量date

size=$(du -sh /root/sh)

#统计mysql数据库的大小,并把大小赋予变量size,当前环境没有装mysql,改用/root/sh目录

if [ -d /tmp/bak ]

        then

        echo "Date:$date!" > /tmp/bak/bak.log

        echo "Data size:$size" >> /tmp/bak/bak.log

        cd /tmp/bak

        tar -zcf mysql-lib-$date.tar.gz /root/sh bak.log &> /dev/null

        #压缩/roo/sh目录和日志文件bak.log

        rm -rf /tmp/bak/bak.log

else

        mkdir /tmp/bak

        #创建目录后,后面的内容与上面一样

        echo "Date:$date!" > /tmp/bak/bak.log

        echo "Data size:$size" >> /tmp/bak/bak.log

        cd /tmp/bak

        tar -zcf mysql-lib-$date.tar.gz /root/sh bak.log &> /dev/null

        rm -rf /tmp/bak/bak.log

fi

 

 

后面学习通过定时任务每天晚上执行

 

 

3、判断apache是否启动

 

 

安装apache

yum -y install httpd

 

 

通过判断进程或者端口是否存在,不一定准确。

 

使用nmap命令之前需要安装

yum install nmap

 

 

nmap是一个扫描工具,功能非常强大,扫描某个计算机开启的端口

如果所示,端口80apache在用

 

[root@localhost ~]# nmap -sT 192.168.1.200

 

Starting Nmap 6.40 ( http://nmap.org ) at 2018-05-06 23:09 CST

Nmap scan report for 192.168.1.200

Host is up (0.00037s latency).

Not shown: 998 closed ports

PORT   STATE SERVICE

22/tcp open  ssh

80/tcp open  http

 

Nmap done: 1 IP address (1 host up) scanned in 0.08 seconds

[root@localhost ~]#

 

提取tcp

[root@localhost ~]# nmap -sT 192.168.1.200|grep tcp

22/tcp open  ssh

80/tcp open  http

[root@localhost ~]#

 

提取apache

[root@localhost ~]# nmap -sT 192.168.1.200|grep tcp|grep http

80/tcp open  http

[root@localhost ~]#

 

提取apache状态

[root@localhost ~]# nmap -sT 192.168.1.200|grep tcp|grep http|awk '{print $2}'

open

[root@localhost ~]#

 

 

判断apache是否启动,如果没有启动就重启apche

#!/bin/bash

apache=$(nmap -sT 192.168.1.200|grep tcp|grep http|awk '{print $2}')

#使用nmap命令扫描服务器,并截取pache服务的状态,赋值给变量apach

if [ "$apache" == "open" ]

        then

                echo "$(date) httpd is ok!" >> /tmp/apache.log

        else

                service httpd start &> /dev/null

                echo "$(date) restart httpd!" >> /tmp/apache.log

fi

 

 

 

9.5.1.3.多分支if条件语句

 

 

 

1、语法

 

if [ 条件判断式1 ]

         then

                   条件1成立时,执行的程序1

elif  [ 条件判断式2 ]

         then

                   条件2成立时,执行的程序2

...省略更多条件

else

         当所有条件都不成立时,最后执行此程序

fi

 

 

2、判断用户输入的是什么文件

 

exit后,不再向下再进行分支判断,直接返回了。

 

 

#!/bin/bash

#判断用户输入的是什么文件

read -p "please input a filename: " file

#接收键盘的输入,并赋值给变量file

if [ -z $file ]

#判断file是否为空

        then

                echo "Error,please input a filename."

                exit 1

elif [ ! -e $file ]

#判断是否存在

        then

                echo "Your input is not a file."

                exit 2

elif [ -f $file ]

#判断是否为普通 文件

        then

                echo "$file is a regulare file."

elif [ -d $file ]

#判断是否为目录

        then

                echo "$file is a directory."

else

        echo "$file is an other file."

fi

 

 

 

9.5.2.case

 

 

1、多分支case条件语句

 

case语句和if elif else语句一样都是多分支条件语句,不过和if多分支条件语句不同的是,case语句只能判断一种条件关系,而if可以判断多种条件关系。

 

 

语法:

 

case $变量名 in

         “1”)

                   如果变更的值等于值1,则执行程序1

                   ;;

         “2”)

                   如果变更的值等于值2,则执行程序2

                   ;;

         ...省略其他分支...

*)

                   如果变更的值都不是以上的值,则执行此程序

                  ;;

esac

 

 

2、判断用户输入

 

#!/bin/bash

echo "you want to shanghai,please input 1"

echo "you want to guangzhou,please input 2"

echo "you want to beijing,please input 3"

 

read -t 30 -p "please input: " cho

 

case $cho in

        1)

                echo "you choose shanghai."

                ;;

        2)

                echo "you choose guangzhou."

                ;;

        3)

                echo "you choose beijing."

                ;;

        *)

                echo "Error,1/2/3"

esac

 

 

 

 9.5.3.for

 

 

 

1、语法1

 

for 变量 in 1 2 3

         do

                   程序

         done

 

 

2、打印时间

 

#!/bin/bash

for time in morning noon afternoon evening

        do

                echo "Time is $time"

        done

 

输出结果:

[root@localhost sh]# chmod 755 for.sh

[root@localhost sh]# ./for.sh

Time is morning

Time is noon

Time is afternoon

Time is evening

 

 

3、批量打印目录下的所有文件和目录

 

#!/bin/bash

cd /root

ls > ls.log

for i in $(cat ls.log)

        do

                echo "Filename is $i"

        done

 

输出结果:

[root@localhost sh]# chmod 755 for2.sh

[root@localhost sh]# ./for2.sh

Filename is anaconda-ks.cfg

Filename is ls.log

Filename is sh

Filename is student.xt

Filename is testfile

 

 

4、语法2

 

for((初始值;循环控制条件;变量变化))

         do

                   程序

         done

 

Linux中,只有双小括号中才能进行加减乘除运算

 

 

5、从1加到100

 

#!/bin/bash

sum=0

for((i=1;i<=100;i=i+1))

        do

                sum=$(($sum+$i))

        done

echo "The sum of 1+2+3...+100 is:$sum"

 

 

输出结果:

[root@localhost sh]# chmod 755 for3.sh

[root@localhost sh]# ./for3.sh

The sum of 1+2+3...+100 is:5050

 

 

5、如何判断用户输入的字符是否为数字?

 

可以将输入内容,通过正则表达式把数字全部去掉,然后再判断余下的字符串是否为空就知道了

[root@localhost sh]# [ -z $(echo "a123"|sed 's/[0-9]//g') ] && echo yes || echo no

no

[root@localhost sh]# [ -z $(echo "123"|sed 's/[0-9]//g') ] && echo yes || echo no

yes

[root@localhost sh]#

 

 

 

 

9.5.4.while

 

 

 

1、while循环

while循环是不定循环,也称作条件循环。只有条件判断式成立,循环就会一直继续,直到条件判断式不成立,循环才会停止。这就和for的固定循环不太一样了。

 

 

2、语法

 

while [ 条件判断式 ]

         do

                   程序

         done

 

 

 

9.5.5.until

 

 

 

1until循环

         until循环,和while循环相反,until循环时只有条件判断式不成立则进行循环,并执行程序。一旦条件成立时,则终止循环。

 

 

2、语法

 

until [ 条件判断式 ]

         do

                   程序

         done

 

 

 

 

 

 

分享到:
评论

相关推荐

    冰河的渗透实战笔记-冰河.pdf

    冰河整理的全网首个开源的以实战案例为背景的渗透实战笔记,全书共442页,共计37万字(不计空格)。整本书的内容涵盖:Kali基础、渗透工具、木马制作、钓鱼链接生成、爆破密码、内存溢出攻击、web渗透、数据提权、...

    android-x86_64-7.1-r2.isoandandroid-x86_64-8.1-rc2.iso

    - 对于教育领域,这也是一种成本效益高的解决方案,可以让学生在熟悉的桌面环境中学习和使用Android应用程序。 ### ISO镜像文件 - **定义**:ISO镜像是光盘内容的数字副本,通常用于保存文件系统结构和所有原始...

    pip-10.0.1.tar.gz 安装包

    《pip-10.0.1.tar.gz:Python包管理利器》 pip是Python生态系统中的一个核心组件,它为Python开发者提供了一种高效、便捷的方式来安装、管理和升级Python库。pip(pip install packages)这个名字本身就是“安装包...

    jquery-ui-1.7.1.custom.css 自家博客专用

    博客专用: Jqgrid学习笔记__01__初来乍到 很多时候在网上下载一段代码,结果引用的CSS和JS文件不知道从哪里弄,结果上网下载,不是版本不对,就是完全不对。这里的CSS是有对应的代码段的。请参考博客 ====&gt; Jqgrid...

    dojo精品中文教程(全)

    Dojo学习笔记-- dojo.event & dojo.event.topic & dojo.event.browser Dojo学习笔记--DateTextbox Dojo学习笔记--Dojo的基础对象和方法 Dojo学习笔记--FisheyeList鱼眼效果 Dojo学习笔记--TabContainer Dojo...

    e1000e-1.2.10.tar.gz

    标题中的“e1000e-1.2.10.tar.gz”是一个软件包,主要针对Linux操作系统,用于驱动E1000E系列的网络接口控制器(NIC)。E1000E是Intel公司设计的一种以太网控制器,广泛应用于台式机、服务器和笔记本电脑中。这个...

    PCIe-M.2-接口规范-V1.0-接口定义

    PCIe M.2接口规范是一种电子机械接口标准,用于定义一种紧凑型连接器,能够连接个人电脑、笔记本电脑或其他形式的计算设备与固态存储装置、无线网卡等模块。M.2接口的形状小巧,支持多种连接协议,包括PCI Express ...

    linux mysql-connector-java-5.1.36.tar.gz

    这个`mysql-connector-java-5.1.36.tar.gz`文件是一个针对Linux操作系统的压缩包,包含了运行在Linux环境下的MySQL Connector/J的具体版本5.1.36。 MySQL Connector/J遵循JDBC(Java Database Connectivity)标准,...

    惠普HP CQ40 519TX XP驱动 Intel-Hdmi.rar

    这些文件是Windows操作系统识别和配置硬件所必需的,它们会安装到系统的适当位置,以确保HDMI控制器能够正确地处理和传输高清视频和音频数据。 当用户在没有正确驱动的情况下尝试使用HDMI接口时,可能会遇到无法...

    OS-X-Clover-Laptop-Config.zip

    在苹果的Mac操作系统中,有时候用户会选择安装第三方的启动管理器来增强系统兼容性和自定义功能,其中Clover就是一种非常流行的工具。本压缩包"OS-X-Clover-Laptop-Config.zip"提供了一系列针对Intel HD Graphics...

    Markdown Preview Plus-0.7.19

    Markdown是一种轻量级的标记语言,被广泛应用于编写文档、笔记、博客等场景。它的语法简洁明了,易于学习,通过简单的符号就能实现格式化文本,如标题、列表、代码块等。Markdown Preview Plus扩展则进一步增强了...

    STM32G0芯片pack包 Keil.STM32G0xx-DFP.1.4.0.pack

    STM32G0芯片系列是意法半导体(STMicroelectronics)推出的一款基于ARM Cortex-M0+内核的微控制器,其主要特点在于低功耗、高性能以及丰富的外设集。这款芯片广泛应用于嵌入式系统设计,特别是对于需要小巧体积、高...

    高等数学笔记-精华.pdf

    高等数学的笔记,方便学习机器学习等内容时查阅。 主要内容包括:数列、极限、微积分、空间解析几何与线性代数、级数、常微分方程。

    新版Android开发教程及笔记-完整版.pdf

    新版Android开发教程&笔记--基础入门一.pdf 新版Android开发教程&笔记--基础入门二.pdf 新版Android开发教程&笔记三--环境搭建与解析.pdf 新版Android开发教程&笔记四--Dalvik ADB.pdf 新版Android开发教程+笔记五--...

    兄弟连linux教程1-16章学习笔记(全)

    《兄弟连Linux教程1-16章学习笔记》是一份全面涵盖Linux基础知识的学习资料,特别适合初学者和希望快速提升Linux技能的人群。这个压缩包包含了一系列文本文件和辅助图片,旨在帮助用户深入理解Linux系统的基本操作和...

    win10安装twincat3文件下载,亲测不死机TC31-Full-Setup.3.1.4022.30.txt

    win10安装twincat3文件下载,亲测不死机TC31-Full-Setup.3.1.4022.30

    Hex-Float-20121016-exe.rar

    而“doc”文件则可能是文档,包含有关如何使用该工具的说明、技术细节、操作步骤或开发者笔记。文档可能详细解释了如何输入浮点数,如何解读转换后的16进制结果,以及可能遇到的问题和解决方法。 总结一下,"Hex-...

    typora最后的免费版:typora-0.11.18.0

    2. **多格式支持**:除了基本的 Markdown 语法,Typora 还支持 MathJax(用于数学公式),Mermaid(流程图和序列图),以及 PlantUML(UML 图)等扩展格式。 3. **代码高亮**:对于编程爱好者,Typora 支持多种编程...

    SMA-Connector.zip

    标签"HFSS学习笔记"表明这个文件可能是学习HFSS软件过程中的一部分,可能包含了一些教程或实践案例,适合初学者或有一定基础的学习者参考。学习HFSS不仅需要掌握基本的操作界面,如几何建模、网格划分、求解器设置、...

    ControlCenter-3.17.42.0-Mechrevo

    "ControlCenter-3.17.42.0-Mechrevo" 是一款由机械革命(Mechrevo)公司推出的电脑控制中心软件,版本号为3.17.42.0。这款软件专为Mechrevo品牌的电脑设计,旨在提供一个集中的平台,让用户能够方便地管理和调整他们的...

Global site tag (gtag.js) - Google Analytics