shellscriptのfor,while,untilなどを勉強したのでまとめます。
for文
書式
変数に値を格納してその値の個数分ループする。
for 変数名 in 値;
do
処理
done
例
for var in 1 2 3 4 5;
do
echo $var
done
for var2 in `seq 1 5`; #seq 1 2 10 だと 1 3 5 7 9が格納される
do
echo $var2
done
どちらも実行すると1行ずつ数値が表示される。
(seqを使って指定すると、短く書ける。インクリメントする数も指定できる。)
break・continue
# break
for var in `seq 1 10`;
do
echo $var
if [ $var -eq 5 ];
then
break
fi
done
# continue
for var2 in `seq 1 10`;
do
if [ $var -eq 3 ];
then
continue
done
echo $var2
done
数値が5のとき終了する文と、数値が3のとき表示しない文。
for文でコマンドを実行
for com in pwd ls;
do
echo $com #コマンドは実行されない
$com #コマンドが実行される
done
変数に文字列を格納して、$変数名とかけば実行ができる。
while文
条件が満たされている間はdo~doneの処理を実行する。
書式
while [ 文字列 ] or (( 数値 ));
do
処理
done
数値演算は$(( ))
だけど、while文では(( ))
となる。
例
*var変数がある前提で
# 文字列
read -p 'var変数の中身' var
while [ $var != 'end' ];
do
echo 'yes!'
read -p 'var変数の中身' var
done
# 数値
varn=0
while (( $varn < 10 ));
do
echo $varn
varn=$(( $varn + 1 )) #これがないと無限ループになる
done
上はendという文字列を入力したら処理が終了する。
下は変数$varnが10より小さい場合に数値を表示し、最後の行で変数をインクリメントしている。
break
breakが実行されると、ループ自体が終了する。
var=0
while (( $var < 10 );
do
if [ $var -eq 7 ];
then
break
fi
var=$(( $var + 1 ))
done
この例では$varが7になったらループを強制終了させる。
continue
continue以降の処理を中止し、ループを繰り返す。
var=0
while (( $var < 10 ));
do
echo $var
if [ $var -eq 7 ];
then
continue
fi
var=$(($var+1))
done
これを実行すると$varが7になったら、最後のインクリメントが行われずに無限ループになる。
出力は下記のようになる。(Ctrl+Cで終了)
1
2
~~
6
7
7
.
.
whileでファイルを読み込む
読み込ませるファイル
1
2
3
sample
hello
やり方
while read var
do
echo $var
done < 'sample.txt'
----------- or -----------
cat 'sample.txt' | while var
do
echo $var
done
catで変数を読み込もうとしたらエラーが正しく処理されなかった。
変数を使うときは上の方がいい。
出力
1
2
3
sample
hello
whileの条件にread 変数名
を書くことで外部ファイルを変数に格納する。(1行ごと)
その変数をechoで表示している。
until文
条件にマッチするまで処理を続ける。
書式はwhileと同じ。
例
var=0
until (( $var > 10 );
do
var=$(( $var + 1 ))
done
$varが10より大きくなるまでインクリメントを続ける。
間違いがありましたらご指摘ください。