循環是爲了執行重複的動作
for
while
until
1、for循環
語法:
for 變量 in 變量列表
do
循環體;
done
# cat for1.sh
#!/bin/bash
for i in `seq 5`
do
echo $i
done
in後面接列表
for i in 1 2 3 4 5 `seq 10`
for i in {1..10}
插曲
---------------------------------------
seq 10 //打印1到10
seq 5 10 //打印5到10
seq 1 2 10 //打印奇數
# seq 開始值 步長 結束值
---------------------------------------
"$*" "$@" 變量的列表
# vim for2.sh
#!/bin/bash
echo "----\$*----"
for i in "$*"
do
echo $i
done
echo "----\$@----"
for i in "$@"
do
echo $i
done
# chmod +x for2.sh
# ./for2.sh 1 2 3 4 5 6 7 8 9
----$*----
1 2 3 4 5 6 7 8 9
----$@----
1
2
3
4
5
6
7
8
9
練習:1)批量添加10個用戶,用戶名爲u1~u10
並且爲他們設置密碼,pass1~pass10
# cat for3.sh
#!/bin/bash
for i in `seq 10`
do
useradd u$i
echo "user u$i added."
echo pass$i | passwd --stdin u$i &> /dev/null
echo "set user u$i password."
done
2)計算1+2+3+...+100
# cat for4.sh
#!/bin/bash
for i in {1..100}
do
#let sum=sum+$i;
#sum=$((sum+$i)) //這三種任選其一即可
let sum+=$i;
done
echo "sum=" $sum
3)計算10的階乘 10!=1*2*3*4*5*6*7*8*9*10
改編:用戶輸入數,你就求那個數的階乘
4)打印99乘法表
語法
while 命令或者條件表達式
do
循環體; //注意:循環體部分要有變量更新
done
當命令或條件表達式爲真,執行循環體的內容。直到條件爲假時,退出循環
while : 死循環
1、打印1到5
# cat while1.sh
#!/bin/bash
i=1
while [ $i -le 5 ]
do
echo $i;
let i++;
done
2、添加用戶,用戶信息來自於文件。
其實就是循環中從文件讀取內容,使用輸入重定向(<)
# vim user.txt
tom:2000:tommao
cat:2001:catmao
# vim while2.sh
#!/bin/bash
while read line
do
username=`echo $line | awk -F: '{print $1}'`
password=`echo $line | cut -d: -f3`
uid=`echo $line | awk -F: '{print $2}'`
useradd -u $uid $username
echo $password | passwd --stdin $username
done < /root/shelldoc/user.txt //變量line的值來自於文件
# sh while2.sh
Changing password for user tom.
passwd: all authentication tokens updated successfully.
Changing password for user cat.
passwd: all authentication tokens updated successfully.
# tail -2 /etc/passwd
tom:x:2000:2000::/home/tom:/bin/bash
cat:x:2001:2001::/home/cat:/bin/bash
捕捉信號 trap
# kill -l
# cat trap.sh
#!/bin/bash
trap "echo you can not kill me,haha." 15
while :
do
echo hello;
sleep 2; //延遲2秒
done
第一個標籤:
# sh trap.sh
第二個標籤:
# ps -ef | grep trap
root 31955 26274 0 15:45 pts/6 00:00:00 sh trap.sh
# kill -15 31955
第一個標籤:
看輸出中會有對信號15的處理 you can not kill me,haha.
語法
until 命令或條件表達式
do
循環體
done
當條件爲真,退出循環。與while相反。
# cat until.sh
#!/bin/bash
i=1
until [ $i -gt 5 ]
do
echo $i;
let i++;
done