SHELLcase流程控制和for、while循环语句的使用

本节所讲内容:

      case  : 流程控制语句

      循环语句for…done语句

      使用(()) 扩展shell中算数运算算使用方法

      循环语句嵌套

 

case : 流控制语句

适用于多分支

case        变量值           in

             模式1

                     命令序列1

                     ;;

              模式2

                     命令序列2

                     ;;

                     ……

                    *)  

                     默认命令序列

 esac

 

执行流程:

       首先使用“变量值”与模式1进行比较,若取值相同则执行模式1后的命令序列,直到遇见双分号“;;”后跳转至esac,表示分支结束;若与模式1不相匹配,则继续与模式2 进行比较,若取值相同则执行模式2 后的命令序列,直到遇见双分号“;;”后跳转至esac,表示结束分支,……依次类推,若找不到任何匹配的值,则执行默认模式“*)”后的命令序列,直到遇见esac后结束分支

[root@xuegod60 ~]# vimcase.sh

#!/bin/bash

echo"******************************************"

echo "                1) Copy                   "

echo "                2) Delete                 "

echo "                3) Backup                 "

echo "                4) Quit                   "

echo"******************************************"

 

read -p "PleaseInput your selection" op

case $op in

        1)

        echo "Your selection is Copy"

        ;;

        2)

        echo "Your selection isDelete"

        ;;

        3)

        echo "Your selection isBackup"

        ;;

        4)

        echo "Program is stopping!"

        ;;

        *)

        echo "Invaild selection!"

        ;;

esac

 

[root@xuegod60 ~]# chmod+x case.sh

[root@xuegod60 ~]#./case.sh

******************************************

                1) Copy

                2) Delete

                3) Backup

                4) Quit

******************************************

 

循环语句for…done语句

格式:

for 变量 in 名字表

do

命令列表

done

 

 

批量添加用户

先准备一个员工名称列表文件

[root@xuegod60 ~]# vimname.txt

swk

zbj

swj

txz

 

执行:

[root@xuegod60 ~]# vimfor.sh

#!/bin/bash

ULIST=$(cat/root/name.txt)

for UNAME in $ULIST

do

        useradd $UNAME

        echo "123456" | passwd--stdin $UNAME &> /dev/null

done

 

[root@xuegod60 ~]# chmod+x for.sh

[root@xuegod60 ~]#./for.sh

[root@xuegod60 ~]# tail/etc/passwd

avahi:x:70:70:AvahimDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin

postfix:x:89:89::/var/spool/postfix:/sbin/nologin

sshd:x:74:74:Privilege-separatedSSH:/var/empty/sshd:/sbin/nologin

ntp:x:38:38::/etc/ntp:/sbin/nologin

tcpdump:x:72:72::/:/sbin/nologin

rm:x:1000:1000:rm:/home/rm:/bin/bash

swk:x:1001:1001::/home/swk:/bin/bash

zbj:x:1002:1002::/home/zbj:/bin/bash

swj:x:1003:1003::/home/swj:/bin/bash

txz:x:1004:1004::/home/txz:/bin/bash

 

While循环语句

格式:

while 条件

do

命令

done

 

注意:

避免陷入死循环

While  true

While  false

 

求10以内的自然数的平方值。如: 1*1=1  2*2=4 3*3=9 。。。

[root@xuegod60 ~]# vimsquare.sh

#!/bin/bash

num=1

while   [ $num -lt 10 ]

do

        square=$(expr $num \* $num)

        echo $square

        let num++

done

 

[root@xuegod60 ~]# chmod+x square.sh

[root@xuegod60 ~]#./square.sh

1

4

9

16

25

36

49

64

81

 

没有开发基础,了解一下:

使用(()) 扩展shell中算数运的使用方法

使用 ”[] ”时候,必须保证运算符与算数之间有空格。四则运算也只能借助:expr命令完成。今天讲的双括号”(())”结构语句,就是对shell中算数及赋值运算的扩展。

使用方法:

语法:

((表达式1,表达式2…))

特点:

1、在双括号结构中,所有表达式可以像c语言一样,如:a++,b--等。 a=a+1

2、在双括号结构中,所有变量可以不加入:“$”符号前缀。

3、双括号可以进行逻辑运算,四则运算

4、双括号结构 扩展了for,while,if条件测试运算

5、支持多个表达式运算,各个表达式之间用逗号“,”分开

例:

依次输出小于100的2的幂值,1 2 4 8 1632 64

 

echo "The while loopexample."

echo

VAR1=1

while ((VAR1<100))

do

        echo "Value of the variable is :$VAR1"

        ((VAR1=VAR1*2))

done

echo

echo "The loopexecution is finished"

 

[root@xuegod60 test]# chmod +x\(\(\)\).sh

[root@xuegod60 test]#./\(\(\)\).sh

The while loop example.

 

Value of the variable is : 1

Value of the variable is : 2

Value of the variable is : 4

Value of the variable is : 8

Value of the variable is : 16

Value of the variable is : 32

Value of the variable is : 64

 

The loop execution is finished

 

循环语句嵌套:

#!/bin/bash

     for    变量1   in

             do

                     for    变量2   in

                           do

                                   命令2

                           done

              命令1

       done

例1:使用特殊符号打印三角形。要求整个程序要有交互,运行时可以自动输入打印的行数和用于描绘三角形的特殊符号。执行结果如下:

Please Enter the line number:5  

Please Enter the char number:* 

*

**

***

****

*****

[root@xuegod60 test]# vimsanjao.sh#!/bin/sh

read -p "Please Enter theline number:" Line

read -p "Please Enter thechar number:" char

a=1

while [ $a -le $Line ]

do

        b=1

        while [ $b -le $a ]

        do

                echo -n "$char"

                b=`expr $b + 1`

        done

        echo

        a=`expr $a + 1`

done

 

执行

[root@xuegod60 test]# ./sanjao.sh

Please Enter the line number:5

Please Enter the char number:*

*

**

***

****

*****

 

例2:

      *

     ***

    *****

 

 

分析:

1、外层控制输出几行

2、内层循环1:每行输出空格的个数

内层循环2:每行输出的*的个数

 

每行*个数:2n-1

 

每行空格个数:总行数-当前行号

 

#!/bin/sh

read -p "Please Enter anumber:" Line     #获取号行

  for ((i=1; i<=Line; i++))   #使用行号来控制一共循环的次数

  do

        for ((j=Line-i; j>0; j--));   # 指定每一行输出的空格数。第一行需要输出2个空格,第二行需要输出1个,第三行输出0个空格

。  得出结论,空格数等于: 总行数Line-当前行号

        do

                echo -n ' '

        done

        for ((h=1; h<=((2*i-1)); h++))    #第一行一个*,第二行两个*,第三个5个*。 每个*数等于: 当前行号x2-1

        do

                echo -n '*'    #输出内容时,不换行

        done

   echo

  done

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值