それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

bash でコマンドがエラー終了したことを検出する。

bash でコマンドがエラー終了を調べてなんとかする。

シェルスクリプトのコマンドでエラーが起きたら、エラー表示したり、コマンド失敗のエラー手続きを実行する

なれてたら簡単なのですが、例外になれたプログラマや非表示の暗黙ステータスコードを使うのが初心者に分かりづらいみたいなのでメモとして残す。

成功時だけ実行して、失敗は実行しない。

コマンドを行単位で実行するのが早い

echo a && echo b 

失敗時に実行して、成功時には実行しない。

これも、コマンドを行単位で実行するのが早い。

touch a || echo error

if文を用いる場合:成功時

条件分岐は単純にifを用いても出来る。

if echo a ; then 
    echo b
fi

if の中に、コマンドを直接入れちゃう。「もしコマンドが成功したら」という意味になる。

if 文を用いる場合:失敗時

「もしコマンドが失敗したら」という意味になる。

if ! mkdir /a ; then 
    echo b
fi

if 文を用いる場合。if else

if ! mkdir /a ; then 
    echo failed
else
    echo success
fi 

ただし、if 句のなか、else 句の中は、空っぽはだめ

## これはエラーになる。
if touch a ; then 
    
else
    echo failed
fi 

代わりに何もしないを意味するコマンドtrueを実行する。

## : が何もしないコマンド
if touch a ; then 
   :     
else
    echo failed
fi 

コロン : の代わりに true でもいい

if touch a ; then 
   true     
else
    echo failed
fi 

何もしないコマンド を入れるか

何もしないコマンドにはいくつも候補があるので、調べて考えてみると面白いとおもう。

たとえば

/bin/true
/bin/false
: 
echo > /dev/null

まとめ

実行が成功したら次になにかする、実行が失敗したら次になにかする

command &&  echo success
command || echo error 
if command ; then 
    success
fi
if !command ; then 
    error;
fi