本节所讲内容:

      case  : 流控制语句

      循环语句for…done语句

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

      循环语句嵌套

 

case : 流控制语句

适用于多分支

case        变量值            in

              模式1)

                     命令序列1

                     ;;

              模式2)

                     命令序列2

                     ;;

                     ……

                     *)  

                     默认命令序列

 esac

 

 

执行流程:

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

 

例:做一个选择功能项的菜单

[root@localhost ~]# vimcase.sh

#!/bin/bash

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

echo "Please selectyour option."

echo "1 Copy"

echo "2 Delete"

echo "3 Backup"

echo "4 Exit"

read option

case $option in

        1)

        echo "your selection is Copy"

        ;;

        2)

        echo "your selection isDelete"

        ;;

        3)

        echo "your selection isBackup"

        ;;

        4)

        echo "quit!"

        ;;

        *)                      #参数*,匹配所有参数

        echo "invailde selection"

        ;;

esac

 

执行结果

 

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

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

Please select youroption.

1 Copy

2 Delete

3 Backup

4 Exit

1

your selection is Copy

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

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

Please select youroption.

1 Copy

2 Delete

3 Backup

4 Exit

4

quit!

 

循环语句for…done语句

格式:

for 变量 in 名字表

do

命令列表

done

 

 

批量添加用户

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

 

[root@localhost ~]# vimname.txt

rm1

rm2

mk1

mk2

创建脚本文件

[root@localhost ~]# 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@localhost ~]# chmodu+x for.sh

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

[root@localhost ~]# tail-4 /etc/passwd

rm1:x:1001:1001::/home/rm1:/bin/bash

rm2:x:1002:1002::/home/rm2:/bin/bash

mk1:x:1003:1003::/home/mk1:/bin/bash

mk2:x:1004:1004::/home/mk2:/bin/bash

 

While循环语句

格式:

while 条件

do

命令

done

 

注意:

避免陷入死循环

While  true

While  false

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

[root@localhost ~]# vimsquare.sh

#!/bin/bash

num=1

        while [ $num -le 10 ]

        do

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

                echo $square

        let num++

        done

 

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

1

4

9

16

25

36

49

64

81

100

 

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

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

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

 

使用方法:

语法:

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

特点:

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

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

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

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

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

例:

依次输出小于100的2的幂值,2 4 8 16 32 64

[root@localhost test]#vim \(\(\)\).sh

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@localhost test]#chmod u+x \(\(\)\).sh

输出结果:

[root@localhost 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 isfinished

 

循环语句嵌套:

#!/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@localhost test]#vim sanjao.sh

#!/bin/sh

read -p "PleaseEnter the line number:" Line

read -p "PleaseEnter the char 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

 

例2

     *

***

*****

 

等差数列

分析:

1、外层控制输出几行

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

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

 

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

# 指定每一行输出的空格数。 第一行需要输出2个空格,第二行需要输出1个,第三行输出0个空格。  得出结论,空格数等于: 总行数Line-当前行号

 

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

#第一行一个*,第二行两个*,第三个5个*。 每行的*数等于:当前行号x2-1

 

#!/bin/sh

read -p "PleaseEnter a number:" 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

 

 

 

学习过程中如果问题,请留言。更多内容请加:

学神IT-linux讲师-RM老师QQ:2805537762
学神IT-戚老师QQ:3341251313
学神IT-旭斌QQ:372469347
学神IT教育RHEL7交流群:468845589