loop
for loop
for i in var1 var2 var3; do echo $i; done
for ((i=1;i<=10;i++)); do echo $i; done
for i in $(ls *.log); do echo $i; done
for t in {1..10};do echo $t; done
1
2
3
4
5
6
7
8
9
10
for t in {1..10..2};do echo $t; done
1
3
5
7
9
## 列出目前資料夾的所有目錄名稱
for dir in */;do echo "${dir%/}"; done
## Infinite Loop
for (( ; ; ))
do
echo "infinite loops [ hit CTRL+C to stop]"
done
while loop
## 讀取檔案內容
cat tables_name.lst | while read sch tab;do
> echo "export to $tab.ixf of ixf messages export_$tab.msg select * from $sch.$tab"
> done
## while loop 的應用
## 每 3 秒監看 /worktmp 的磁碟使用狀況
while true;do
> df -h | grep /worktmp
> sleep 3
> done
## 管理 DB2 時常用
while read s t;do
> db2 "select count(*) from $s.$t"
> done < tables.lst > count-tables.out
## 如果是 CSV
while IFS=, read s t;do
> db2 "select count(*) from $s.$t"
> done < tables.csv > count-tables.out
## 迴圈計數 Loop Counter
x=1
while [ $x -le 5 ]
do
echo "Welcome $x times"
x=$(( $x + 1 )) 或者 x=$[$x + 1]
done
## 內容排序後導入迴圈
## <(sort -r lost.txt) 檔案內容預處理
while IFS='.' read -r a b c d e;do
> echo "$a";
> done < <(sort -r lost.txt)
## 讀取整行
filename=$1
while read line; do
# reading each line
echo $line
done < $filename
## Reading file by omitting backslash escape
while read -r line; do
# Reading each line
echo $line
done < company2.txt
until loop
until [[ $a -eq 1 ]]
do
echo "Value of a is $a"
let a--
done
Infinite loop 無限迴圈
# while
while true
do
echo "Hi"
sleep 2s #will run every 2 sec
done
# for
for (( ;; ))
do
echo "Hi buddy"
sleep 2s
done
break and continue
count=0
until false
do
((count++))
if [[ $count -eq 5 ]]
then
continue
elif [[ $count -ge 10 ]]
then
break
fi
echo "Counter = $count"
done
Counter = 1
Counter = 2
Counter = 3
Counter = 4
Counter = 6
Counter = 7
Counter = 8
Counter = 9
For loop with array elements
DB_AWS_ZONE=('us-east-2a' 'us-west-1a' 'eu-central-1a')
for zone in "${DB_AWS_ZONE[@]}"
do
echo "Creating rds (DB) server in $zone, please wait ..."
aws rds create-db-instance \
--availability-zone "$zone"
--allocated-storage 20 --db-instance-class db.m1.small \
--db-instance-identifier test-instance \
--engine mariadb \
--master-username my_user_name \
--master-user-password my_password_here
done
Loop with a shell variable
_admin_ip="202.54.1.33|MUM_VPN_GATEWAY 23.1.2.3|DEL_VPN_GATEWAY 13.1.2.3|SG_VPN_GATEWAY"
for e in $_admin_ip
do
ufw allow from "${e%%|*}" to any port 22 proto tcp comment 'Open SSH port for ${e##*|}'
done
No Comments