1. 程式人生 > 其它 >shell指令碼例題—for、while和until迴圈

shell指令碼例題—for、while和until迴圈

目錄

一、例題1

1.1 需求

計算從1到100所有整數的和

1.2 指令碼命令

sum=0
for ((i=1;i<=100;i++))
do
 sum=$[$sum + $i]
done
 echo $sum

1.3 驗證操作

二、例題2

2.1 需求

提示使用者輸入一個小於100的整數,並計算從1到該數之間所有整數的和

2.2 指令碼命令

read -p "請輸入一個整數(1-100):" num
if [ $num -ge 1 -a $num -lt 100 ];then
  sum=0
  for ((i=1;i<=$num;i++))
  do
  sum=$[$sum + $i]
  done
    echo "整數和為$sum"
else
  echo "輸入錯誤,請重新輸入數字(1-100)"
fi

2.3 驗證操作

三、例題3

3.1 需求

求從1到100所有整數的偶數和、奇數和

3.2 指令碼命令

a=0
for ((i=1;i<=100;i+=2))
do
 a=$[$a + $i]
done
  echo "1-100內所有奇數和為$a"

b=0
for ((i=0;i<=100;i+=2))
do
 b=$[$b + $i]
done
  echo "1-100內所有偶數和為$b"

3.3 驗證操作

四、例題4

4.1 需求

執行指令碼輸入使用者名稱,若該使用者存在,輸出提示該使用者已存在;若該使用者不存在,提示使用者輸入密碼,建立使用者並設立其密碼

4.2 指令碼命令

第一種方法:
for i in `cat /etc/shadow | awk -F ':' '{print $1}'`
do
  read -p "輸入使用者名稱:" name
  if [ $name = $i ];then
    echo "${name}使用者已存在"
    exit
  else
    useradd $name
    a=`echo $?`
    if [ $a -eq 0 ];then
       echo "該使用者不存在,將會建立該使用者並且將會輸入密碼"
       read -p "輸入密碼:" mima
       echo $mima | passwd --stdin $name
       exit
    else
       exit
    fi
  fi
done
第二種方法:
read -p "輸入使用者名稱:" name
`useradd $name` &> /dev/null
a=`echo $?`
while [ $a -ne 0 ]
do
  echo "使用者已存在"
  exit
done

while [ $a -eq 0 ]
do
    echo "該使用者不存在,將會被建立"
    read -p "輸入密碼:" mima
    echo $mima | passwd --stdin $name
    exit
done

4.3 驗證操作

五、例題5

5.1 需求

檢測指定範圍主機是否通訊,並將通訊的主機ip輸出到檔案host_ip中

5.2 指令碼命令

for ((a=1;a<=10;a++))
do
  ping -c 2 -i 0.5 -w 2 192.168.80.$a &> /dev/null
  if [ $? -eq 0 ];then
    echo "192.168.80.${a} is online" >> host_ip
  else
    echo "192.168.80.${a} is offline" >> /dev/null
  fi
done

注:這邊我們用的for迴圈,採用遍歷的方式,序列用時太長,我們可以運用多執行緒並行的方式來ping主機IP來縮短時間,具體命令如下:

5.3 操作驗證

六、例題6

6.1 需求

使用者輸入密碼,指令碼判斷密碼是否正確,輸入正確提示正確資訊,連續輸錯3次則報警

6.2 指令碼命令

passwd=123456
for ((i=1;i<=3;i++))
do
  read -p "輸入你的密碼:" mima
  if [ $mima = $passwd ];then
    echo "密碼正確,請進"
    exit
  else
    echo "密碼錯誤,想想再輸哦"
  fi
done
echo "警告,密碼錯3次"

6.3 驗證操作

七、例題7

7.1 需求

編寫能夠自動生成一個8位隨機密碼的指令碼

7.2 指令碼命令

補:1.num=$[$RANDOM % ${#Str}] 中 ${#Str}代表字元長度,可以用具體數字來代替,多少位數就輸多少 2.tmp=${Str:num:1}擷取字元命令,其中Str指隨機字串;num指從第幾位擷取;1指擷取的步長 3.+=疊加命令

7.3 驗證操作

八、例題8

8.1 需求

寫個逛淘寶選購商品指令碼,每家商店有五種商品選購(衣服500元,褲子400元,鞋子350元,帽子150元,襪子50元),每次選購完或不買都會提示使用者是否繼續逛下一家商店,如果不再繼續逛的話進行購物車結算總額

8.2 指令碼命令

a=0
i=1
sum=0
while [ $a -eq 0 ]
do
  echo "歡迎來到第 $i 家商店"
  read -p "是否進店選購(yes/no):" doing
  while [ $doing = "yes" ]
  do
    echo "1:衣服¥500"
    echo "2:褲子¥400"
    echo "3:鞋子¥350"
    echo "4:帽子¥150"
    echo "5:襪子¥50"
    echo "6或其他:放棄選購"

    read -p "選擇你需要的商品序號:" num
    case $num in
    1)
       echo "選購衣服成功"
       sum=$[$sum + 500]
       ;;
    2)
       echo "選購褲子成功"
       sum=$[$sum + 400]
       ;;
    3)
       echo "選購鞋子成功"
       sum=$[$sum + 350]
       ;;
    4)
       echo "選購帽子成功"
       sum=$[$sum + 150]
       ;;
    5)
       echo "選購襪子成功"
       sum=$[$sum + 50]
       ;;
    *)
       echo "放棄購買"

    esac
    read -p "是否再繼續選購(yes/no):" doing
  done
  read -p "是否繼續逛下一家商店(yes/no):" going
  if [ $going = "yes" ];then
    let i++
  else
    echo  -e  "謝謝惠顧!\n你一共逛了 $i 個商店.\n合計消費總額為 $sum 元"
     exit
  fi
done

8.3 驗證操作

九、例題9

9.1 需求

輸出環境變數PATH所包含的所有目錄以及其中的子目錄和所有可執行檔案

9.2 指令碼命令

9.3 驗證操作