一、while循环

   1、脚本编程结构

       a)顺序结构

       b)选择结构

           if

           case

       c)循环结构

           for

           while

           until

   2、while循环:适用于循环次数未知的场景,要有退出条件

       语法:

       while CONDITION; do

           statement

       ...

       done

练习1,写脚本

   计算100以内所有正整数的和

参考答案:

#!/bin/bash

declare -i I=1

declare -i SUM=0


while [ $I -le 100 ]; do

 let SUM+=$I

 let I++

done


echo $SUM

练习2,写脚本:

   转换用户输入的字符为大写,除了quit:

参考答案:

#!/bin/bash

#

read -p "Input something: " STRING


while [ $STRING != 'quit' ]; do

 echo $STRING | tr 'a-z' 'A-Z'

 read -p "Input something: " STRING

done

练习3,写一个脚本:

   每隔5秒查看hadoop用户是否登录,如果登录,显示其登录并退出;否则,显示当前时间,并说明hadoop尚未登录;

参考答案:

#!/bin/bash

#

who | grep "hadoop" &> /dev/null

RETVAL=$?


while [ $RETVAL -ne 0 ]; do

 echo "`date`, hadoop is not log."

 sleep 5

 who | grep "hadoop" &> /dev/null

 RETVAL=$?

done


echo "`date`,hadoop is logged in."

练习4,写一个脚本:

   1) 显示一个菜单给用户:

       d|D) show disk usages.

       m|M) show memory usages.

       s|S) show swap usages.

       *) quit.

   2) 当用户给定选项后显示相应的内容;

参考答案:

#!/bin/bash

#

cat << EOF

d|D) show disk usages.

m|M) show memory usages.

s|S) show swap usages.

*) quit.

EOF

read -p "Please choice:" CHOICE

case $CHOICE in

d|D)

       echo "Disk usages:"

       df -hP

       ;;

m|M)

       echo "Memory usages:"

       free -m | grep "Mem"

       ;;

s|S)

       echo "Swap usages:"

       free -m | grep "Swap"

       ;;

*)

       echo "Unknow."

       exit 10

esac

练习4扩展:

   当用户选择完成,显示相应信息后,不退出;而让用户再一次选择,再次显示相应内容;除了用户使用quit;

参考答案:

#!/bin/bash

#

cat << EOF

d|D) show disk usages.

m|M) show memory usages.

s|S) show swap usages.

*) quit.

EOF


echo -n -e "\033[31mYour choice:\033[0m"---->\033表示Ctrl,以前一个\033后一个\033结束,给字体加颜色;

read CHOICE

while [ $CHOICE != 'quit' ];do

 case $CHOICE in

 d|D)

   echo "Disk usage: "

   df -Ph ;;

 m|M)

   echo "Memory usage: "

   free -m | grep "Mem" ;;

 s|S)

   echo "Swap usage: "

   free -m | grep "Swap" ;;

 *)

   echo "Unknown.." ;;

 esac


read -p "Again, your choice: " CHOICE

done