bash」タグアーカイブ

bashのスクリプトでif節やelif節を空にするとエラー

bashのスクリプトでifを使う時、thenfi間に何のコマンドも含んでいないスクリプトはエラーになってしまいます。

if [ $value = "abc" ]
then
  # 何もしない
fi

エラーの内容

bash: syntax error near unexpected token `fi'

何もしない分岐は削除すればいいだけですが、elif節やelse節での条件を簡略化したい場合など、何もしない分岐を作りたくなることもあるかなと思います。

そんな時はコロン:というBUILTIN COMMANDを使うと良いみたいです。

次のような感じで使います。

if [ $value = "abc" ]
then
  :
fi

elif節やelse節でも同様です。
困っている方は試してみてください。

Shellスクリプトでcase文の使い方メモ

bash(sh)でcase文を書くときの基本は次のような感じです。

case $変数 in
  パターン1)
    実行したい内容1
    ;;
  パターン2)
    実行したい内容2
    ;;
esac

ということで、case文でよく使われるパターンを2つほど紹介してみようと思います。

曜日ごとに異なる内容を実行したい場合(cronで便利です)

case `date +%a` in
  'Sun')
    日曜日に実行したい内容
    ;;
  'Mon')
    月曜日に実行したい内容
    ;;
  'Tue')
    火曜日に実行したい内容
    ;;
  'Wed')
    水曜日に実行したい内容
    ;;
  'Thu')
    木曜日に実行したい内容
    ;;
  'Fri')
    金曜日に実行したい内容
    ;;
  'Sat')
    土曜日に実行したい内容
    ;;
esac

ランダムで何か実行したい場合

case `expr $RANDOM % 3` in
  0)
    3分の1の確率で実行したい内容
    ;;
  1)
    3分の1の確率で実行したい内容
    ;;
  2)
    3分の1の確率で実行したい内容
    ;;
esac

Shellスクリプトでif文の使い方メモ

個人的によく使うif文の書き方をメモです。

使い方

if [ 条件 ]
then
  # 実行したいコマンド
elif [ 条件 ]
then
  # 実行したいコマンド
else
  # 実行したいコマンド
fi

elifが不要な場合はelifからの3行、elseが不要な場合はelseからの2行を削除してください。thenをよく忘れるので気をつけてください。

サンプル1

Shellスクリプトのコマンドラインオプション(数字)によって実行する内容を変えるサンプル。

$ cat example1.sh
#!/bin/sh
if [ "$1" -eq 10 ]
then
  echo aaa
else
  echo bbb
fi
$ ./example1.sh 10
aaa
$ ./example1.sh 20
bbb

-eq(equal)の他にも-ge(greater than or equal)-gt(greater than)-le(less than or equal)-lt(less than)-ne(not equal)なども使えます。

サンプル2

shellスクリプトのシンボリックリンクを作成して、ファイル名によって実行する内容を変えるサンプル。

$ cat example2.sh
#!/bin/sh
if [ `basename $0` = "exampleA.sh" ]
then
  echo AAA
else
  echo 222
fi
$ ln -s example2.sh exampleA.sh
$ ./example2.sh
222
$ ./exampleA.sh
AAA