スクリプトメモ

スクリプトメモ

bash コマンドは日経Linux のコマンド一覧に
載っていないので検索

http://kazmax.zpp.jp/cmd/b/bash.1.html
によれば

1
bash -e


コマンドが0以外の終了ステータス
つまりエラーがあれば終了するようになる

これは処理の最後に

1
rm -Rf “./$dir

として
$dir がからのままここに来ないようにする

ただし -e オプションは途中で以上終了しても
止まってくれない

1
2
3
4
5
6
7
8
9
#!/bin/bash
 
false| true
 
echo "止まらない"
 
true| false
 
echo “止まる"

というファイルを実行すれば結果がわかる

1
2
止まらない
止まる

というように結果として止まらない

なので bash -e を信用しないこと

PIPESTATE などで判断するといい

次に exec コマンド

【 exec 】 現行のジョブに置き換えてコマンドを続行する

を参考にするといい

これは標準エラーを捨てるのにも使われる

1
exec 2> /dev/null

とすれば /dev/null
に出力され消えることになる

主な書式は
exec2 > file
とすれば
以後のシェルスクリプトのエラー出力を
file に書き出す
というようになる

書籍にある

1
exec2 > ./$(basename $0).$(date + %Y%m%d%H%M%S).log

とすれば
実行ファイル名.日付.log
というファイル名になる

bash のオプションに
xvとあるけど
どっちもログを標準エラー出力にする
違いは
bash – コマンド (プログラム) の説明 – Linux コマンド集 一覧表
を参考に
$(basename $0)
はシェルスクリプトの名前
試しに

1
vim test.bash

で作成

1
2
3
4
5
6
7
#!/bin/bash
 
 
basename "$0"
 
 
echo $0

実行するとわかるけど
echo との違いはパスを含まず
ファイル名だけ表示されること
結果は

1
2
3
test.bash
 
/home/vagrant/test.bash

というようになる
判定で、それぞれ変数dir に日付が入っているか
そして
本日付の圧縮ファイルがあるかを調べるのが

1
2
3
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 の判定でした

このため

1
[ "$dir" -gt "20140101” ]

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

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


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

コメントを残す

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