循環語句
- 一、使用for循環語句
-
- 1.1 for語句結構
- 實驗:
-
- 1、輸出10個數
- 2、批量添加使用者,使用者名存放在users.txt檔案中,每行一個,初始密碼為123456,驗證腳本
- 3、根據ip位址檢查主機狀态,ip位址存放在ipadds.txt檔案中,每行一個,使用ping指令檢測各主機的連通性
- 4、1到100的偶數和
- 5、1到100的奇數和
- 二、使用while循環語句
-
- 實驗
-
- 1、輸出1到20的數
- 2、添加使用者,使用者名以stu開頭,按數字編号
- 2、輸出不能被三整除的數
- 三、雙重循環
-
-
- 1、九九乘法表
- 2、直角三角形
- 3、等腰三角形
-
- 四、使用until循環語句
-
- 實驗
-
- 1、計算1~50的和值
- 2、為指定使用者發送線上消息
一、使用for循環語句
1.1 for語句結構
讀取不同的變量值,用來逐個執行同一組指令
for語句結構
for 變量名 in 取值清單
do
指令序列
done
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL3MDN0MzNwkDMwIzNwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
++ 自身變量+1
– 自身變量-1
+=5 自身變量+5
-=5 自身變量-5
*=5 自身變量*5
/=5 自身變量/5
%=5 自身變量%5
Let sum+=$1 兩個用法一樣 ((sum+=$1))
$()與``都是運算,指令替換
${}跟變量
$[]與(())整數運算
[]判斷
實驗:
1、輸出10個數
#!/bin/bash
for ((i=1;i<=10;))
do
echo $i
let i++
done
或
#!/bin/bash
for ((;;))
do
if [ $i -le 10 ];then
echo $i
let i++
else
break //退出目前循環
fi
done
#!/bin/bash
for ((;;))
do
if [ $i -le 10 ];then
echo $i
let i++
else
exit 0/1 //退出應用程式 0正常退出,1異常退出,傳回的狀态值
fi
done
echo $?
2、批量添加使用者,使用者名存放在users.txt檔案中,每行一個,初始密碼為123456,驗證腳本
#!/bin/bash
list=$(cat /opt/users.txt) //定義集合
for user in $list //周遊建立使用者
do
useradd $user //添加使用者
echo "123456" | passwd --stdin $user
echo "建立$user成功"
done
3、根據ip位址檢查主機狀态,ip位址存放在ipadds.txt檔案中,每行一個,使用ping指令檢測各主機的連通性
#!/bin/bash
list=$(cat /opt/ipaddr.txt)
for IP in $list
do
ping -c 3 -i 0.2 -W 3 $IP > /dev/null
if [ $i -eq 0 ];then
echo "${IP} is up"
else
echo "${IP} is down"
fi
done
echo “最終i的值是:$i”
4、1到100的偶數和
#!/bin/bash
sum=0
for ((i=1;i<=100;i++))
do
if [ `expr $i % 2` -eq 0 ];then
let sum=$sum+$i
fi
done
echo "$sum"
或
#!/bin/bash
sum=0
for ((i=0;i<=100;i+=2))
do
let sum+=$i
done
echo "$sum"
5、1到100的奇數和
#!/bin/bash
sum=0
for ((i=1;i<=100;i++))
do
if [ `expr $i % 2` -eq 1 ];then
let sum+=$i(或者let sum=$sum+$i)
fi
done
echo "$sum"
或者
#!/bin/bash
sum=0
for ((i=1;i<=100;i+=2))
do
let sum+=$i
done
echo "$sum"
二、使用while循環語句
重複測試某個條件,隻要條件成立則反複執行
while語句結構
while 條件測試操作
do
指令序列
done
break 退出本層循環
continue 跳過continue以下語句直接進入下一次循環
實驗
1、輸出1到20的數
#!/bin/bash
while [ $i -le 20 ]
do
echo $i
let i++
done
2、添加使用者,使用者名以stu開頭,按數字編号
一共添加20個使用者,stu1,stu2…stu20
初始密碼123456
#!/bin/bash
name="stu"
i=1
while [ $i -le 20 ]
do
useradd ${name}${i}
echo "123456" | passwd --stdin ${name}${i}
let i++
done
2、輸出不能被三整除的數
#!/bin/bash
i=1
while [ $i - le 100 ]
do
if [ `expr $i % 3` != 0 ];then
echo $i
fi
let i++
done
三、雙重循環
外層循環執行一次,内層循環執行一遍
1、九九乘法表
#!/bin/shell
for ((i=1;i<=9;i++))
do
for((j=1;j<=i;j++))
do
echo -n "$i*$j= `echo $(($i*$j))` "
done
echo " "
don
2、直角三角形
#!/bin/bash
read -p "Please input the length: " len
for i in `seq 1 $len`
do
for((j=1;j<=$i;j++))
do
echo -n "* "
done
echo
done
3、等腰三角形
#!/bin/bash
for ((i=1;i<=5;i++))
do
for ((j=5;j>=i;j--)) //倒直角三角形
do
echo -n " "
done
for((k=1;k<=2*i-1;k++)) //等腰三角形
do
echo -n "*"
done
echo ""
done
四、使用until循環語句
重複測試某個條件,隻要條件不成立則反複執行
until 條件測試操作
do
指令序列
done
實驗
1、計算1~50的和值
#!/bin/bash
i=1
until [ $i -eq 51 ]
do
echo $i
sum=$sum+$i
let i++
done
echo $sum
2、為指定使用者發送線上消息
若使用者不線上,則每10分鐘試一次,直至使用者登入系統後在發送資訊
使用者名與消息通過位置參數傳遞給腳本
1:位置參數個數大于1
2:姓名屬于系統使用者 /etc/passwd
3:使用者是否線上 until who
4:發送消息echo “消息” | write 使用者名
#!/bin/bash
username=$1
#格式參數不能為空
if [ $# -lt 1 ];then
echo "Usage:`basename $0` <username> [<message>]"
exit 1
fi
#驗證是否屬于系統使用者
if grep "^$username" /etc/passwd > /dev/null;then :
else
echo "not user"
exit 2
fi
#測試使用者是否線上,如果不線上,每5s聯系一次
until who | grep "$username" > /dev/null;do
echo "user not login"
sleep 5
done
#發送消息
echo "$2" | write "$username"
echo "${username}發送成功"