Shell編程之回圈陳述句(詳細講解以及腳本案例)
文章目錄
- 一、for陳述句的結構
- (一)、for陳述句應用實體
- 1、示例1——批量添加用戶
- 2、示例2——使用根據IP地址檢查主機狀態
- 3、示例3——for回圈計算1-100奇數之和
- 二、while陳述句的結構
- (一)、while 陳述句應用實體
- 1、示例1——while回圈計算(1-100整數和)
- 2、示例2——while回圈計算(1-100整數和)
- 三、until陳述句的結構
- 1、示例1——while回圈計算(1-100整數和)
- 四、echo的特殊用法
一、for陳述句的結構
讀取不同的變數值,用來逐個執行同一組命令
for 變數名 in 取值串列
do
命令序列
done
for 收件人 in 郵件地址串列
do
發送郵件
done

{1..10}
$(seq 1 10) #指連續的1到10
((i=1;i<=10;i++))

{1..10..2}
$(seq 1 2 10) #指1、3、5、7、9,1到10之間從1開始每個加2
((i=1;i<=10;i+=2))

(一)、for陳述句應用實體
1、示例1——批量添加用戶
用戶名存放在users.txt檔案中,每行一個
初始密碼均設為123456
驗證腳本
#!/bin/bash
chmod 777 users.txt
for user in `cat /root/users.txt
do
useradd $user
echo "用戶$user 已創建"
echo "111111" | passwd --stdin $user
done



2、示例2——使用根據IP地址檢查主機狀態
- IP地址存放在ip.txt檔案中,每行一個
- 使用ping命令檢測各主機的連通性
#!/bin/bash
chmod 777 ip.txt
for i in `cat /root/ip.txt`
do
ping -c 3 $i &> /dev/null
if [ $? -eq 0 ];then
echo "$i host is up"
else
echo "$i host is down"
fi
done



3、示例3——for回圈計算1-100奇數之和
#!/bin/bash
sum=0
for ((i=1;i<=100;i+=2))
do
let sum=$sum+$i
done
echo $sum

![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-gwwRJpMY-1608366275194)(C:\Users\Chen\Desktop\9.png)]](https://img.uj5u.com/2020/12/20/206880201021501.png)
二、while陳述句的結構
重復測驗某個條件,只要條件成立則反復執行
while 條件測驗操作
do
命令序列
done
while 未猜中正確價格
do
反復猜測商品價格
done

(一)、while 陳述句應用實體
1、示例1——while回圈計算(1-100整數和)
#!/bin/bash
sum=0
i=0
while [ $i -le 100 ]
do
let sum=$sum+$i
let i++
done
echo $sum


2、示例2——while回圈計算(1-100整數和)
#!/bin/bash
echo "沒事來猜數玩"
a=$[$RANDOM % 1000]
b=0
c=0
while [ $b -lt 1 ]
do
read -p "請輸入你要猜的數: " d
let c++
if [ $d -lt $a ];then
echo "你猜小了"
let c++
elif [ $d -gt $a ] ;then
echo "你猜大了"
let c++
elif [ $d -eq $a ];then
echo "恭喜你才對了,它的數是$a,你一共猜了$c次!!"
c=2
fi
done

三、until陳述句的結構
重復測驗某個條件,只要條件不成立則反復執行
until 條件測驗操作
do
命令序列
done
until 未超過10
do
數字依次遞增
done

1、示例1——while回圈計算(1-100整數和)
#!/bin/bash
sum=0
i=0
until [ $i -gt 100 ]
do
let sum=$sum+$i
let i++
done
echo $sum

四、echo的特殊用法
echo -n 表示不換行輸出
echo -e 輸出轉義字符,將轉義后的內容輸出到螢屏上
常用的轉義字符如下:
\b 轉義后相當于按退格鍵(backspace),但前提是"\b"后面存在字符;"\b"表示洗掉前一個字符,"\b\b"表示洗掉前兩個字符,
\c 不換行輸出,在"\c"后面不存在字符的情況下,作用相當于 echo -n; 但是當"\c"后面仍然存在字符時,"\c"后面的字符將不會被輸出,
\n 換行,被輸出的字符從"\n"處開始另起一行,
\f 換行,但是換行后的新行的開頭位置連接著上一行的行尾;
\v 與\f相同;
\t 轉以后表示插入tab,即橫向制表符;
\r 游標移至行首,但不換行,相當于使用"\r"以后的字符覆寫"\r"之前同等長度的字符;但是當"\r"后面不存在任何字符時,"\r"前面的字符不會被覆寫
\\ 表示插入"\"本身;
例:
[root@gcc ~]#echo -e "123\b456"
12456
[root@gcc ~]#echo -e "123\c456"
123[root@gcc ~]#^C
[root@gcc ~]#echo -e "123\n456"
123
456
[root@gcc ~]#echo -e "123\f456"
123
? 456
[root@gcc ~]#echo -e "123\v456"
123
? 456
[root@gcc ~]#echo -e "123\t456"
123 456
[root@gcc ~]#echo -e "123\r456"
456
[root@gcc ~]#echo -e "123\\456"
123\456
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/237575.html
標籤:其他
