bashプログラミングbashプログラミング:ループ文ループ文
循環:循環体コードを0、1または複数回実行します.
入力条件:ループに入る条件
終了条件:ループ終了の条件
forループ:
for VARIABLE in LIST; do
じゅんかんたい
done
例1:スクリプトを書き、20人のユーザーを作成し、ユーザー名をパスワードとしてユーザーに付与
例2:スクリプトを作成し、ディレクトリの下にあるすべてのファイルのタイプを表示します.
例3:ユーザーのプライマリ・グループを表示するスクリプトを書く
whileサイクル:
while CONDTION; do
じゅんかんたい
done
条件:CONDITIONが「真」である場合
終了条件:CONDITIONが「偽」の場合
例:100以内のすべての正の整数の和を求めるスクリプトを書きます.
例:99乗算テーブルを印刷するスクリプトを作成する
unitlサイクル:
until CONDITION; do
じゅんかんたい
ループ制御変数の修正式
done
条件:CONDITIONが「偽」の場合
終了条件:CONDITIONが「真」の場合
例:ファイルが存在しない場合にファイルを作成するスクリプトを書きます.
ループ制御:
continue[n]:本輪サイクルを早めに終了し、直接次のラウンドに入る.
break[n]:ループを早期に終了する;
例:100以内のすべての偶数の和を求めるスクリプトを書く
例:ユーザーがログインしているかどうかを確認する間隔
whileサイクルの特殊な使い方:
ファイルの各行を巡回:
while read VARIABLE; do
じゅんかんたい
done 例:UIDが偶数のすべてのユーザを探し出し、そのユーザ名とID番号を表示する.
forループの特殊な使い方:
for ((expr1;expr2;expr3)); do
じゅんかんたい
done
expr 1:制御変数を定義し、初期付与する.
expr 2:サイクル制御条件;
入力条件:制御条件は「真」
終了条件:制御条件が「偽」
expr 3:制御変数の修正
例:100以内のすべての正の整数の和を求める.
入力条件:ループに入る条件
終了条件:ループ終了の条件
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."