yossy-dev

I’m Software Enginner.

シェルスクリプトのif文とコマンドの終了ステータス

はじめに

新しいLinuxの教科書を読んだので備忘録

シェルスクリプトのif文の基本と終了ステータスについて


シェルスクリプトのif

基本の書き方

if <コマンド1>; then
    <コマンド1>の結果が真の場合の処理
elif <コマンド2>; then
    <コマンド2>の結果が真の場合の処理
elif <コマンド3>; then
    <コマンド3>の結果が真の場合の処理
else
    上記の結果がすべて偽である場合の処理
fi

sample-if.sh

#!/bin/bash

if [ "$1" = "bin" ]; then
    echo "OK"
else
    echo "NG"
fi

上記を実行

$ ./sample-if.sh bin
OK

$ ./sample-if.sh hello
NG

ifにはコマンドを指定する。

ちなみに上記sampleのifの [] もコマンドなので、直前直後にスペースを開けないとエラーになる。

ifで指定したコマンドが真か偽かはコマンドの終了ステータスで判断する

コマンドの終了ステータスが 0 の場合は真、 0 以外の場合は偽と判定される。

コマンドの終了ステータス

lsやgrepなどのコマンドはすべて終了時に終了ステータスと呼ばれる整数値を返す。

  • コマンドが正常に終了した場合は 0 を返す。
  • エラー時には0以外の値を返す。

終了ステータスがどのような値を取るかはコマンドによって違いがある。

ちなみに $? というシェル変数で前回のコマンドの終了ステータスを参照できる

$ ls
parameters.sh sample-if.sh

$ echo $?
0