Shell脚本编程学习笔记(四)---- 条件判断与流程控制
本文已参与[新人创作礼]活动,一起开启掘金创作之路。
条件判断
if
单分支
if [ 理论分数越高 ];then
拿奖机率越大
fi
双分支
if [ 理论分数越高 ];then
拿奖机率越大
else
工地搬砖
fi
多分支
if [ 理论分数越高 ];then
拿奖机率越大
elif [ 如果实际操作越高 ];then
拿奖机率越大
elif [ 如果个人修养越高 ];then
拿奖机率越大
else
工地搬砖
fi
例如
安装 Nginx
vi yum_nginx.sh
#!/bin/bash
# Install Nginx
# CatGod007 2022-05-22
#检查网络是否通畅
ping -c4 www.baidu.com &>/dev/null
if [ $? -eq 1 ];then
echo "请检查网络..."
exit 1
fi
#检查是否有Nginx的yum仓库
yum_repo=$(yum repolist|grep nginx|wc -l)
if [ $yum_repo -eq 0 ];then
cat >/etc/yum.repos.d/nginx.repo <<-EOF
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/x86_64/
gpgcheck=0
enabled=1
EOF
yum makecache
elif [ $yum_repo -eq 1 ];then
yum install nginx -y &>/dev/null
Instal_nginx=$(rpm -q nginx|wc -l)
if [ $Instal_nginx -eq 1 ];then
echo "Nginx已经安装"
fi
Nginx_Status=$(systemctl status nginx|grep Active|awk '{print $1 $3}')
systemctl start nginx &>/dev/null
if [ $? -eq 0];then
echo "Nginx已经启动完毕"
echo "Nginx当前状态是:\033[32m $Nginx_Status \033[0m"
break
elif [ $? -eq 1];then
echo "Nginx启动失败 \033[31m $Nginx_Status \033[0m"
pkill -9 httpd &>/dev/null
pkill -9 nginx &>/dev/null
systemctl start nginx
if [ $? -eq 0 ];then
echo -e "Nginx重启成功"
Nginx_Status=$(systemctl status nginx|grep Active|awk '{print $1 $2 $3}')
echo -e "Nginx当前状态 \033[32m $Nginx_Status \033[0m"
fi
else
echo -e "Nginx再次启动失败"
echo -e "Nginx当前状态 $Nginx_Status"
fi
else
echo "错误超出我的认知!请手动检查一下"
fi
此案例暂未完全成功,但其中精华值得观看。
流程控制
case
操作语法如下
case 变量 in
模式 1)
命令序列1;;
模式 2
命令序列2;;
模式 3
命令序列3;;
*)
无匹配后命令序列
esac
例如
#!/bin/bash
case $1 in
redhat)
echo "centos"
;;
centos)
echo "redhat"
;;
*)
echo "USAGE:'basename $0' [readhat|centos]"
exit 1
esac
案例1
安装php
#!/bin/bash
clear
echo "###################"
echo "---1.install php5.5####"
echo "---2.install php5.6####"
echo "---3.install php7.0####"
echo "###################"
read -p "请输入你要安装的php版本数字编号:" num
while ture
do
case $num in
1)
echo "php5.5 is done..."
break
;;
2)
echo "php5.6 is done..."
break
;;
3)
echo "php7.0 is done..."
break
;;
*)
read -p "请输入你要安装的php版本数字编号:" num
;;
esac
done
案例2
系统工具箱
vi commint.sh
#!/usr/bin/bash
caidan(){
cat <<-EOF
=======================
h 显示命令帮助
f 显示磁盘分区
d 显示磁盘挂载
m 查看内存使用
u 查看系统负载
a 返回到菜单
q 退出程序
======================
EOF
}
while true
do
read -p "请输入你想查看系统状态对应码[h/f/d/m/u/q]: " sys
case $sys in
a)
clear
echo "返回菜单中..."
caidan #运用了函数
;;
h)
clear
echo "你想查看的命令帮助信息如下:"
help|less
;;
f)
clear
echo "你想查看的磁盘分区信息如下:"
lsblk
;;
d)
clear
echo "你想查看的磁盘挂载信息如下:"
df -h
;;
m)
clear
echo "你想查看的内存使用信息如下:"
free -m
;;
u)
clear
echo "你想查看的系统负载信息如下:"
uptime
;;
q)
echo "正在退出中..."
break
;;
*)
echo "Error!!!"
exit 1
esac
done
sh commint.sh
祝大家儿童节快乐!
感谢大家,点赞,收藏,关注,评论!
浙公网安备 33010602011771号