0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

shellscriptのfor,while

Last updated at Posted at 2021-04-10

shellscriptのfor,while,untilなどを勉強したのでまとめます。

for文

書式

変数に値を格納してその値の個数分ループする。

for_ex.sh
for 変数名 in ;
do
    処理
done

for.sh
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

file.sh
# 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文でコマンドを実行

command.sh
for com in pwd ls;
do
    echo $com  #コマンドは実行されない
    $com       #コマンドが実行される
done

変数に文字列を格納して、$変数名とかけば実行ができる。

while文

条件が満たされている間はdo~doneの処理を実行する。

書式

while_ex.sh
while [ 文字列 ] or (( 数値 ));
do
  処理
done

数値演算は$(( ))だけど、while文では(( ))となる。

*var変数がある前提で

while.sh
# 文字列
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が実行されると、ループ自体が終了する。

break.sh
var=0
while (( $var < 10 );
do
    if [ $var -eq 7 ];
    then
        break
    fi
    var=$(( $var + 1 ))
done

この例では$varが7になったらループを強制終了させる。

continue

continue以降の処理を中止し、ループを繰り返す。

continue.sh
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でファイルを読み込む

読み込ませるファイル

sample.txt
1
2
3
sample
hello

やり方

file.sh
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と同じ。

until.sh
var=0
until (( $var > 10 );
do 
    var=$(( $var + 1 ))
done

$varが10より大きくなるまでインクリメントを続ける。

間違いがありましたらご指摘ください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?