Linux Shell 006-流程控制语句
2023-12-25 09:43:37
Linux Shell 006-流程控制语句
本节关键字:Linux、Bash Shell、流程控制语句、case语句
相关指令:if、if…else、if…elif…else、case、read、ping、yum、uname、
if语句语法结构
if结构(F表示false T表示true)
if [ confition ];then
command
command
fi
if test 条件;then
命令
fi
if [[ confition ]];then
command
command
fi
if…else结构
if [ condition ];then
command1
else
command2
fi
[ 条件 ] && command1 || command2
if…elif…else结构
if [ condition1 ];then
command1
elif [ condition2 ];then
command2
else
command3
fi
层层嵌套结构
if [ condition ];then
command1
if [ condition2 ];tnen
conmmand2
fi
else
if [ condition3 ];then
command3
elif [ condition4 ];then
command4
else
command5
fi
fi
if…else应用示例
题目:让用户自己输入字符串,如果用户输入的是hello,请打印world,否则打印“请输入hello”
#!/bin/env bash
read -p '请输入一个字符串:' str
if [ "$str" = 'hello' ];then
echo 'world'
else
echo '请输入hello!'
fi
case语句
case语句语法结构
说明:pattern表示需要匹配的模式,esac表示case语句结束
case var in # 定义变量;var代表是变量名
pattern 1) # 模式1;用 | 分割多个模式,相当于or
command1 # 需要执行的语句
;; # 两个分号代表命令结束
pattern 2)
command2
;;
pattern 3)
command3
;;
*) # default,不满足以上模式,默认执行*)下面的语句
command4
;;
esac
应用案例
判断两天主机是否ping通
#!/bin/env bash
#该脚本用于判断当前主机是否和远程主机互通
#交互式定义一个变量,让用户自己决定去ping哪个主机
read -p "请输入要ping的主机IP:" ip
#使用ping程序判断主机是否互通
ping -c1 $ip &> /dev/null
if [ $? -eq 0 ];then
echo "当前主机和远程主机$ip是互通的"
else
echo "挡墙主机和远程主机$ip是不通的"
fi
判断一个进程是否存在
#!/bin/env bash
#该脚本用于判断指定进程(httpd)是否存在
pgrep httpd &> /dev/null
if [ $? -ne 0 ];then
echo "当前httpd进程不存在"
else
echo "当前httpd进程存在"
fi
# 或者
test $? -eq 0 && echo "进程存在" || echo "进程不存在"
命令补充
pgrep:以名称为依据从运行进程队列中查找进程,并显示查找到的进程id
常用选项
选项 | 说明 |
---|---|
-o | 仅显示找到的最小(起始)进程号 |
-n | 仅显示找到的最大(结束)进程号 |
-l | 显示进程名称 |
-p | 指定父进程号;pgrep -p 4764 查看父进程下的子进程id |
-g | 指定进程组 |
-t | 指定开启进程的终端 |
-u | 指定进程的有效用户ID |
判断门户网站是否能够正常访问
思路:
(1)可以判断进程是否存在,用/etc/init.d/httpd status判断状态等方法
(2)最好的方法就是直接去访问一下,通过访问成功和失败的返回值判断,Linux环境,wget curl elinks -dump
#!/bin/env bash
# 判断门户网站是否能够正常访问
web_server=10.1.1.2 或者 www.itcast.cn
wget -P /shell/ $web_server &. /etc/null
[ $? -eq 0 ] && echo "网站服务ok" && rm -f /shell/index.* || echo "网站服务错误"
输入一个用户,用脚本判断该用户是否存在
#!/bin/env bash
read -p "请输入一个用户名:" user_name
id $user_name &> /dev/null
#grep $username /etc/passwd &> /dev/null
if [ $? = 0 ];then
echo "该用户存在"
else
echo "该用户不存在"
fi
脚本判断内核版本
题目:判断当前内核主版本是否为2,且次版本是否大于等于6;如果都满足则输出当前内核版本
思路:
- 先查看内核的版本号 uname -r
- 先将内核的版本号保存到一个变量里,然后再根据需求截取出该变量的一部分:主版本和次版本
- 根据需求进步判断
#!/bin/bash
kernel=`uname -r`
var1=`echo $kernel|cut -d. -f1`
var2=`echo $kernel|cut -d. -f2`
test $var1 -eq 2 -a $var2 -ge 6 && echo $kernel || echo "当前内核版本不符合要求"
或者
[ $var1 -eq 2 -a $var2 -ge 6 ] && echo $kernel || echo "当前内核版本不符合要求"
或者
[[ $var1 -eq 2 && $var2 -ge 6 ]] && echo $kernel || echo "当前内核版本不符合要求"
或者
#!/bin/bash
kernel=`uname -r`
test ${kernel:0:1} -eq 2 -a ${kernel:2:1} -ge 6 && echo $kernel || echo '不符合要求'
其他命令参考:
uname -r|grep ^2.[6-9] || echo '不符合要求'
传不同值做不同事
题目:当给程序传入start、stop、restart三个不同参数时分别执行相应命令
#!/bin/env bash
case $1 in
start|S)
service apache start &>/dev/null && echo "apache 启动成功"
;;
stop|T)
service apache stop &>/dev/null && echo "apache 停止成功"
;;
restart|R)
service apache restart &>/dev/null && echo "apache 重启完毕"
;;
*)
echo "请输入要做的事情..."
;;
esac
根据用户需求选择做事
题目:脚本提示让用户输入需要管理的服务名,然后提示用户需要对服务做什么操作,如启动,关闭等操作
#!/bin/env bash
read -p "请输入你要管理的服务名称(vsftpd):" service
case $service in
vsftpd|ftp)
read -p "请选择你需要做的事情(restart|stop):" action
case $action in
stop|S)
service vsftpd stop &>/dev/null && echo "该$serivce服务已经停止成功"
;;
start)
service vsftpd start &>/dev/null && echo "该$serivce服务已经成功启动"
;;
esac
;;
httpd|apache)
echo "apache hello world"
;;
*)
echo "请输入你要管理的服务名称(vsftpd)"
;;
esac
文章来源:https://blog.csdn.net/qq_45157350/article/details/135167534
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!