SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

HRzine Day(エイチアールジン・デイ)は、人が活き会社が成長する人事のWebマガジン「HRzine」が主催するイベントです。毎回、人事の重要課題を1つテーマに設定し、識者やエキスパードが持つ知見・経験を、参加者のみなさんと共有しています。

直近開催のイベントはこちら!

HRzine×SmartHR 人材・組織活性化フォーラム

2024年12月6日(金)13:00~15:30

主要製品スペック一覧

人事業務の効率・確度・精度を高めるために欠かせないHRテクノロジー。その主な製品の機能を分野ごとに比較できる資料群です。製品検討の参考資料としてご活用ください。

eラーニング・LMS<br>主要製品スペック一覧 2024

eラーニング・LMS
主要製品スペック一覧 2024

その他のスペック一覧

人事労務管理システム<br>主要製品スペック一覧 2023

人事労務管理システム
主要製品スペック一覧 2023

タレントマネジメントシステム<br>主要製品スペック一覧 2023

タレントマネジメントシステム
主要製品スペック一覧 2023

Linuxを知らない人のためのLPICレベル1【101試験】入門 | 第5回

シェルスクリプトの構文・書き方と実行方法~パーミッションの設定も


  • Facebook
  • X
  • Pocket
  • note
  • hatena

if文による条件分岐

次のシェルスクリプトをsample2.shとして作成します。

/root/sample2.sh
#!/bin/bash
if test -f sample1.sh
then
  source sample1.sh
else
  echo "sample1.shがありません"
fi

sample1.shと同様に実行権限を付与してから、実行してみましょう。

sample2.shの実行結果
# ./sample2.sh
TEST
TEST2

sample2.shを実行したのに、sample1.shを実行したのと同じ内容が出力されていますね。この結果はいったん置いておいて、次にsample1.shのファイル名を次のように変更してから、sample2.shを再度実行してみます。

sample2.shを再度実行
# mv sample1.sh sample1.sh.bk
# ./sample2.sh
sample1.shがありません

実行結果が変わりましたね。これはどういうことでしょうか?

sample2.shの内容を詳しく見ていきましょう。各行の意味は次のとおりです。4行目に出てくるsourceコマンドは、引数で受け取ったファイルを実行します(コラムを参照)。

1行目#!/bin/bash(bashを使う宣言。上述のとおりです)

2行目if test -f sample1.sh(sample1.shというファイルがもし(if)あれば)

3行目then(その場合は)

4行目source sample1.sh(sample1.shを実行し、)

5行目else(それ以外の場合は)

6行目echo "sample1.shがありません"(”sample1.shがありません” と表示する)

7行目fiif文の終了)

最初に実行したときは「sample1.sh」が存在したので4行目が実行され、 2度目に実行したときは「sample1.sh」が存在しなかったので6行目が実行されたということです。

シェルスクリプトは、このようにある条件によって処理を分岐する条件分岐処理を、 if~then...else...fiという構文で記述できます。else...は省略可能で、その場合は「もし~だったら…する」という意味になります。

「source」コマンドについて

sourceコマンドは、引数に指定されたファイルを実行するコマンドです。source.(ドット)で書き換えることができるため、sample2.shの4行目は次のようにも書けます。

. sample1.sh

分かりづらいですが.sample1.shの間にスペースがある点に注意しましょう。スペースがないと意味をなさなくなってしまいます。また、相対パスの.とは意味が違うということも押さえておきましょう。

条件判定部分の書き換え

if文の条件のtest -f sample1.shという記述は、次のように書き換えられます。

if [ -f sample1.sh ]

こちらも分かりづらいですが、[]の前後にはスペースが必要な点に注意しましょう。

さまざまな条件分岐

さて、-f sample1.shの部分ですが、これは「ファイルsample1.shがあるか」を判定するものでした。シェルスクリプトではファイルの有無以外にも、さまざまなものを対象に条件分岐を行えます。例えば、次のような条件分岐もできます[1]

  • -d directoryA……「directoryA」があるか
  • ${VAL1} -eq ${VAL2}…… 変数VAL1VAL2の値が等しい(equal)か
  • ${VAL1} -ne ${VAL2}…… 変数VAL1VAL2の値が等しくない(not equal)か

また、この条件を満たすとき(「trueのとき」「真のとき」といいます)、このコマンドの実行結果は「0」になり、 条件を満たさないとき(「falseのとき」「偽のとき」といいます)、このコマンドの実行結果は「1」になります。実行結果は$?記号で取得できるので、次のシェルスクリプトでは「1」が3回表示されます。

sample3.sh
#!/bin/bash
test -d directoryA;
echo $?;
VAL1=10;
VAL2=20;
[ ${VAL1} -eq ${VAL2} ];
echo $?;
STR1=aaa
STR2=aaa
[ ${STR1} != ${STR2} ];
echo $?
sample3.shの実行結果
# ./sample3.sh
1
1
1

この条件の指定方法によって、様々な条件で分岐処理を行うシェルスクリプトを、組めるようになります。シェルスクリプトの便利さが見えてきましたね。

[1]: 文字列をチェックする場合には-eqの代わりに=-neの代わりに!=を使います。

変数の使い方

シェルスクリプトでは任意の値を代入できる変数が使えます。変数に値を代入するときには変数=値と記述します。イコール記号の前後にスペースが入っていると、代入ではなく「等しい」の意味になってしまうので注意しましょう。

また、変数の値を参照するときには、$変数または${変数}と記述します。右辺や条件式に登場するときには、この記述であることが多いです。

次のページ
for文による処理の繰り返し

この記事は参考になりましたか?

  • Facebook
  • X
  • Pocket
  • note
  • hatena
Linuxを知らない人のためのLPICレベル1【101試験】入門連載記事一覧

もっと読む

この記事の著者

土橋 直樹(システムアーキテクチュアナレッジ)(ツチハシ ナオキ)

システムアーキテクチュアナレッジにて講師を行う傍ら、IT技術情報ブログ「テックプロジン」や、スイーツ口コミサイト「スイートウォント」など、各種Webサービスの開発・運営に携わる。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事をシェア

  • Facebook
  • X
  • Pocket
  • note
  • hatena
HRzine
https://hrzine.jp/article/detail/84 2016/10/04 12:16

Special Contents

AD

Job Board

AD

おすすめ

アクセスランキング

アクセスランキング

イベント

HRzine Day(エイチアールジン・デイ)は、人が活き会社が成長する人事のWebマガジン「HRzine」が主催するイベントです。毎回、人事の重要課題を1つテーマに設定し、識者やエキスパードが持つ知見・経験を、参加者のみなさんと共有しています。

2024年12月6日(金)13:00~15:30

イベントカレンダーを見る

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング