首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

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

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 $$i

echo '123456'|passwd --stdin $$i &>/dev/null

i=$(($i+1))

done

#!/bin/bash

PREFIX="user";i=1

while [ $i -lt 5 ]

do

userdel -r $$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 "

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

[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"

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180810G0F7HK00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券