スクリプトメモ

スクリプトメモ

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 については

#08 条件式を評価してみよう (1)

を参考にしました

!は条件の反転になるので
! -e ならファイルが存在しないのならという意味に

なお
[Sh]簡素なif文は一行で書く[Sh]簡素なif文は一行で書く

でわかったのですが
シェルスクリプトの場合1文で書くときには
if を省けるようです
このため、今回の [] の中身は if の判定でした

このため

[ "$dir" -gt "20140101” ]

は日付が 20140101 より大きいのなら
という判定になり

[ ! -e "$dir.tar.gz” ]


日付.tar.gz というファイルが存在しないのなら
という判定になります

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です