文章目录
- 一、流程控制--if语句
-
- 1、单分支if条件语句
- 2、双分支if条件语句
- 3、多分支if条件语句
- 二、流程控制--case语句
-
- 1、定义
- 2、命令格式
- 三、流程控制for循环
-
- 1、语法一
- 2、语法二
- 四、流程控制while循环
-
- 1、while循环
- 2、until循环
一、流程控制–if语句 1、单分支if条件语句
if [ 条件判断式 ];
then
程序
fi
或者
if [ 条件判断式 ]
then
程序
fi
示例代码: 判断分区使用率
#!/bin/bashrate=$(df -h |grep /dev/vda1 | awk '{print $5}' | cut -d "%" -f1)if [ $rate -ge 80 ]
then
echo "Waning it is fulling"
fi
2、双分支if条件语句
if [ 条件判断式 ]
then
条件成立时,执行的程序
else
条件不成立时,执行的另一个程序
fi
示例1:备份脚本
#!/bin/bash
# 同步时间
ntpdate asia.pool.ntp.org &>/dev/null
date=$(date +%y%m%d)
size=$(du -sh /var/lib/jenkins)
if [ -d /var/lib/jenkins ]
then
echo "Date : $date" > /data/ylxtest/logs/jenkins_info.txt
echo "Data size : $size" >> /data/ylxtest/logs/jenkins_info.txt
cd /data/ylxtest/logs
tar -zcf etc_$date.tar.gz /etc jenkins_info.txt &>/dev/null
rm -rf /data/ylxtest/logs/jenkins_info.txt
else
mkdir -r /data/ylxtest/logs
echo "Date : $date" > /data/ylxtest/logs/jenkins_info.txt
echo "Data size : $size" >> /data/ylxtest/logs/jenkins_info.txt
cd /data/ylxtest/logs
tar -zcf etc_$date.tar.gz /etc jenkins_info.txt &>/dev/null
rm -rf /data/ylxtest/jenkins_info.txt
fi
示例2:判断apache是否启动
#!/bin/bash
#使用nmap命令扫描服务器,并截取apache服务的状态,赋予变量port
port=$(nmap -sT 127.0.0.0 | grep tcp | grep http | awk '{print $2}')
if [ "$port" == "open" ]
then
echo "$(data) httpd start"&>/dev/start.log
else
/etc/rc.d/init.d/httpd start &> /dev/null
echo "$(data) restart httpd"&>> /dev/error.log
fi
3、多分支if条件语句
if [ 条件判断式1 ]
then
当条件判断式1成立时,执行程序1
elif [ 条件判断式2 ]
then
当条件判断式2成立时,执行程序2
…………………………
else
当所有条件都不成立时,最后执行此程序
fi
示例:判断键盘输入的内容
#!/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" ]
# 判断file的值是否存在
then
echo "Your input is not a file!"
exit 2
elif [ -f "$file" ]
# 判断file是否为普通文件
then
echo "$file is a regulare file!"
elif [ -d "$file" ]
# 判断file的值是否为目录文件
then
echo "$file is a directory!"
else
echo "$file is an other file!"
fi
二、流程控制–case语句 1、定义 case语句和if…elif…else语句一样都是多分支条件语句,不过和if多分支条件语句不同的是,case语句只能判断一种条件关系,而if语句可以判断多种条件关系。
2、命令格式
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;
;
"值2")
如果变量的值等于值2,则执行程序2
;
;
…………省略其他分支
*)
如果变量的值都不是以上的值,则执行此程序
;
;
esac
【Linux|shell编程--四种流程控制语句】示例:
#!/bin/bashread -p "Please choose yes/no : " -t 30 cho
# 接收键盘的输入,并赋予变量cho,
case $cho in
"yes")
echo "Your choose is yes"
;
;
"no")
echo "Your choose is no"
;
;
*)
echo "Your choose is error!"
;
;
esac
-t: 等待键盘输入的时间
三、流程控制for循环 1、语法一
for 变量 in 值1 值2 值3...
# 后面有几个值就循环几次
do
程序
done
示例1:
#!/bin/bashfor time in morning noon afternoon evening
do
echo "This time is $time!"
done
示例2:批量解压缩脚本
cd /data/test
ls *.tar.gz > ls.log# 把当前目录下tar.gz包名称写入到ls.log文件中
for i in $(cat ls.log)
do
tar -zxf $i>/dev/logs
done
rm -rf /dev/logs
2、语法二
for ((初始值;
循环控制条件;
变量变化))
do
程序
done
示例:1~100之和
#!/bin/bashs=0
for (( i=1;
i<=100;
i=i+1 ))
do
s=$(( $s+$i))
done
echo $s
示例2:批量添加用户
#!/bin/bashread -p "Please input user name:" -t 30 name
read -p "Please input the number of users:" -t 30 num
read -p "Please input the password of users:" -t 30 passwdif [ ! -z "$name" -a ! -z "$num" -a ! -z "$passwd" ]
# -a: 为真
then
y=$(echo $num | sed 's/[0-9]//g')
if [ -z "$y" ]
then
for((i=1;
i<=$num;
i+=1))
do
useradd $name$i &>/data/ylxtest/useradd.log
echo $passwd | passwd --stdin "$name$i" &>/data/ylxtest/useradd.log
done
fi
fi
四、流程控制while循环 1、while循环 while循环是不定循环,也称作条件循环。只要条件判断式成立,循环就会一直继续,直到条件判断不成立,循环才会停止。
示例:从1加到100
#!/bin/bashs=0
i=1while [ $i -le 100 ]
do
s=$(( $s+$i ))
i=$(( $i+1 ))
done
echo "The sum is : $s"
2、until循环 until循环和while循环相反,until循环时只要条件判断式不成立则进行循环,并执行村换程序。一旦循环条件成立,则终止循环。
示例:从1加到100
#!/bin/bashs=0
i=1until [ $i -gt 100 ]
do
s=$(( $s+$i ))
i=$(( $i+1 ))
done
echo "The sum is : $s"
推荐阅读
- Linux基础使用|Linux 运行和控制 shell 脚本
- 配置|Docker Desktop上启用k8s流程
- redis|docker-compose、k8s部署单机版redis
- Git|Git入门教程(二、安装Git)
- 翻车!误删/usr/lib/引发的血案,从棺材边成功抢救的过程分享。
- 容器技术(docker|容器 & k8s——Kubernetes详解 & 集群部署 & Metrics-Server)
- Linux|容器 & k8s——kubernetes kubectl工具使用
- Linux|Linux tcp客户端断开重连,【干货】TCP连接的状态详解以及故障排查
- linux|linux tcp自动重连,TCP连接的状态详解以及故障排查