case语句 while循环 for循环
循环控制
命令 | 说明 |
---|---|
continue | 表示跳出当前循环 并且重新执行循环 |
break | 表示跳出当前循环 执行下一步 |
exit | 退出当前脚本 |
return n | 函数里的返回值 判断函数是否执行成功 如果成功 返回值为0 反之 返回值为n |
case语句
#!/bin/sh
case $1 in
y)
echo yes
;;
n)
echo no
;;
a)
echo and
;;
q)
exit 1
;;
*)
echo "USAGE: `basename $0` [y|n|a|q] "
esac
case语法
案例: 使用case语句加菜单的方式
查看系统磁盘 d df -h
系统内存 f free -h
系统负载 u uptime
登录的用户 w w
显示帮助 h caidan
退出 q exit
menu(){
cat<<EOF
菜单
---- 1.查看硬盘使用 ----
---- 2.查看系统内存 ----
---- 3.查看当前用户 ----
---- 4. 显示菜单 ----
---- 5. 退出 ----
EOF
}
menu
while true
do
read -p "请输入序号来执行对应: " ppp
case $ppp in
1)
df -h
;;
2)
free
;;
3)
whoami
;;
4)
menu
;;
5)
exit
;;
*)
echo "请输入对应序号 !"
;;
esac
done
案例:
case批量删除用户
要删除用户的前缀
要删除几个用户
案例: Nginx 启动脚本
. /etc/init.d/function
start(){
#/etc/init.d/nginx
systemctl start nginx
if [ -f /var/run/nginx.pid ]
then
action "nginx start is" true
else
action "nginx start is" false
fi
}
stop(){
systemctl stop nginx
if [ -f /var/run/nginx.pid ]
then
action "nginx start is" false
else
action "nginx start is" true
fi
}
reload(){
systemctl reload nginx
if [ -f /var/run/nginx.pid ]
then
action "nginx start is" true
else
action "nginx start is" false
fi
}
status(){
if [ -f /var/run/nginx.pid ]
then
echo -e "nginx is \033[32m running... \033[0m"
else
echo -e "nginx is \033[31m death... \033[0m"
fi
}
restart(){
systemctl restart nginx
if [ -f /var/run/nginx.pid ]
then
action "nginx start is" true
else
action "nginx start is" false
fi
}
case $1 in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
restart
;;
status)
status
;;
*)
echo "语法: sh `basename $0` [start|stop|reload|staus|restart]"
esac
while 循环
if语句
单分支 一个条件 一个结果
if [ 你有钱 ] if [ $? -eq 0 ]
then then
我就嫁给你 echo "ok"
fi fi
双分支 一个条件 两个结果
if [ 你有钱 ] if [ $? -eq 0 ]
then then
我就嫁给你 echo "ok"
else else
不鸟你 echo "no"
fi fi
多分支 多个条件 多个结果
if [ 你有钱 ]
then
我就嫁给你
elif [ 你有房 ]
then
我也嫁给你
elif [ 你有车 ]
then
我也可以考虑
else
不鸟你
fi
for循环
语法格式:
for 变量名 in 取值列表 {数字的序列 字母的序列 字符串 命令}
do
done
案例 :考试题
检测10.0.0/24在线IP 并且追加到一个文件内
#!/bin/sh
for i in `seq 254`
do
IP=10.0.0.$i
{
ping -c 1 -W 1 $IP &>/dev/null
if [ $? -eq 0 ];then
echo "Host $IP is ok..."|tee -a 2.txt
fi
} &
done
案例:
你们公司有多少人,答500个左右,你们划分了多少个子网。
一个C 1-254 两个=508个地址
公司: 服务器地址 打印机 门禁 网关 每个人的PC 手机 平板 3个IP AP AC控制器 监控系统
考试题:计算1到100相加 用for循环
for i in `seq 100`;do sum=$[$sum+$i];done;echo $sum
#!/bin/sh
i=0
while [ $i -le 100 ]
do
sum=$[$sum+$i]
let i++
done
echo $sum
案例: 使用for循环创建用户
file 1.txt 密码统一为123
oldboy
oldguo
oldbg
olddog
echo 123|passwd --stdin 用户名
#!/bin/sh
for i in `cat 2.txt`
do
useradd $i &>/dev/null
[ $? -eq 0 ] && echo "Create $i is ok"
echo 123|passwd --stdin $i &>/dev/null
[ $? -eq 0 ] && echo "Create $i passwd is ok"
done