1. 程式人生 > >linux中shell的迴圈

linux中shell的迴圈

迴圈主要分為3種,借幾個指令碼來理解一下

1.for

1)10秒倒計時指令碼

#!/bin/bash
for ((a=10;a>0;a--))
do
    echo -n " TIME $a"
    echo -ne "\r \r"
    sleep 1
done

 

2)如果想要自己輸入的時間為倒計時呢

#!/bin/bash
read -p "please input the time you want count,eg 01 10   " i j
a=$i*60+$j
for ((b=$a;b>0;b--))
do
    echo -n " TIME $[b/60]:$[b%60] "
    echo -ne "\r"
    sleep 1
done

 

3)九九乘法表

#!/bin/bash

##列印9*9乘法表
#1*1=1
#2*1=2 2*2=4
#3*1=3 3*2=6 3*3=9

for i in $(seq 9)
do
    for j in $(seq $i)
        do
            echo -ne "$i*$j=$(($i*$j))\t"
        done
    echo -e "\n"
done

 

4)巢狀迴圈

#!/bin/bash

for((a=1;a<=3;a++))
do
    echo "Starting outside loop: $a"
    for((b=1;b<=3;b++))
    do
        echo "Inside loop: $b"
    done
done

 

2.if-else

1)如果用話存在輸出,hello+使用者名稱

#!/bin/bash
user=kiosk
if grep $user /etc/passwd;then
    echo "Hello $user"
fi

 

2)檢測student使用者是否存在,存在顯示家目錄的內容

#!/bin/bash
user=student
if grep $user /etc/passwd;then
    echo "The files for user $user are:"
    ls -a /home/$user
else
    echo "$user not exist!"
fi

 

3)檢視是否被允許登陸

#!/bin/bash

if [ "$1" == "student" ];then
    echo "Welcome $1"
elif [ "$1" == "westos" ];then
    echo "Welcome $1"
elif [ "$1" == "kiosk" ];then
    echo "Welcome $1"
elif [ "$1" == "linux" ];then
    echo "Welcome $1"
else
    echo "You are not allowed!"
fi

 

3.while

1)新建westos{1..20}使用者,並統一設定密碼

#!/bin/bash
PREFIX="westos"
i=1
while [ $i -le 20 ]
do
    useradd -r  ${PREFIX}$i &> /dev/null
    echo "123456" | passwd --stdin ${PREFIX}$i &> /dev/null
    ((i++))
done

2)隔2秒輸出依次系統啟動時間

#!/bin/bash
while true
do
    uptime
    sleep 2
done

 

4.case

1)如果是允許使用者輸出允許,不是的話,輸出sorry

#!/bin/bash
case $1 in 
student|kiosk|linux|westos)
	echo "Welcome,$1"
	;;
*)
	echo "sorry!"
	;;
esac

5.練習題

運用本節所學內容,寫一個互動式程式

#!/bin/bash
while true
do
    echo -e "
    \033[31m A 顯示主機IP \033[0m
    \033[32m B 顯示磁碟剩餘空間 \033[0m
    \033[33m C 顯示系統執行時間 \033[0m
    \033[34m Q 退出系統 \033[0m
"
read -p "請輸入你的選擇:" char

case $char in

a|A)
   ifconfig br0 | grep "inet " | awk '{print $2}'
    ;;

b|B)
    df -h | awk 'NR==2{print "剩餘空間大小為:"$4}'
    ;;

c|C)
    uptime |awk '{print $3}' | awk -F, '{print $1}' | awk -F: '{print "系統已經運行了"$1"小時"$2"分鐘"}'
    ;;

q|Q)
    exit 0
    ;;

esac
done

OK~