- ベストアンサー
シェルスクリプトの内容確認方法 - Solarisスクリプトについて
- シェルスクリプトの内容を確認する方法についてご質問いただきました。Solarisのスクリプトに関する詳細を説明します。
- 質問文章では、特定のスクリプトファイルについての情報を求めています。具体的には、スクリプト内のコマンドや条件分岐に関する詳細を知りたいとのことです。
- シェルスクリプトの内容を把握するためには、スクリプトファイルを確認し、各行の意味やコマンドの動作を理解する必要があります。本記事では、Solarisのスクリプトの内容確認方法や各行の意味について解説します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>についてですが、このスクリプトの場合、「esac」の後に処理が特にあるわけではないので、結果的には exit1 の行は有っても無くても同じという事になるのでしょうか? 引数はstartまたはstopが正しい引数なので、それ以外が来た場合、異常終了であると親プロセスには告げる必要がありますので、0ではなく1でexitするのが正しい処理です。 無くても大きな問題はありませんが、たとえばブートプロセスがログを残すなどの処理をする場合(OKとかFilureとか表示するとか)、あった方が望ましいですね。 じゃないと失敗しているのにexit 0が実行されて正常終了になってしまいますから。 >( startという引数でない場合は、12行目が実行、13行目で異常終了となり、スクリプトの最後までは実行されることはないという認識で良いですよね?) されません。なので、exit 0 は実行されません。
その他の回答 (3)
- takapiii
- ベストアンサー率55% (944/1707)
>すると、12行目で >「Usage: /etc/rc2.d/S99nodemanager start」 >と出力されることは通常ではあり得ない、という事になるのでしょうか? 細かく書くと長くなってしまいますが、通常はブートプロセスが親になってブート時にstartという引数を与えてこのshellを自動起動します。 シャットダウン時には、stopという引数を与えて起動しますので、*)つまりそれ以外の値が来る事は通常ありえません。 但し、このshelは手動起動もできるので、Usage(使い方)が表示されるように作っているだけで、この方法は一般的です。 なお、echoなので、Usageの最後は、startかstopのどちらかが表示されるんじゃなく、そのまま{start | stop}と表示されます。これはstartまたはstopのどちらかを引数に与えてくださ、という意味に解釈されます。 >この場合、exit1を経由した時点でどのような動作になるのでしょうか? >「1を親プロセスに返して」との事ですが、"親プロセス"とは何を指すのでしょうか? exitはシェルスクリプトの終了コマンドですので、終了ステータス1(1は通常異常終了)の状態で、親であるブートプロセス(正確に言うともっと細かな話になりますのでOSのブートプロセスのひとつと認識してください)に終了を告げます。 終了を告げられたブートプロセスは次の別の処理(別の何かを起動するとか)に入ります。 なので、exit 1を経由した時点で、その後の処理はスキップされます。
お礼
詳しい説明、ありがとうございます。 内容・動きが理解できていました。 >この場合、exit1を経由した時点でどのような動作になるのでしょうか? >「1を親プロセスに返して」との事ですが、"親プロセス"とは何を指すのでしょうか? についてですが、このスクリプトの場合、「esac」の後に処理が特にあるわけではないので、結果的には exit1 の行は有っても無くても同じという事になるのでしょうか? ( startという引数でない場合は、12行目が実行、13行目で異常終了となり、スクリプトの最後までは実行されることはないという認識で良いですよね?) 初歩的な質問で申し訳ございませんが、よろしくお願いいたします。
- takapiii
- ベストアンサー率55% (944/1707)
(3)の質問の意味が違ったかもしれないので補足です。 なぜかstop)がありませんが…。 start以外が来た場合(本当はstopの場合の処理も必要ですが)、 Usage: /etc/rc2.d/S99nodemanager{ start | stop }と表示してshellは終了します。その際、1を親プロセスに返して異常終了を通知します。 case文を抜けるのは;;です。 exit 1を経由しなければ、esacでcase文の終端になるので、exit 0 で正常終了です。
- takapiii
- ベストアンサー率55% (944/1707)
(1)一つ目の引数の値 (2)$1の値で処理が振り分けられます。startの場合は7-10行目が実行されます。 (3)esacがcase分の終端
お礼
ご回答、ありがとうございます。 このスクリプトファイルは、サーバ起動時にサービスとして登録されています。 ※すみません、スクリプトは他の人が作ったもので確認ができません。 (間違ったスクリプトになってしまっている可能性もあります) すると、12行目で 「Usage: /etc/rc2.d/S99nodemanager start」 と出力されることは通常ではあり得ない、という事になるのでしょうか? (startの引数の場合は7-10行目が実行されてcase文を抜けるため) この場合、exit1を経由した時点でどのような動作になるのでしょうか? 「1を親プロセスに返して」との事ですが、"親プロセス"とは何を指すのでしょうか? たびたび申し訳ございませんが、よろしくお願いいたします。
お礼
ありがとうございます。 モヤモヤ感がクリアされました。 なるほど、その通りですね。 ログに記録が残ったことを考えると、おっしゃる通りです。 何度もご回答いただき、ありがとうございました。