前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Shell笔记3:循环结构,服务脚本设计,函数及中断控制

Shell笔记3:循环结构,服务脚本设计,函数及中断控制

作者头像
陪你听风
发布2021-03-31 23:32:09
4240
发布2021-03-31 23:32:09
举报
文章被收录于专栏:陪你听风陪你听风

1.循环结构 a.for循环 语法结构及特点 for 变量名 in 值列表 do 命令序列 done

例子:批量添加用户账号无规律 cat useradd.sh #!/bin/bash ULIST=$(cat /root/shdir/userlist.txt) for UNAME in $ULIST do useradd $UNAME echo '123456' | passwd --stdin $UNAME done

cat userdel.sh #!/bin/bash ULIST=$(cat /root/shdir/userlist.txt) for UNAME in $ULIST do userdel -r $UNAME done

c语言风格的for循环 for((初值;条件;步长)) do 命令序列 done

for((i=1;i<5;i++)) do echo $i done

for循环结构批量检测主机的存活状态 cat checkping.sh #!/bin/bash IPADDR=$(cat /root/shdir/ipaddr.txt) for IP in $IPADDR do ping -c 3 -w 5 -i 0.2 $IP &>/dev/null if [ $? -eq 0 ];then echo "$IP is up" else echo "$IP is down" fi done

b.while/until循环

while循环结构 while 条件 do 命令 done 例子批量添加用户 #!/bin/bash PREFIX="user";i=1 while [ $i -lt 3 ] do useradd ${PREFIX}$i echo '123456'|passwd --stdin ${PREFIX}$i &>/dev/null i=$(($i+1)) done

#!/bin/bash PREFIX="user";i=1 while [ $i -lt 5 ] do userdel -r ${PREFIX}$i let i++ done

until循环结构 until条件测试 do 命令 done 2.服务脚本设计 a.case分支结构 语法结构及特点 case 变量值 in 模式1) 命令1;; 模式2) 命令2;; 模式3) 命令3;; *) 默认命令序列 esac 例:判断用户输入类型 #!/bin/bash KEY="KEY" until [ $KEY == 'EXIT' ] do read -p "请输入一个字符:" KEY case "$KEY" in [a-z]|[A-Z]) echo "字母";; [0-9]) echo "数字";; *) echo "其他" esac done

b.编写服务脚本

系统服务控制 查看服务列表,自启状态 chkconfig --list 服务名 chkconfig 服务名 on|off 启动停止重启服务 service 服务名 start stop restart /etc/init.d/服务名 start stop restart

基于case结构识别控制参数 例子: #!/bin/bash case "$1" in start) echo "启动服务...";; stop) echo "关闭服务...";; restart) $0 stop $0 start ;; *) echo "用法:$0 start|stop|restart" exit 1 esac

c.自建系统服务 建立一个服务脚本 /etc/init.d/myprog 能够响应start stop restart status控制参数 采用sleep作为测试程序 将程序交给chkconfig工具管理,设置使用级别启动停止顺序服务说明

[root@kvm shdir]# cat myprog #!/bin/bash #chkconfig 2345 10 95 #description:A test service script for MyProg case "$1" in start) echo "启动服务..." sleep 86400 & ;; stop) echo "停止服务..." pkill -9 sleep ;; restart) $0 stop $0 start ;; status) pgrep -l sleep &>/dev/null && echo "运行中..."||echo "未运行..." ;;

*) echo "用法:$0 {start|stop|restart|status}" exit 1 esac

chkconfig --add myprog chkconfig --list myprog chkconfig myprog on 3.函数及中断控制 a.shell函数 函数定义 function 函数名{ 命令序列 } 或者 函数名() { 命令序列 }

函数的调用 函数名 值1 值2

示例: [root@kvm shdir]# function add { > echo $(($1+$2)) > } [root@kvm shdir]# add 1 2

[root@kvm shdir]# mkcd() { > mkdir $1 > cd $1 > } [root@kvm shdir]# mkcd /opt/xixi [root@kvm xixi]# pwd /opt/xixi

函数炸弹,能够快速耗尽资源 .(){.|.&};.

b.脚本中断示例 cat brkwhile.sh #!/bin/bash while read -p "请输入待累加的整数(0表示结束:):" x do [ $x -eq 0 ] && break SUM=$[SUM+x] done

echo "总和是:$SUM"

cat cntwhile.sh #!/bin/bash i=0 while [ $i -le 20 ] do let i++ [ $[i%6] -ne 0] && continue echo $[i*i] done

cat exit.sh #!/bin/bash if [ $# -ne 2 ];then echo "用法:$0 num1 num2" exit 10 fi expr $1 + $2

shift迁移位置参数 cat mysum.sh #!/bin/bash SUM=0 while [ $# -gt 0 ] do let SUM=SUM+$1 shift done echo "The SUM is :#SUM"

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年8月22日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档