sh|shellで条件分岐:case文

シェルでの条件分岐にはcase文が便利。
変数内の文字列で条件分岐する場合はcase、それ以外はif、というところだろうか。

case "$var" in
  "a" ) 処理1 ;;
  "bb" ) 処理1 ;;
  "c c c" ) 処理3 ;;
esac

case_word.sh

#!/bin/bash

# "q" 入力以外で終了しないように無限ループにする。
while :
do
  read key
  case "$key" in
    "a" ) echo "aが入力されました。" ;;
    "bb" ) echo "bbが入力されました。" ;;
    "c c c" ) echo "c c cが入力されました。" ;;
    "q" ) echo "終了します。"
          break ;;
  esac
done

exit 0

このシェルスクリプト case_word.sh の実行結果は、以下の通りとなる。

$ ./case_word.sh
a ←キー入力
aが入力されました。
bb ←キー入力
bbが入力されました。
c c c ←キー入力
c c cが入力されました。
a aaa ←キー入力
b b ←キー入力
ccc ←キー入力
q ←キー入力
終了します。
$

因に条件にはワイルドカード「*」も指定できます。
条件によっては 1つめの条件+2つめの条件と、複数の条件にマッチする場合が出てきますが
最初の条件の処理が実行されますのでご注意ください。

参考:http://shellscript.sunone.me/case.html
参考:http://itpro.nikkeibp.co.jp/article/COLUMN/20060228/231123/

photo by: Alex E. Proimos

sh|shell内で文字列置換

シェルスクリプト内で文字列を置換するのにえらく時間がかかった。。。
結局echoをパイプ実行して代入するという方法に落ち着いた。

aaa=abcdollers
bbb=`echo $aaa | sed -e 's/abc/100/' `
echo bbb

上記方法だと、検出した最初の「abc」を「100」に置き換える。
文字列内全てを置き換えたい場合は

aaa=abcdollers
bbb=`echo $aaa | sed -e 's/abc/100/g' `
echo bbb

とする。
何でもそうだけど、わかっちゃえば簡単。。。。

photo by: Rosa Menkman