for循環
文法:
1)
for 變量 in 取值清單; do
statement
statement
done
2)
for 變量 in 取值清單
do
statement
statement
done
取值清單:
數字
10 20 30
使用seq指令生成數字的序列
seq 10
seq 3 10
seq 1 2 10
字元
aa bb cc
檔案
編寫腳本,計算1---100的和
#!/bin/bash
#
sum=0
for i in `seq 100`; do
let sum=$sum+$i
done
echo $sum
編寫腳本,計算1--100所有奇數的和
#!/bin/bash
#
sum=0
for i in `seq 100`; do
let ys=$i%2
if [ $ys -ne 0 ]; then
let sum=$sum+$i
fi
done
echo $sum
編寫腳本,實作批量建立使用者user1...user10
#!/bin/bash
#
for i in `seq 10`; do
if ! id user$i &> /dev/null; then
useradd user$i
echo "redhat" | passwd --stdin user$i &> /dev/null
echo "使用者user$i建立完成,初始密碼為redhat"
else
echo "使用者user$i已經存在"
fi
done
編寫腳本,檢測172.16.20.0/24線上主機IP
#!/bin/bash
#
network=172.16.20.
for i in `seq 254`; do
if ping -c 1 -W 1 $network$i &> /dev/null; then
echo "Host $network$i is up"
fi
done
啟動多線程:
#!/bin/bash
#
network=172.16.80.
for i in `seq 254`; do
{
if ping -c 1 -W 1 $network$i &> /dev/null; then
echo "Host $network$i is up"
fi
}&
done
wait
以字元作為取值清單
#!/bin/bash
#
for name in alice natsha kira merry; do
useradd $name
echo "$name create finished."
done
以檔案作為取值清單
`cat FILE`
編寫腳本,向系統中所有使用者打招呼
#!/bin/bash
#
for i in `awk -F: '{print $1}' /etc/passwd`; do
echo "Hello, $i"
done
編寫腳本, 将某目錄下所有以.txt結尾的檔案改為以.mp3結尾
#!/bin/bash
#
for i in `ls -l /tmp/test | grep "txt$" | awk '{print $9}'`; do
file_name=`echo $i | awk -F. '{print $1}'`
mv /tmp/test/$i /tmp/test/$file_name.mp3
done
編寫腳本, 分别統計/bin/bash和/sbin/nologin使用者的個數
#!/bin/bash
#
bash_number=0
nologin_number=0
line=$(wc -l /etc/passwd | awk '{print $1}')
for i in `seq $line`; do
sh_name=$(head -n $i /etc/passwd | tail -1 | awk -F: '{print $7}')
case $sh_name in
/sbin/nologin)
let nologin_number=$nologin_number+1
;;
/bin/bash)
let bash_number=$bash_number+1
;;
esac
done
echo "shell為/bin/bash的:$bash_number"
echo "shell為/sbin/nologin的:$nologin_number"
編寫腳本,顯示九九乘法表
#!/bin/bash
#for嵌套for循環
#9*9乘法口訣
echo "for的九九乘法表"
for(( i=1 ;i<=9;i++ ))
do
for(( j=1;j<=9;j++ ))
do
#當$j小于等于$i,在螢幕上列印乘法表
[ $j -le $i ] && echo -n "$i*$j=$[ $i * $j ] "
done
echo ''
done
中斷循環的語句
break 中斷整體循環
continue 中斷本次循環
break用法:
#!/bin/bash
#
sum=0
for i in `seq 100`; do
let sum=$sum+$i
if [ $sum -ge 3000 ]; then
echo $i
break
fi
done
continue用法:
#!/bin/bash
#
sum=0
for i in `seq 100`; do
let ys=$i%2
if [ $ys -eq 0 ]; then
continue
fi
let sum=$sum+$i
done
echo $sum
編寫腳本,列出系統中shell為/bin/bash的前5個使用者名
#!/bin/bash
#
number=0
line=$(wc -l /etc/passwd | awk '{print $1}')
for i in `seq $line`; do
sh_name=`head -n $i /etc/passwd | tail -1 | awk -F: '{print $7}'`
if [ $sh_name == "/bin/bash" ]; then
name=`head -n $i /etc/passwd | tail -1 | awk -F: '{print $1}'`
echo -n "$name "
let number=$number+1
if [ $number -eq 5 ]; then
break
fi
fi
done
echo
本文轉自 北冥有大魚 51CTO部落格,原文連結:http://blog.51cto.com/lyw168/1957413,如需轉載請自行聯系原作者