bashプログラミングbashプログラミング:ループ文ループ文


循環:循環体コードを0、1または複数回実行します.
入力条件:ループに入る条件
終了条件:ループ終了の条件
forループ:
for VARIABLE in LIST; do
じゅんかんたい
done
例1:スクリプトを書き、20人のユーザーを作成し、ユーザー名をパスワードとしてユーザーに付与
#!/bin/bash
#
for user in user{1..10}; do
 if id $user; then
 echo "user is exists."
else
 useradd $user
 echo "Add user $user finished."
fi
done

例2:スクリプトを作成し、ディレクトリの下にあるすべてのファイルのタイプを表示します.
cat for1.sh
#!/bin/bash
#
for filename in /var/*; do
 file $filename
done

例3:ユーザーのプライマリ・グループを表示するスクリプトを書く
#!/bin/bash
#
for user in $(cut -d: -f1 /etc/passwd); do
 echo "$user primary group: $(id -n -g $user)."
done

whileサイクル:
while CONDTION; do
じゅんかんたい
done
条件:CONDITIONが「真」である場合
終了条件:CONDITIONが「偽」の場合
例:100以内のすべての正の整数の和を求めるスクリプトを書きます.
#!/bin/bash
#
declare -i sum=0
declare -i i=1
while [ $i -le 100 ]; do
 let sum+=$i
 let i++
done
echo "Sum: $sum"

例:99乗算テーブルを印刷するスクリプトを作成する
#!/bin/bash
#
declare -i i=1
declare -i j=1
while [ $j -le 9 ]; do
while [ $i -le $j ]; do
 echo -e -n "${i}X${j}=$[$i*$j]\t"
 let i++
done
 echo
 let i=1
 let j++
done

unitlサイクル:
until CONDITION; do
じゅんかんたい
ループ制御変数の修正式
done
条件:CONDITIONが「偽」の場合
終了条件:CONDITIONが「真」の場合
例:ファイルが存在しない場合にファイルを作成するスクリプトを書きます.
#!/bin/bash
#
file=/root/testfile
 until [ -f $file ]; do
 touch $file
 echo "file $file is touch finished"
done

ループ制御:
continue[n]:本輪サイクルを早めに終了し、直接次のラウンドに入る.
break[n]:ループを早期に終了する;
例:100以内のすべての偶数の和を求めるスクリプトを書く
#!/bin/bash
#
declare -i sum=0
declare -i i=0
while [ $i -le 100 ]; do
 let i++
if [ $[$i%2] -eq 1 ]; then
 echo "$1 is a odd"
 continue
fi
 let sum+=$i
done
echo "Sum: $sum"

例:ユーザーがログインしているかどうかを確認する間隔
#!/bin/bash
#
username=$1
declare -i count=0
while true; do
 if who | grep "^$username" &> /dev/null; then
   echo "$username is logged."
   break
 else
   let count++
   echo "$count : $username is not login"
 fi
   sleep 3
done

whileサイクルの特殊な使い方:
ファイルの各行を巡回:
while read VARIABLE; do
じゅんかんたい
done 例:UIDが偶数のすべてのユーザを探し出し、そのユーザ名とID番号を表示する.
#!/bin/bash
#
while read line; do
userid=$(echo $line | cut -d: -f3)
if [ $[$userid%2] -eq 0 ]; then
 echo $line | cut -d: -f1,3
fi
done < /etc/passwd

forループの特殊な使い方:
for ((expr1;expr2;expr3)); do
じゅんかんたい
done
expr 1:制御変数を定義し、初期付与する.
expr 2:サイクル制御条件;
入力条件:制御条件は「真」
終了条件:制御条件が「偽」
expr 3:制御変数の修正
例:100以内のすべての正の整数の和を求める.
#!/bin/bash
#
declare -i sum=0
 for ((i=1;i<=100;i++)); do
 let sum+=$i
done
echo "Sum: $sum."