目錄
循環
echo 命令
for 循環次數
for 第二種格式
命令舉例
while
腳本舉例
雙重循環及跳出循環
腳本舉例
更改文件和目錄的后綴名的腳本
畫三角形的腳本
乘法口訣表的腳本
面試例題
補充命令
let 命令
循環
—— 一定要有跳出循環的條件
-
已知循環的次數
-
未知循環的次數,但是有一個跳出的條件
echo 命令
—— echo -n 表示不換行輸出
—— echo -e 表示輸出轉義符
轉義符號 | 作用 |
---|---|
-n | 表示不換行輸出 |
\e | 輸出轉義字符,將轉義后的內容輸出到屏幕上 |
\b | 轉義后相當于按退格鍵,但前提是 b 后面存在字符;b 表示刪除前一個字符,\b\b 表示刪除前兩個字符 |
\c | 不換行輸出,當 \c 后面存在字符時,后面的字符不會被輸出 |
\n | 換行,被輸出的字符從 \n 除開始另起一行 |
\f 或 \v | 換行,但是換行后的新行的開頭位置連接著上一行的行尾 |
\t | 轉以后表示插入 tab,即橫向制表符 |
\r | 光標移至行首,用后面的字符覆蓋等長度的前面的字符 |
for 循環次數
—— for 名稱 in 循環列表
do命令
done
—— 循環列表
-
只和循環的額外次數有關
-
有幾個值,就循環幾次
例
for i in a b c #for 變量名 in 循環列表
#i 為自定義,in 后面接列表循環次數,a b c 表示循環 3次
do
命令序列
done循環列表的表項形式[root@localhost opt]# echo {1..10}
1 2 3 4 5 6 7 8 9 10
#將數字 1至10 全部列出
[root@localhost opt]# echo {0..10..2}
0 2 4 6 8 10
#將數字 0至10 中的偶數全部列出;從 0 開始到 10 結束,每次加 2,步長為 2
[root@localhost opt]# echo {1..10..2}
1 3 5 7 9
#將數字 0至10 中的奇數全部列出;從 0 開始到 10 結束,每次加 2,步長為 2seq #調用命令
[root@localhost opt]# seq 5
1
2
3
4
5
[root@localhost opt]# seq 0 5
0
1
2
3
4
5
[root@localhost opt]# seq 0 2 5
0
2
4
[root@localhost opt]# seq 1 2 5
1
3
5
for 第二種格式
for ((表達式1;表達式2;表達式3)) ; do 命令 ; done
—— 表達式1 ==> 表達式2:是一個判斷,如果滿足表達式2 才執行 ==> 表達式3
命令舉例
[root@localhost ~]# ls
anaconda-ks.cfg 公共 視頻 文檔 音樂
initial-setup-ks.cfg 模板 圖片 下載 桌面
[root@localhost ~]# for a in * ;do echo $a ;done
anaconda-ks.cfg
initial-setup-ks.cfg
公共
模板
視頻
圖片
文檔
下載
音樂
桌面計算 1累計加到100 的結果
寫法一
[root@localhost ~]# sum=0;a=0;for a in {1..100};do let sum+=a ;done;echo $sum
5050寫法二
[root@localhost ~]# sum=0;a=0;for a in {1..100};do sum=$[sum+a] ;done;echo $sum
5050
while
—— 為限定條件,條件則成功執行
—— while 判斷條件:條件成立則繼續循環,條件不成立跳出循環
腳本舉例
累加求和#!/bin/bash
a=0
b=0
until [ $a -gt 100 ]
#當 a的值并不大于100 時,因為條件不成立,所以繼續循環執行,當 a的值大于100,滿足條件,則跳出循環
do
b=$[a+b]
let a++
done
echo b=$b
雙重循環及跳出循環
命令 | 注釋 |
---|---|
break | 跳出單個循環;break n :數字 n ,代表跳出 n 層循環 |
continue | 終止某次循環中的命令,但是不會完全終止命令;continue n :數字 n ,代表跳出 n 層循環 |
exit | 直接退出腳本 |
例
#!/bin/bash
for j in {1..6}
doif [ $j -eq 3 ]thenbreakfiecho j=$j
done#執行的結果
[root@localhost opt]# bash l.sh #在 j=3 的時候停止該循環命令
j=1
j=2#!/bin/bash
for j in {1..6}
doif [ $j -eq 3 ]#當j的值等于3時thencontinue#終止此次循環,但是,不會影響循環命令的后續執行fiecho j=$j
done#執行的結果
[root@localhost opt]# bash l.sh #沒有顯示 j=3
j=1
j=2
j=4
j=5
j=6
腳本舉例
更改文件和目錄的后綴名的腳本
#!/bin/bash
for a in *.txt
#給a賦值任意字符加后綴名.txt
do
b=`echo $a|cut -d "." -f1`
#給b賦值,輸出a 以 . 為分隔符,取后一列
mv $a ${b}.sh
#將a 的后綴名 .txt 更改為 .sh
done
畫三角形的腳本
#!/bin/bashfor a in {1..9}
dofor b in `seq $a`doecho -e "*\c"done
echo
done
結果展示
乘法口訣表的腳本
#!/bin/bash
for a in {1..9}
dofor b in `seq $a`doecho -e "${a}*${b}=$[a*b]\t\c "done
echo
done
結果展示
面試例題
#!/bin/bash
ip=192.168.91.
for a in {1..254}
do
{
ping -c1 -W1 ${ip}${a} &>/dev/null
if [ $? -eq 0 ]
then
echo ${ip}${a} >> /opt/cunhuo
else
echo ${ip}${a} >> /opt/nocunhuo
fi
} &
done
補充命令
let 命令
符號 | 作用 |
---|---|
++ | 自身變量 +1 |
-- | 自身變量 -1 |
+=任意數值 | 自身變量 +任意數值 |
-=任意數值 | 自身變量 -任意數值 |
*=任意數值 | 自身變量 *任意數值 |
/=任意數值 | 自身變量 /任意數值 |
%=任意數值 | 自身變量 %任意數值 |