スクリプトメモ
bash コマンドは日経Linux のコマンド一覧に
載っていないので検索
http://kazmax.zpp.jp/cmd/b/bash.1.html
によれば
bash -e
で
コマンドが0以外の終了ステータス
つまりエラーがあれば終了するようになる
これは処理の最後に
rm -Rf “./$dir”
として
$dir がからのままここに来ないようにする
ただし -e オプションは途中で以上終了しても
止まってくれない
#!/bin/bash false| true echo "止まらない" true| false echo “止まる"
というファイルを実行すれば結果がわかる
止まらない 止まる
というように結果として止まらない
なので bash -e を信用しないこと
PIPESTATE などで判断するといい
次に exec コマンド
【 exec 】 現行のジョブに置き換えてコマンドを続行する
を参考にするといい
これは標準エラーを捨てるのにも使われる
exec 2> /dev/null
とすれば /dev/null
に出力され消えることになる
主な書式は
exec2 > file
とすれば
以後のシェルスクリプトのエラー出力を
file に書き出す
というようになる
書籍にある
exec2 > ./$(basename $0).$(date + %Y%m%d%H%M%S).log
とすれば
実行ファイル名.日付.log
というファイル名になる
bash のオプションに
xvとあるけど
どっちもログを標準エラー出力にする
違いは
bash – コマンド (プログラム) の説明 – Linux コマンド集 一覧表
を参考に
$(basename $0)
はシェルスクリプトの名前
試しに
vim test.bash
で作成
#!/bin/bash basename "$0" echo $0
実行するとわかるけど
echo との違いはパスを含まず
ファイル名だけ表示されること
結果は
test.bash /home/vagrant/test.bash
というようになる
判定で、それぞれ変数dir に日付が入っているか
そして
本日付の圧縮ファイルがあるかを調べるのが
dir="$(date +%Y%m%d)" [ ! -e "$dir.tar.gz” ]
の部分
-gt はシェルスクリプトの比較演算子
-e もおなじ
を参考にソースを読むことに
-e の意味は、ファイルが存在するなら
という意味
-gt は〜より大きいという意味
英語の greater than の略
-gt については
を参考にしました
!は条件の反転になるので
! -e ならファイルが存在しないのならという意味に
なお
[Sh]簡素なif文は一行で書く[Sh]簡素なif文は一行で書く
でわかったのですが
シェルスクリプトの場合1文で書くときには
if を省けるようです
このため、今回の [] の中身は if の判定でした
このため
[ "$dir" -gt "20140101” ]
は日付が 20140101 より大きいのなら
という判定になり
[ ! -e "$dir.tar.gz” ]
は
日付.tar.gz というファイルが存在しないのなら
という判定になります