BLOG

【Linux研修】おはじきの記録9

こんにちは、おはじきです。
最近天気があまり良くない事もあって大分涼しくなってきましたね。
ついこの間まで1日中エアコンをつけっぱなしで生活していましたが、
ここ1週間はほとんどエアコンをつけなくても良いくらいの室温でとても快適です。
このまま涼しくなってくれるといいなと思っていると、あっという間に冬になって寒くて布団から出づらい日々に変わっていくんでしょうね。

さて、今回も引き続きシェルスクリプトについて解説します。
前回は引数やif文、case文といった条件分岐のお話をしましたが、
今回はfor文、while文といった繰り返し処理についてお話していきます。

for文

まずはfor文を用いた繰り返し処理の書式を見てみましょう。
for 変数 in 変数の値をスペース区切りで羅列
do
実行文
done


forの後に任意の変数名を宣言してinの後にスペース区切りでその変数に入れたい値をいくつでもいいので宣言します。
そしてdoの後に宣言した変数を利用した実行文を書いてdoneで締めます。
実際に見ていきましょう。

このスクリプトでは引数に最大で7つの値を受け付けてそれらの値を順番に「〇曜日」の〇の部分に展開します。
因みにこの場合7つまで引数を受け付けていますが、
スクリプト実行時に渡す引数が7つより少なくてもエラーが出る事はなく、
例えば5つ引数を渡していれば5つ分だけ結果が表示されます。
また7つ以上引数を渡してしまった場合は7つ目の引数まで繰り返し処理を実行しそれ以降の引数に対して処理は行われず値が渡されなかったことになります。

ここでfor文で使えるコマンドを一つ紹介しましょう。
seqコマンドを使うことで、連続した数値が自動で生成されます。

この様にseqコマンドに渡した引数まで順番にカウントしてくれます。
またseqコマンドは複数の引数を渡すことができます。
2つ渡した場合は1つ目の引数の数字~2つ目の引数の数字までカウントします。
3つ渡した場合は1つ目の引数から3つ目の引数まで、2つ目の引数の数字分飛ばしながらカウントします。
seq 1 3 10と宣言すれば1 4 7 10と表示されます。

while文

続いてwhile文ですね。
こちらもfor文と同じで繰り返し処理をするための構文ですが、
for文との違いは条件文を記述して、その条件を満たしている間(TRUEである間)だけ処理を実行するという仕様になっています。
書式を見てみましょう。
while 条件文
do
実行文
done

それでは実際に見てみましょう。

条件式としてわかりやすいのはやはりtestコマンドですね。
上の例では、引数に渡した値を新たに変数iを作って代入し、それが10より小さい場合のみ処理が実行されます。
((i=i+1))の部分で変数iの値を1増やし、doneにたどり着いたら条件文に戻ります。
その過程を条件文がTRUEである間繰り返します。
変数の値を増やしてまた変数に代入し直す場合は(())で囲います。
i=i+iだけでは計算してくれないので注意してくださいね。

readコマンド

今回でシェルスクリプトに関する解説は最後になりますのでここでシェルスクリプトに役立つコマンドを1つ紹介させてください。
readコマンドはスクリプトの処理中にユーザーから入力を受け付けます。
実際に見てみましょう。

echoコマンドの-nオプションは改行をしないという指示になります。
read 変数名 の部分が実行されたタイミングでユーザーの入力を受け付けて、入力された値がname変数に代入されます。
引数という形以外でもスクリプト実行時にユーザーが任意の値を入力する事ができるという事は覚えておいて損はないと思います。

最後に

これまで3回に渡ってシェルスクリプトについて解説してきました。
シェルスクリプトは運用や監視など、Linuxでの作業をとても便利にしてくれる重要なツールです。
サーバーエンジニアとして業務に携わる方は是非マスターして日々の業務の効率化を実現してみてはいかがでしょうか。
それでは。

BLOGトップへ戻る