1. 程式人生 > >shell的基本語句(for迴圈,while迴圈,巢狀迴圈,if 的多重迴圈,case語句)

shell的基本語句(for迴圈,while迴圈,巢狀迴圈,if 的多重迴圈,case語句)

1.for迴圈(遍歷)

for  條件
do
動作
done
練習1:檢測當前172.25.254網段主機的狀態
[[email protected] mnt]# vim test.sh
  1 #!/bin/bash
  2 for ((IP=1;IP<=10;IP++))
  3 do {
  4         ping -c1 -w1 172.25.254.$IP &> /dev/null && echo "172.25.254.$IP is     up" || echo "172.25.254.$IP is down"
  5 }
  6 done

在這裡插入圖片描述

[[email protected] mnt]# sh test.sh

在這裡插入圖片描述

練習2:寫一個10秒的倒計時
[[email protected] mnt]# vim time.sh
 10 #!/bin/bash
 11 for((i=10;i>=0;i--))
 12 do {
 13         echo -n  "time $i "
 14         echo -ne "\r"
 15         sleep 1
 16 }
 17 done

在這裡插入圖片描述

[[email protected] mnt]# sh time.sh 

在這裡插入圖片描述

練習3:寫一個使用者自定義分秒的倒計時
[[email protected] mnt]# vim time.sh
 10 #!/bin/bash
 11 read -p "please input a time:" a b
 12 
 13 for((i=$a*60+$b;i>=0;i--))
 14 do {
 15         m=$[$i/60]
 16         n=$[$i%60]
 17         echo -n  "time $m:$n "
 18         echo -ne "\r"
 19         sleep 1
 20 }
 21 done

在這裡插入圖片描述

[[email protected] mnt]# sh time.sh 
please input a time:1 5

在這裡插入圖片描述

2.while迴圈

while true  條件為真就執行
do
done

[[email protected] mnt]# uptime   # 檢視系統開啟了多長時間
 14:31:41 up  5:33,  2 users,  load average: 0.00, 0.02, 0.05
[[email protected] mnt]# echo "student" | passwd --stdin student   # 非互動修改使用者密碼
練習1:批量建立使用者,並非互動式修改使用者密碼
[[email protected] mnt]#  vim while.sh
 10 #!/bin/bash
 11 PREFIX="LALA"
 12 i=1
 13 while [ $i -le 3]
 14 do
 15         useradd ${PREFIX}$i
 16         echo "123" | passwd --stdin ${PREFIX}$i &> /dev/null
 17         ((i++))
 18 done

在這裡插入圖片描述

[[email protected] mnt]# sh while.sh

在這裡插入圖片描述

3.巢狀迴圈

練習:列印9*9乘法表
[[email protected] mnt]# vim multiply.sh
 10 #!/bin/bash
 11 for((i=1;i<=9;i++))
 12 do
 13         for((j=1;j<=i;j++))
 14         do
 15                 t=$[i*j]
 16                 echo -ne $j*$i=$t "\t"
 17         done
 18         echo -e "\n"
 19 done

在這裡插入圖片描述

[[email protected] mnt]# sh multiply.sh

在這裡插入圖片描述

4.if-else 迴圈

If 條件;then
動作1
elif 
動作2
else
動作3
fi

[[email protected] mnt]# vim if_else_elif.sh
 10 #!/bin/bash
 11 read -p "please input your score:" s
 12 if [ "$s" -lt "60" ];then
 13         echo you are not pass!!
 14 elif [ "$s" -ge "60" -a "$s" -lt "80" ];then
 15         echo you are good!!
 16 elif [ "$s" -ge "80" ];then
 17         echo you are best!!
 18 else    
 19         echo you are not have score!!
 20 fi

在這裡插入圖片描述

[[email protected] mnt]# sh if_else_elif.sh

在這裡插入圖片描述

5.case 語句

case num in 
          條件1)         #可以判斷多條
          命令1
          ;;
          條件2)
          命令2
esac
練習:編寫一個指令碼,實現如下功能
[[email protected] mnt]# vim case.sh
 10 #!/bin/bash
 11     echo -e "
 12     \033[036m  A 顯示主機IP        \033[0m
 13     \033[032m  B 顯示磁碟剩餘空間  \033[0m
 14     \033[033m  C 顯示系統執行時間  \033[0m
 15     \033[034m  Q 退出              \033[0m
 16 "
 17 for ((i=1;;i++))
 18 do
 19 read -p "please input a letter:" a
 20 case  $a in
 21 a|A)
 22     echo -e "\n `ifconfig eth0 | grep "inet "| cut -d " " -f 10`"
 23     ;;
 24 B|b)
 25     echo -e "\n `df  | awk -F " " '{if(NR==2){ print "系統剩餘空間為:"$4}}'`    "
 26     ;;
 27 C|c)
 28     echo -e "\n `uptime | awk '{print $3}'|awk -F, '{print $1}'|awk -F: '{ p    rint "系統已經運行了" $1 "小時" $2 "分鐘"}'`"
 29     ;;
 30 Q|q)
 31     exit 0
 32     ;;
 33 *)
 34     echo -e "\033[31m \nError \033[0m";;
 35 esac
 36 done

在這裡插入圖片描述

[[email protected] mnt]# sh case.sh

在這裡插入圖片描述

練習:編寫httpd監控指令碼,要求可以輸入start|stop|restart|status
[[email protected] mnt]# vim httpd.sh
 10 #!/bin/bash
 11     echo -e "
 12     \033[036m  start   開啟httpd       \033[0m
 13     \033[032m  status  檢視httpd的狀態 \033[0m
 14     \033[033m  stop    關閉httpd       \033[0m
 15     \033[034m  restart 重啟httpd       \033[0m
 16     \033[035m  quit    退出            \033[0m
 17 
 18 "
 19 for ((i=1;;i++))
 20 do
 21 read -p "please input a letter:" a
 22 case  $a in
 23 start)
 24     systemctl start httpd
 25     echo 您已成功開啟httpd
 26     ;;
 27 status)
 28     systemctl status httpd
 29     ;;
 30 stop)
 31     systemctl stop httpd
 32     echo 您已成功關閉httpd
 33     ;;
 34 restart)
 35     systemctl restart httpd
 36     echo 您已重啟成功
 37     ;;
 38 q|Q)
 39     exit 0
 40     ;;
 41 *)
 42     echo -e "\033[31m \nError \033[0m";;
 43 esac
 44 done

在這裡插入圖片描述

 [[email protected] mnt]# sh httpd.sh 

在這裡插入圖片描述