# loop ##### for loop ```shell 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 ```shell ## 讀取檔案內容 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 ``` ##### break and continue ```shell 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 ```shell 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 ```shell _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 ```