shell编程 之case 语句与循环语句

shell编程 之case 语句与循环语句

1. 使用case分支语句


case 变量值 in

模式1)
	命令序列1
	;;
模式2)
	命令序列2
	;;
模式3)
	命令序列3
	;;
模式4)
	命令序列4
	;;
	......
模式*)
	命令序列5
esac

案例

分数选择


[root@localhost data]# vim test.sh 
#!/bin/bash
read -p "请输入一个数字" number
case $number in
8[4-9]|9[0-9]|100)
        echo "优秀"
;;
7[0-9]|8[0-4])
        echo "良"
;;
6[0-9])
        echo "合格"
;;
*)
        echo "不合格"
esac

验证效果
[root@localhost data]# sh test.sh 
请输入一个数字45
不合格
[root@localhost data]# sh test.sh 
请输入一个数字78
良
[root@localhost data]# sh test.sh 
请输入一个数字98
优秀
[root@localhost data]# 


2. 使用for循环语句

格式

for 变量名 in  取值列表
do 
  命令序列
done

案例一:一次添加多个用户

[root@localhost opt]# vim user.txt
zhangsan
lisi
wangwu

[root@localhost opt]# cd /opt/data
[root@localhost data]# vim for.sh 

#!/bin/bash


List=$(cat /opt/user.txt)
#读取从文件user.txt中读取用户的名称

for user in $List
do
        useradd $user
        #添加用户
        echo "1234" | passwd --stdin $user
        #为用户设置密码1234
        echo "创建${user}成功" 

done

              

执行情况

[root@localhost data]# sh for.sh 
更改用户 zhangsan 的密码 。
passwd:所有的身份验证令牌已经成功更新。
创建zhangsan成功
更改用户 lisi 的密码 。
passwd:所有的身份验证令牌已经成功更新。
创建lisi成功
更改用户 wangwu 的密码 。
passwd:所有的身份验证令牌已经成功更新。
创建wangwu成功
[root@localhost data]# cd /home
[root@localhost home]# ll
总用量 4
drwx------.  3 lisi     lisi       78 7月  17 23:06 lisi
drwx------. 15 ttyy     ttyy     4096 7月  16 16:30 ttyy
drwx------.  3 wangwu   wangwu     78 7月  17 23:06 wangwu
drwx------.  3 zhangsan zhangsan   78 7月  17 23:06 zhangsan
[root@localhost home]# vim for.sh 
[root@localhost home]# cd /opt/data/
[root@localhost data]# vim for.sh 

++ 自身 变量加+1 --自身变量 -1 let可以单独用
+=5 自身变量+5
-= 自身变量-5
*= 自身变量*5
/= 自身变量/5
%= 自身变量%5

案例二:主机网络测试

[root@localhost opt]# vim ping.txt 
192.168.100.1
192.168.10.1
192.168.100.200
192.168.20.1

[root@localhost data]# vim for-ping.sh 
#!/bin/bash
HLIST=$(cat /opt/ping.txt)
for IP in $HLIST
do
        ping -c 3 -i 0.2 -W 3 $IP &> /dev/null
        if [ $? -eq 0 ]
        then
                echo "Host is up"
        else
                echo "Host is down"
        fi
done

[root@localhost data]# sh for-ping.sh 
Host is up
Host is down
Host is up
Host is down



案例三: 九九方程式


[root@localhost data]# vim jjfcs.sh  
#!/bin/bash

for (( i=1;i<10;i++))
  do
     for (( j=1; j<=i; j++))
        do
         echo -ne "${j}*${i}=$(( j*i ))\t";
        done
   echo " "
done


[root@localhost data]# sh jjfcs.sh 
1*1=1	 
1*2=2	2*2=4	 
1*3=3	2*3=6	3*3=9	 
1*4=4	2*4=8	3*4=12	4*4=16	 
1*5=5	2*5=10	3*5=15	4*5=20	5*5=25	 
1*6=6	2*6=12	3*6=18	4*6=24	5*6=30	6*6=36	 
1*7=7	2*7=14	3*7=21	4*7=28	5*7=35	6*7=42	7*7=49	 
1*8=8	2*8=16	3*8=24	4*8=32	5*8=40	6*8=48	7*8=56	8*8=64	 
1*9=9	2*9=18	3*9=27	4*9=36	5*9=45	6*9=54	7*9=63	8*9=72	9*9=81	 
       

3. 使用while循环语句

格式

while 条件测试操作
do
  命令序列
done

案例一:一次性创建多个用户


[root@localhost data]# vim while.sh 

#!/bin/bash
i=0
list=$( cat /opt/usr.txt)
while [ $i -le 3 ]
do
        useradd stu$i
        echo "1234" | passwd --stdin stu$i
        echo "创建stu$i成功"
        let i++
done


**

案例二:输出1-100不能被3整除的数值

**

方法一

扫描二维码关注公众号,回复: 11521566 查看本文章
[root@localhost home]# vim san.sh
#!/bin/bash
i=1
while [ $i -le 100 ]
do
        if [ $[$i % 3] -ne 0 ]
        then
                echo "$i"
fi
        let i++
done


方法二

在这里插入图片描述

输出1-100 的偶数的数值

continue 是跳过本次循环语句,直接执行下一个循环。
break 退出当前循环语句。
在这里插入图片描述

验证

[root@localhost home]# sh san.sh 
1
2
4
5
7
8
10
11
13
14
16
17
19
20
22
23
25
26
28
29
31
32
34
35
37
38
40
41
43
44
46
47
49
50
52
53
55
56
58
59
61
62
64
65
67
68
70
71
73
74
76
77
79
80
82
83
85
86
88
89
91
92
94
95
97
98
100

案例三:直角三角形


[root@localhost home]# vim zhijiao.sh
#!/bin/bash
i=1
while [ $i -le 5 ]
do
        for (( j=1;j<=i;j++ ))
do
        echo -ne "*"
done
        echo " "
let i++
done

[root@localhost home]# sh zhijiao.sh 
* 
** 
*** 
**** 
***** 


案例四:等腰三角形

[root@localhost data]# vim dysj.sh 
#!/bin/bash

for (( i=0; i<=4; i++ ))
        do
                for(( k=5;k>=2*i-1;k--))
                do
                        echo -ne " "
                done
                for (( j=0; j<2*i+1; j++ ))
                do
                       echo -ne " *"     //*号打印格式注意,在这里的-ne是不换行打印
                done

        echo    " "  //这里的空格时换行的意思
done

验证

[root@localhost data]# sh dysj.sh 
        * 
      * * * 
    * * * * * 
  * * * * * * * 
 * * * * * * * * * 

方法二:

#!/bin/bash

for (( i=0; i<=4; i++ ))
        do
                for(( k=4;k>=i;k--))
                do
                        echo -n " "  //-n 是不换行输出
                done
                for (( j=0; j<=i; j++ ))
                do
                       echo -n "* "
                done

        echo    " "
done

验证

 [root@localhost data]# sh dysj-2.sh 
     *  
    * *  
   * * *  
  * * * *  
 * * * * *  


案例五:菱形打印

[root@localhost shell]# vim linxin.sh
#!/bin/bash

for (( i=0; i<=4; i++ ))
        do
                for(( k=4;k>=i;k--))
                do
                        echo -n " "
                done
                for (( j=0; j<=i; j++ ))
                do
                       echo -n "* "
                done
echo " "
done

for (( a=0;a<4;a++))
do
     for (( b=0;b<=a;b++))
        do
          echo -n " "
         done
      for (( c=4;c>a;c--))
          do
            echo -n " *"
           done
        echo    " "
done

------验证--------
[root@localhost shell]# sh linxin.sh 
     *  
    * *  
   * * *  
  * * * *  
 * * * * *  
  * * * * 
   * * * 
    * * 
     * 



3. 小结

-n : 不换行打印

-ne :不换行打印

-t : 制表位

continue 是跳过本次循环语句,直接执行下一个循环。

break 退出当前循环语句。

++ 自身 变量加+1 --自身变量 -1 let可以单独用

+=5 自身变量+5

-= 自身变量-5

*= 自身变量*5

/= 自身变量/5

%= 自身变量%5

-a 等于 && ,但是-a 适用于长条语句中

猜你喜欢

转载自blog.csdn.net/weixin_42099301/article/details/107405127
今日推荐