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是一个扫描工具,功能非常强大,扫描某个计算机开启的端口
如果所示,端口80是apache在用
[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
1、until循环
until循环,和while循环相反,until循环时只有条件判断式不成立则进行循环,并执行程序。一旦条件成立时,则终止循环。
2、语法
until [ 条件判断式 ]
do
程序
done
相关推荐
冰河整理的全网首个开源的以实战案例为背景的渗透实战笔记,全书共442页,共计37万字(不计空格)。整本书的内容涵盖:Kali基础、渗透工具、木马制作、钓鱼链接生成、爆破密码、内存溢出攻击、web渗透、数据提权、...
- 对于教育领域,这也是一种成本效益高的解决方案,可以让学生在熟悉的桌面环境中学习和使用Android应用程序。 ### ISO镜像文件 - **定义**:ISO镜像是光盘内容的数字副本,通常用于保存文件系统结构和所有原始...
《pip-10.0.1.tar.gz:Python包管理利器》 pip是Python生态系统中的一个核心组件,它为Python开发者提供了一种高效、便捷的方式来安装、管理和升级Python库。pip(pip install packages)这个名字本身就是“安装包...
博客专用: Jqgrid学习笔记__01__初来乍到 很多时候在网上下载一段代码,结果引用的CSS和JS文件不知道从哪里弄,结果上网下载,不是版本不对,就是完全不对。这里的CSS是有对应的代码段的。请参考博客 ====> Jqgrid...
Dojo学习笔记-- dojo.event & dojo.event.topic & dojo.event.browser Dojo学习笔记--DateTextbox Dojo学习笔记--Dojo的基础对象和方法 Dojo学习笔记--FisheyeList鱼眼效果 Dojo学习笔记--TabContainer Dojo...
标题中的“e1000e-1.2.10.tar.gz”是一个软件包,主要针对Linux操作系统,用于驱动E1000E系列的网络接口控制器(NIC)。E1000E是Intel公司设计的一种以太网控制器,广泛应用于台式机、服务器和笔记本电脑中。这个...
PCIe M.2接口规范是一种电子机械接口标准,用于定义一种紧凑型连接器,能够连接个人电脑、笔记本电脑或其他形式的计算设备与固态存储装置、无线网卡等模块。M.2接口的形状小巧,支持多种连接协议,包括PCI Express ...
这个`mysql-connector-java-5.1.36.tar.gz`文件是一个针对Linux操作系统的压缩包,包含了运行在Linux环境下的MySQL Connector/J的具体版本5.1.36。 MySQL Connector/J遵循JDBC(Java Database Connectivity)标准,...
这些文件是Windows操作系统识别和配置硬件所必需的,它们会安装到系统的适当位置,以确保HDMI控制器能够正确地处理和传输高清视频和音频数据。 当用户在没有正确驱动的情况下尝试使用HDMI接口时,可能会遇到无法...
在苹果的Mac操作系统中,有时候用户会选择安装第三方的启动管理器来增强系统兼容性和自定义功能,其中Clover就是一种非常流行的工具。本压缩包"OS-X-Clover-Laptop-Config.zip"提供了一系列针对Intel HD Graphics...
Markdown是一种轻量级的标记语言,被广泛应用于编写文档、笔记、博客等场景。它的语法简洁明了,易于学习,通过简单的符号就能实现格式化文本,如标题、列表、代码块等。Markdown Preview Plus扩展则进一步增强了...
STM32G0芯片系列是意法半导体(STMicroelectronics)推出的一款基于ARM Cortex-M0+内核的微控制器,其主要特点在于低功耗、高性能以及丰富的外设集。这款芯片广泛应用于嵌入式系统设计,特别是对于需要小巧体积、高...
高等数学的笔记,方便学习机器学习等内容时查阅。 主要内容包括:数列、极限、微积分、空间解析几何与线性代数、级数、常微分方程。
新版Android开发教程&笔记--基础入门一.pdf 新版Android开发教程&笔记--基础入门二.pdf 新版Android开发教程&笔记三--环境搭建与解析.pdf 新版Android开发教程&笔记四--Dalvik ADB.pdf 新版Android开发教程+笔记五--...
《兄弟连Linux教程1-16章学习笔记》是一份全面涵盖Linux基础知识的学习资料,特别适合初学者和希望快速提升Linux技能的人群。这个压缩包包含了一系列文本文件和辅助图片,旨在帮助用户深入理解Linux系统的基本操作和...
win10安装twincat3文件下载,亲测不死机TC31-Full-Setup.3.1.4022.30
而“doc”文件则可能是文档,包含有关如何使用该工具的说明、技术细节、操作步骤或开发者笔记。文档可能详细解释了如何输入浮点数,如何解读转换后的16进制结果,以及可能遇到的问题和解决方法。 总结一下,"Hex-...
2. **多格式支持**:除了基本的 Markdown 语法,Typora 还支持 MathJax(用于数学公式),Mermaid(流程图和序列图),以及 PlantUML(UML 图)等扩展格式。 3. **代码高亮**:对于编程爱好者,Typora 支持多种编程...
标签"HFSS学习笔记"表明这个文件可能是学习HFSS软件过程中的一部分,可能包含了一些教程或实践案例,适合初学者或有一定基础的学习者参考。学习HFSS不仅需要掌握基本的操作界面,如几何建模、网格划分、求解器设置、...
"ControlCenter-3.17.42.0-Mechrevo" 是一款由机械革命(Mechrevo)公司推出的电脑控制中心软件,版本号为3.17.42.0。这款软件专为Mechrevo品牌的电脑设计,旨在提供一个集中的平台,让用户能够方便地管理和调整他们的...