BLOG

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

こんにちは、おはじきです。
シルバーウィーク、終わっちゃいましたね。
みなさん充実した4連休を過ごすことができましたでしょうか?
私は、非常によく眠ることができ、充実した連休でしたね。

正直言うとだらだら過ごしてしまったので今日からまた頑張っていきます。

今回は、前回に引き続きシェルスクリプトを解説します。
前回は初歩的な部分の解説に留まったので、今回は少しレベルを上げて引数を渡してみたり、
if文やcase文を利用した条件分岐などを扱います。

引数

引数というのはプログラムをスタートさせる時に使用者がプログラムに渡す値のことを指します。
引数を渡すことによってプログラムはその引数を利用して計算したり、
条件分岐や繰り返し処理をしたりして、渡す引数によって違う結果を返してくれます。
ではLinuxにおける引数の渡し方を見てみましょう。
実行するスクリプト 引数1 引数2 …
のようにスクリプトを実行するタイミングで後にスペース区切りで引数を書いていきます。
実際に画像で見てみましょう。

$0には実行するプログラム名が格納されています。
$1が1つ目に渡した引数を、
$2が2つ目に渡した引数を参照してくれます。
$3の3つ目の引数は存在しないので空になります。

今回は書いていませんが、他にも$#には渡された引数の数が、$$には実行するスクリプトのプロセスIDが格納されています。

では次に、引数を利用した条件分岐について解説しますが、
その前に条件分岐を利用するにあたって必要なtestコマンドについて説明します。
if文の条件式にtestコマンドを利用する事で、
数値の大小を比較したり、指定したファイルが存在するかを確認でき
その結果によって処理を分岐できます。
オプションが非常に多いのですがLpicのテストによく出るみたいなので是非扱えるようにしておきましょう。

-f ファイルファイルがあれば真(ディレクトリは含まない)
-d ディレクトリディレクトリがあれば真
-r ファイルファイルが存在し、読み込み可能であれば真
-w ファイルファイルが存在し、書き込み可能であれば真
-x ファイルファイルが存在し、実行可能であれば真
-s ファイルサイズが0より大きいファイルがあれば真
-Lシンボリックリンクであれば真
-e ファイルファイルがあれば真(ディレクトリも含む)
ファイル1 -nt ファイル2ファイル1よりファイル2の方が修正時刻が新しければ真
ファイル1 -ot ファイル2ファイル1よりファイル2の方が修正時刻が古ければ真
数値1 -eq 数値2数値1と数値2が等しければ真
数値1 -ge 数値2数値1が数値2以上であれば真
数値1 -gt 数値2数値1が数値2より大きければ真
数値1 -le 数値2数値1が数値2以下であれば真
数値1 -lt 数値2数値1が数値2より小さければ真
数値1 -ne 数値2 数値1と数値2が等しくなければ真
!条件式条件式が偽であれば真
条件式1 -a 条件式2条件式1と条件式2が真であれば真(and文)
条件式1 -o 条件式2どちらかの条件が真であれば真(or文)

if文

if文を用いる事によって条件分岐(条件によって行う処理を選択する)を実現できます。
まずは書式を見てみましょう。
if 条件式
then
実行文1
else
実行文2
fi
条件式が真(TRUE)の場合は実行文1が、
偽(FALSE)の場合は実行文2が実行されます。

では実際にif文の処理を見てみましょう。

testコマンドの-gtオプションを使っているので、引数1が引数2より大きければ真、そうでなければ偽となります。
今回の場合は引数1に10、引数2に5を渡しているので真となり$1(10)の方が大きいとなります。

case文

条件分岐にはcase文というものもあります。
一つの条件の結果によって様々な結果に分岐したければこちらを利用すると良いでしょう。
書式を見てみましょう。
case 式 in
値1)
実行文1 ;;
値2)
実行文2 ;;
esac

複数の実行文を設定し、式の結果と値が一致した実行文を実行するといった書き方ですね。
では実際に見てみましょう。

この文では渡された引数(1~7)によって表示する文字列が変わります。
画像では4が渡されているのでWEDNESDAYが表示されています。
この様に一つの値に対して複数の分岐を用意したい時にcase文は最適です。
実行文の後にそれぞれ「;;」を、最後に「esac」を記述する事を忘れないでくださいね。

最後に

今回は引数と条件分岐について解説しました。
引数はもちろんの事、if文やcase文を扱えるようになると、
よりスクリプトの幅が広がってプログラミングっぽい事ができるようになってくるので、
複雑にはなってきますが、想定通り実行できた時の喜びというのも実感できるようになってくるのではないでしょうか。
次回は繰り返し文について解説したいと思いますのでそちらもご覧いただけると幸いです。
それでは。

BLOGトップへ戻る