2010年12月9日木曜日

シェルスクリプトで関数使わずにガードみたいなことをする

シェルスクリプト (bash/dash) を書かざるを得ない状況になっていて書いています。
しかし、不勉強が祟ってさっぱりぽんなわけです。

if [ -f $PATH ]; then
  if [ hoge condition ]; then
    prinf "really? "; read res
    if [ $res = 'n' ]; then (do_something_else に飛びたい); fi
  fi
  do_something
fi
do_something_else

上記のように、特定の条件下では確認をして、n だったら実行しないということをしたいのですが、関数にしていないのでガードみたいにして関数を抜けるということが出来ません。そこで以下のようにやって回避しています。

for APATH in "/path/to/a"
do 
  if [ -f $APATH ]; then
    if [ hoge condition ]; then
      prinf "really? "; read res
      if [ $res = 'n' ]; then break; fi
    fi
    do_something
  fi
done
do_something_else

大変無駄な感じですが、とりあえず動いているようです。

---
追記 12/09

やっぱり、関数にして以下のように書くのが良いようです。
テストもしやすいので、ぐっどです。

f() {
  if hoge; then
    if piyo; then
      if (user が no を選択); then return; fi
    fi
    do_something
  fi
}
f()
do_something_else

0 件のコメント:

コメントを投稿