第三章Shell for、while及case
For语句语法如下
for 变量名 in 取值列表
do
命令序列
Done
案例,根据姓名列表创建用户
[root@localhost ~]# vim /root/users.txt
jerry
tom
xiaoming
[root@localhost ~]# vim shelltest/usersadd.sh
#!/bin/bash
ULIST=$(cat /root/users.txt)
for UNAME in $ULIST
do
useradd $UNAME
echo "123456"| passwd --stdin$UNAME
done
使用while循环语句
While循环语句语法结构
while 条件测试操作
do
命令序列
done
案例
批量添加规律编号用户
[root@localhost ~]# vimshelltest/useraddwhile.sh
#!/bin/bash
USERS="work"
i=1
while [ $i -le 5 ]
do
useradd ${USERS}$i
echo "123456"|passwd --stdin${USERS}$i &> /dev/null
let i++
done
"shelltest/useraddwhile.sh" [新] 9L, 139C 已写入
[root@localhost ~]# shshelltest/useraddwhile.sh
[root@localhost ~]# tail -5 /etc/passwd
work1:x:500:500::/home/work1:/bin/bash
work2:x:501:501::/home/work2:/bin/bash
work3:x:502:502::/home/work3:/bin/bash
work4:x:503:503::/home/work4:/bin/bash
work5:x:504:504::/home/work5:/bin/bash
case分支语句
case语句主要适用以下情况:某个变量存在多种取值,需要对其中的每一种取值分别进行不同的命令序列。
语法结构如下
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
*)
默认命令序列
esac
使用case分支语句时,要注意以下几点
case行尾必须为单词“in”每一模式必须以右括号“)”结束
双分号“;;”表示命令序列的结束
模式字符串中,可以用方括号表示一个连续的范围,例如“[0-9]”也可用”|”表示如“A|B”
最后的“*)”表示默认模式,其中的*相当于通配符。
案例
检查用户输入的字符类型
[root@localhost ~]# vimshelltest/typeselect.sh
#!/bin/bash
read -p " 请输入一个字符,并按Enther确认:" C
case $C in
[0-9])
echo "您输入的是数字$C"
;;
[a-z]|[A-Z])
echo "您输入的是字母$C"
;;
*)
echo "您输入的是空格、功能键或其它控制字符$C"
esac
"shelltest/typeselect.sh" 12L, 253C已写入
[root@localhost ~]# shshelltest/typeselect.sh
请输入一个字符,并按Enther确认:5
您输入的是数字5
案例二编写系统服务脚本
[root@localhost ~]# vim shelltest/myprog
#!/bin/bash
case "$1" in
start)
echo -n "正在启动sleep服务..."
if `sleep 5` ; then
echo "OK"
fi
;;
stop)
echo -n "正在停止sleep服务..."
pkill "sleep"&>/dev/null
echo "OK"
;;
status)
if pgrep "sleep"&> /dev/null ;then
echo "sleep服务以经启动"
else
echo "sleep服务以经停止"
fi
;;
restart)
$0 stop
$0 start
;;
*)
echo "用法:$0{start|stop|status|restart}"
esac
~
~
~
[root@localhost ~]# ./shelltest/myprogrestart
正在停止sleep服务...OK
正在启动sleep服务...OK
本文出自 “瘾” 博客,谢绝转载!