webアプリケーションやサーバの運用をしているとシェルスクリプトを書くことが多いです。
シェルスクリプトでよく使うコードの書き方を知っておくと良いと思いまとめました。
・文字列比較で部分一致を判定
#!/bin/bash
## 変数にhogeが含まれるかを調べる
FOO="fugahoge"
if [ "`echo $FOO | grep "hoge"`" ]; then
echo "にゃーん"
fi
(少し難しいのでシェルスクリプト初心者の方は読み飛ばしていただいても大丈夫です)
if文は[]内のコマンドの終了ステータスが0の場合に指定した処理を実行します。
grepコマンドは入力値に指定したパターンが含まれる場合に終了ステータスが0になるため、if文での条件判定に利用できます。
・文字列の空文字判定
空文字の時のみ処理を実行
#!/bin/bash
FOO="hoge"
if [ -z "$FOO" ]; then
echo "にゃーん"
fi
空文字でないときのみ処理を実行
#!/bin/bash
FOO="hoge"
if [ -n "$FOO" ]; then
echo "にゃーん"
fi
・他のファイルから変数や関数を読み込む
. /usr/local/bin/hoge.txt
# または
source /usr/local/bin/hoge.txt
よく使うパラメータや関数を外部ファイルに定義しておき、シェルスクリプトでそれを読み込むことが結構あります。
. [ファイル]や source [ファイル]と書くと外部ファイルに記述された変数や関数を利用することができます。
. でも source でも同じ結果が得られるのでどちらを使っても構いません
ただ、sourceの方が可読性が高いのでこちらを使うと良いと思います。
・ 引数の数が不正な場合、処理を中止する
# 引数が2個でなければ処理を中断
if [ "$#" != 2 ]; then
echo "引数を2個指定してください"
exit 1
fi
自分が作ったスクリプトを他の人が使う場合「引数2個のはずが間違えて1個だけで実行してめんどくさい事になっちゃった」みたいなことが起こりえます。(自分が書いたスクリプトの使い方を1か月後には忘れている、ということも)
このような面倒な事態を防ぐためには引数を適切に渡していない場合はそこで処理を中断するという仕様にしておくことが有効です。
「$#」でシェルスクリプトに渡された引数の数を判定することができます。
・日付を取得して変数に格納する
#!/bin/bash
NOW_DATE=$(date +"%Y%m%d")
echo "$NOW_DATE"
20210313