Bootstrap

Shell脚本学习(三)

Shell脚本学习(三)

1.case分支语句

1.1case语句的用法

case 变量值 in
模式1)
    命令序列
    ;;
模式2)
    命令序列
    ;;
……………………   //表示按照上面的模板来修改
*)
    默认序列
esac

1.2case语句的注意事项:

写case语句的时候,开头是case,模式处理完后,就要用esac来结束,一一对应,就和if和fi一样。然后,每个模式写完后都要有";;"英文字符来表示这个模式的结束。

2.case语句实例

要求:

1.在0-59分时,不及格

2.在60-74分时,及格

3.在75-84分时,良好

4.在85-100分时,优秀

5.其他区间我们认为输入不合法

vim chengjipanduan.sh
#!/bin/bash
read -p "请输入你的成绩:" score
case "$score" in
[0-9]|[1-5][0-9])
    echo "你的成绩不及格,别灰心,再试一次"
    ;;
6[0-9]|7[0-4])
    echo "你的成绩刚好及格,请继续努力"
    ;;
7[5-9]|8[0-4])
    echo "你的成绩为良好,还得继续努力"
    ;;
8[5-9]|9[0-9]|100)
    echo "你的成绩为优秀,还请努力学习,不要骄傲"
    ;;
*)
    echo "请输入正确的信息"
esac
chmod +x chengjipanduan.sh

测试

[root@lab opt]# ./chengjipanduan.sh 
请输入你的成绩:59
你的成绩不及格,别灰心,再试一次
[root@lab opt]# ./chengjipanduan.sh 
请输入你的成绩:60
你的成绩刚好及格,请继续努力
[root@lab opt]# ./chengjipanduan.sh 
请输入你的成绩:74
你的成绩刚好及格,请继续努力
[root@lab opt]# ./chengjipanduan.sh 
请输入你的成绩:75
你的成绩为良好,还得继续努力
[root@lab opt]# ./chengjipanduan.sh 
请输入你的成绩:84
你的成绩为良好,还得继续努力
[root@lab opt]# ./chengjipanduan.sh 
请输入你的成绩:85
你的成绩为优秀,还请努力学习,不要骄傲
[root@lab opt]# ./chengjipanduan.sh 
请输入你的成绩:100
你的成绩为优秀,还请努力学习,不要骄傲
[root@lab opt]# ./chengjipanduan.sh 
请输入你的成绩:101
请输入正确的信息
[root@lab opt]# ./chengjipanduan.sh 
请输入你的成绩:-1
请输入正确的信息

ps:模式是可以用正则表达式来执行的

3.for循环结构语句

3.1for循环结构的语法

语法一:

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

语法二:

for ((i=0;i<=10;i++))
do
  命令序列
done

3.2for语句的注意事项:

在写for语句的时候,一定要注意区分语法一和语法二

4.for循环的简单实例

1.用for循环写一个100以内的偶数相加

vim computingoushu.sh
#!/bin/bash
count=0
for ((i=1;i<=100;i++))
  do
      if [ `expr $i % 2`  -eq 0 ]
        then

        let count+=$i
      fi
  done
echo "$count"
chmod +x computingoushu.sh

测试

[root@lab opt]# ./computingoushu.sh 
2550

2.用for循环打印测试192.168.10.0网段的主机在线的信息

vim ceshizhuji.sh
#!/bin/bash
for ((i=0;i<=255;i++))
  do
    ping -c 3 -i 0.2  "192.168.10.$i"  > /dev/null
        if [ $? -eq 0 ]
          then
              echo "192.168.10.$i is up" && echo "192.168.10.$i" >> /opt/available.txt
        fi
  done
chmod +x ceshizhuji.sh

测试

[root@lab opt]# ./ceshizhuji.sh 
192.168.10.1 is up
192.168.10.13 is up
192.168.10.16 is up
192.168.10.18 is up
192.168.10.19 is up
192.168.10.21 is up
192.168.10.23 is up
192.168.10.25 is up
192.168.10.26 is up
192.168.10.27 is up
192.168.10.36 is up
192.168.10.39 is up
192.168.10.40 is up
192.168.10.49 is up
192.168.10.68 is up
192.168.10.69 is up
192.168.10.71 is up
192.168.10.73 is up
192.168.10.87 is up
192.168.10.89 is up
192.168.10.97 is up
192.168.10.99 is up
192.168.10.100 is up
192.168.10.105 is up
192.168.10.106 is up
192.168.10.107 is up
192.168.10.110 is up
192.168.10.114 is up
192.168.10.120 is up
192.168.10.122 is up
192.168.10.124 is up
192.168.10.126 is up
192.168.10.136 is up
192.168.10.138 is up
192.168.10.141 is up
192.168.10.142 is up
192.168.10.146 is up
192.168.10.148 is up
192.168.10.150 is up
192.168.10.155 is up
192.168.10.172 is up
192.168.10.177 is up
192.168.10.180 is up
192.168.10.186 is up
192.168.10.189 is up
192.168.10.193 is up
192.168.10.194 is up
192.168.10.200 is up
[root@lab opt]# cat available.txt 
192.168.10.1
192.168.10.13
192.168.10.16
192.168.10.18
192.168.10.19
192.168.10.21
192.168.10.23
192.168.10.25
192.168.10.26
192.168.10.27
192.168.10.36
192.168.10.39
192.168.10.40
192.168.10.49
192.168.10.68
192.168.10.69
192.168.10.71
192.168.10.73
192.168.10.87
192.168.10.89
192.168.10.97
192.168.10.99
192.168.10.100
192.168.10.105
192.168.10.106
192.168.10.107
192.168.10.110
192.168.10.114
192.168.10.120
192.168.10.122
192.168.10.124
192.168.10.126
192.168.10.136
192.168.10.138
192.168.10.141
192.168.10.142
192.168.10.146
192.168.10.148
192.168.10.150
192.168.10.155
192.168.10.172
192.168.10.177
192.168.10.180
192.168.10.186
192.168.10.189
192.168.10.193
192.168.10.194
192.168.10.200

ps:我们一定要注意格式,不然有时候会报错。

5.while循环

while循环的语法

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

6.while循环的简单实例

打印1到10

vim testwhile.sh
#!/bin/bash
i=1
while [ $i -le 10 ]
  do
      echo "$i"
      let i++
  done
chmod +x testwhile.sh

测试

[root@lab opt]# ./testwhile.sh 
1
2
3
4
5
6
7
8
9
10

7.总结和补充

补充:$RANDOM 随机数

$RANDOM的值为[0-65536] 即2^^16

expr $RANDOM % 100 //100以内的随机正整数包括(0)

continue 本次循环不执行,然后执行下次操作

break 直接退出当前循环

总结:总结一下今天所学的,我们今天主要学习的是case多分支语句,for循环,while循环。case多分支语句适用于确定的几个点,if适用于一个一个的模块,但是当case使用正则的时候,两者都可以。for循环和while循环主要是记住语法套就行了。

;