文章目錄
- 一、循環語句
-
- 1、for循環
-
- 示例1、1~100求和
- 示例 2、1~a,(a<=100)求和
- 示例 3、1~100求奇偶數和
- 示例 4、 過濾1~100 所有奇偶數
- 示例 5、檢測指定範圍主機
- 示例 6、篩選檔案
- 示例 7、建立使用者
- 二、while循環
-
-
- 示例1、1~100求和
- 示例 2、1~a,(a<=100)求和
- 示例 3、1~100求奇偶數和
- 示例 4、 過濾1~100 所有奇偶數
- 示例 5、檢測指定範圍主機
- 示例7、猜商品價格
-
- 三、until循環語句
- 四、結束循環----break和continue
- 五、IFS字段分隔符
- 六、轉義字元
一、循環語句
1、for循環
讀取不同的變量值,用來逐個執行同一組指令
for 變量名 in 取值清單
do
指令序列
done
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL9MXbZxmVYVmb1cVWvB3MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL3MjMzQDNzIjM0AzMwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
示例1、1~100求和
#!/bin/bash
sum=0
for i in {1..100}
do
sum=$[$i+$sum]
done
echo "0-100的和為:" $sum
#如果算的是1~100之間每隔兩位數的和,即{1、3、5、7、...、99},for循環如下:
for i in {1..100..2}
#其他都是一樣的。
也可以使用 i++ 自加的方法:
示例 2、1~a,(a<=100)求和
#!/bin/bash
read -p "請輸入1~100任意一個數:" a
sum=0
for ((i=1;i<=$a;i++))
do
sum=$[ $sum+$i ]
done
echo "$sum"
驗證:
示例 3、1~100求奇偶數和
sum=0
sum1=0
for ((i=1;i<=100;i++))
do
a=$[ $i%2 ]
if [ $a = 0 ]
then
sum=$[ $sum+$i ]
else sum1=$[ $sum1+$i ]
fi
done
echo "偶數和:"
echo "$sum"
echo "奇數和: "
echo "$sum1"
驗證:
示例 4、 過濾1~100 所有奇偶數
#!/bin/bash
echo -n "偶數 "
for ((i=1;i<=100;i++))
do
a=$[ $i%2 ]
if [ $a == 0 ]
then
echo -n "$i,"
fi
done
echo -n "奇數 "
for ((i=1;i<=100;i++))
do
a=$[ $i%2 ]
if [ $a == 1 ]
then
echo -n "$i,"
fi
done
示例 5、檢測指定範圍主機
檢測指定範圍主機是否通信,并将通信主機IP輸出到檔案 host_ip.txt 中
touch host_ip.txt
for i in 192.168.1.{1..10}
do
ping -c 1 -i 0.2 -w 1 $i &>/dev/sull
if [ $? = 0 ]
then
echo $i>>host_ip.txt
fi
done
示例 6、篩選檔案
輸出/dev 目錄中所有的可執行檔案
# 篩選可執行檔案
for a in /dev/*
do
[ -x "$a" ]
if [ $? = 0 ]
then
echo "$a"
fi
done
驗證:
示例 7、建立使用者
1) 批量添加使用者
使用者名以use開頭,按數字順序進行編号
一共1-20,添加20個使用者
初始密碼均設為123456
#!/bin/bash
i=1
for i in {1..20}
do
useradd user$i
echo "123456" | passwd --stdin user$i
i++
done
- 執行腳本輸入使用者名,若該使用者存在,輸出提示該使用者已存在;若該使用者不存在,提示使用者輸入密碼,建立使用者并設立其密碼
#/bin/bash
a=`awk -F : '{ print $1 }' /etc/passwd`
for i in $a
do
read -p "請輸入使用者名:" b
if [ $b = $i ];then
echo "該使用者已存在"
exit
else
useradd $b
case $? in
0)
echo "你将建立此使用者"
read -p "請輸入密碼:" c
echo -e "$c\n$c\n" | passwd $b
;;
*)
esac
exit
fi
done
二、while循環
- 根據特定條件反複執行一個指令序列,直到不滿足條件為止。
- 編寫時可能會出現死循環,要避免這種情況發生
- true(真)和false(假)為特殊條件測試操作,也可以在if語句的條件測試中使用。
- true作為條件時,表示條件永遠成立,無限執行,也就是死循環,需要強制終止
- false作為條件時,表示條件不成立,不執行指令序列
#while語句結構
while 條件測試操作
do
指令序列
done
示例1、1~100求和
#!/bin/bash
#1~100 求和
i=1
sum=0
while [ $i -le 100 ]
do
sum=$[$sum+$i]
let i++
done
echo "1-100所有整數和:" $sum
執行結果:
示例 2、1~a,(a<=100)求和
#!/bin/bash
#1~a 求和:
i=1
sum=0
read -p "請輸入:(1-100)" a
while [ $i -le $a ]
do
sum=$[$sum+$i]
let i++
done
echo "1-a所有整數和:" $sum
執行結果:
示例 3、1~100求奇偶數和
#!/bin/bash
# 奇偶數和:
sum1=0
sum2=0
i=1
while [ $i -le 100 ]
do
a=$[$i%2]
if [ $a = 0 ];then
sum1=$[$sum1+$i]
else
sum2=$[$sum2+$i]
fi
let i++
done
echo "偶數和:$sum1"
echo "奇數和:$sum2"
驗證結果:
示例 4、 過濾1~100 所有奇偶數
#!/bin/bash
# 過濾1~100 奇偶數
i=1
echo "奇數:"
while
[ $i -lt 100 ]
do
a=$[ $i % 2 ]
if
[ $a -eq 1 ]
then
echo "$i "
fi
let i++
done
o=1
echo "偶數:"
while
[ $o -le 100 ]
do
p=$[ $o % 2 ]
if
[ $p -eq 0 ]
then
echo "$o "
fi
let o++
done
示例 5、檢測指定範圍主機
#!/bin/bash
# 檢測指定範圍主機
i=1
while [ $i -le 254 ]
do
ping -i 0.5 -c 1 -w 1 192.168.1.$i &>/dev/null
if [ $? = 0 ]
then
echo "192.168.1.$i 線上">>host_ip.txt
else
echo "192.168.1.$i 不線上"
fi
let i++
done
示例7、猜商品價格
#!/bin/bash
#
a=$[$RANDOM % 1000]
i=0
b=0
while [ $b -eq 0 ]
do
read -p "猜猜是哪個數,範圍在0~999:" shu
let i++
if [ $shu -eq $a ];then
echo "祝賀你,猜了$i 次就猜中了。"
let b++
elif [ $shu -gt $a ];then
echo "你猜大了"
elif [ $shu -lt $a ];then
echo "你猜小了"
fi
done
echo "你總共猜了 $i 次"
~
三、until循環語句
- 與while相反,重複測試某個條件,隻要條件不成立則反複執行
#!/bin/bash
#
a=0
sum=0
until [ $a -gt 100 ]
do
sum=$[$sum+$a]
let a++
done
echo "1~100的和:$sum"
四、結束循環----break和continue
- break跳出單個循環
#!/bin/bash
for ((a=1; a<=10; a++))
do
echo "outer loop: $a"
for ((b=1; b<=20; b++))
do
if [ $b -eq 5 ]
then
break
fi
echo "inter loop: $b"
done
done
- continue中止某次循環中的指令,但不會完全中止整個指令
#!/bin/bash
for ((a=1; a<=15; a++))
do
if [ $a -gt 5 ] && [ $a -lt 10 ]
then
continue
fi
echo "current value: $a"
done
五、IFS字段分隔符
預設包含 空格,制表符,換行符
檢視指令:set | grep IFS
IFS=$' \t\n'
修改成隻換行
IFS=$'\n'
IFS=:
IFS=','
IFS.OLD=$IFS
IFS=$'\n'
...
IFS=$IFS.OLD
輸出環境變量PATH所包含的所有目錄以及其中的所有可執行檔案
六、轉義字元
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"前面的字元不會被覆寫
\\ 表示插入"\"本身;
-n的示範: