Shell笔记之三for、while及case

第三章Shell forwhilecase

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


本文出自 “瘾” 博客,谢绝转载!

你可能感兴趣的:(case,while,shell,for)