一時ファイルを作成するとき
他の一時ファイルと名前が被るとエラーをおこす
これを避けるには
mktemp コマンドを使う
mktempコマンドで指定する
X
の数は6つ以上でないとエラーになる
6以上は、Xになる
mktemp コマンドの解説は
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/348mktempdir.html
にわかりやすい解説が載っています
一時ファイルの作成はこれでできるので
次に削除について
削除は
trap コマンドを使います
trap “rm -f 一時ファイルのパス” 0 1 3 15
で削除します
trap コマンドは
1番めの引数
“” で囲んだところに実行するコマンド
2番め以降の引数に
シグナル番号の指定をします
ここで指定したシグナルが発生したときに
コマンドが実行されます
0 1 2 3 15
は定番の書き方で、どんな場合でもコマンドが実行されます
ちなみに、シグナルの意味は
0正常終了
1
プロセスの再起動
2
プロセスに割り込み
3
プロセスを終了
15
プロセス終了
trap コマンドとプロセスに関しては
シグナルと trap コマンド
を参考にさせていただきました
カテゴリー: shell script
shell script での && と ||
プログラミングをするときに
java とか C++ では
&&と||は論理演算子になります
&&は And
|| は OR です
しかし、シェルスクリプトでは
||
はリスト演算子になり
直前に実行したコマンドが異常終了や失敗したときに
直後のコマンドを実行します
よく使うのは
ping で生死確認して
反応なし、つまりサーバーダウンなら
メールを送信するというものです
また、&& も意味が違っていて
直前に実行したコマンドが成功した場合に
直後のコマンドを実行します
&&は||の逆になります
/dev/null 2>&1 について
/dev/null
にいれると、綺麗に消える
/dev/null
は特殊ファイルで、スクリプトのサンプルとかによく登場する
これは、書き込んだデータがすべて捨てられる
という変わったファイル
次に 2>&1 について
この 2 は
標準エラー出力のことで
エラーメッセージのこと
> はリダイレクト
> は上書き、>> は追記
1 は、標準出力のこと
つまり、2>&1 は
標準エラー出力を
標準出力にリダイレクトするということ
/dev/null 2>&1
とすることで
エラーメッセージが表示されなくなる
ということ
設定ファイルを読み込むスクリプト
設定ファイルを読み込むスクリプトを
while をつかって記述するには
まずは
SETOMGDIR=”設定ファイルのパス”
で変数に設定ファイルのパスを設定して
while read path;do
処理内容
done < $SETINGDIR
というように、 < を使って標準入力をリダイレクト
そして、read コマンドを使うことで
設定ファイルを1行ずつ読み込んで
変数 path に代入していく
設定ファイルによくある、コメントアウト
これの対処方法は
if [ -n "`echo $path | grep '^#'`" ]; then
continue
fi
というように
^#で行頭に#がある部分を見つけて
スキップすれば対処できる
-n は
文字列の長さが1文字以上
つまり、空白行は省くので、これで空行もとばせる
リダイレクトと標準入力
シェルのコマンドは
データを受け入れる入り口として
標準入力
出口には
標準出力がある
標準入力はキーボードからの入力
標準出力は端末への結果表示という感覚でOK
これをリダイレクトという機能をつかうことで
ファイルに記録するようにすることができる
<
は標準入力のリダイレクト
標準入力のリダイレクトの使い道は
設定ファイルの読み込みとかに使う
この機能を使うことで
設定ファイルをつくり、それをもとにバックアップなど
の処理を行うことができる
>> は標準出力のリダイレクト
これはファイルの追記に使う
追記される場所は、ファイルの最終行
>もあるけど、こっちはファイルを上書きするので
つかうときには注意
シェルスクリプトでの
シェルスクリプトで使う条件式
シェルスクリプトで条件式を書くときによくでてくる
条件をメモ
-n 文字
文字の長さが1以上なら真
-z 文字
文字の長さが0なら真
文字1 = 文字2
文字1と文字2が一致するなら真
文字1 != 文字2
文字1と文字2が一致しないなら真
整数1 -eq 整数2
整数1と整数2が一致するなら真
整数1 -gt 整数2
整数1が整数2より大きければ真
整数1 -lt 整数2
整数1が整数2より小さければ真
整数1 -ne 整数2
整数1と整数2が一致しないなら真
-f ファイル
ファイルが通常ファイルなら真
-x ファイル
ファイルが実行可能なら真
!条件式
条件式の否定
つまり、条件にあてはまらないなら真
条件式1 -a 条件式2
条件式1と条件式2がともに真なら真
&&と同じかんじ
条件式1 -o 条件式2
条件式1か条件式2、いずれかが真なら真
||とおなじ
if [ $# lt -1 ] の意味
if [ $# lt -1 ] の意味
これは、シェルスクリプトでよくあるifの典型的な書き方
[ ] は中の条件式を評価する sh の test コマンド
じつは [ と ] がコマンドになっている
なので、空白を開けるようにして書く
lt は
less than という意味で
日本語にすると~より小さいという意味
$# は引数の数という意味なので
この
if [ $# -lt 1 ]
という意味は
引数の数が1より小さいならという意味になります
これは、エラー処理とかで使われます
ほとんどのコマンドの場合は
引数があるので、これで判別可能です
たとえば
cd コマンドなら
cd /home
なら
/home
が引数になります
このためエラー処理を書くときには
ほとんどの場合なら
if [ $# -lt 1 ]:then
echo “エラーメッセージ”
exit 1
fi
という書式になります
exit 1 はエラー終了になります
C言語とかやっているとよくみかける終了の仕方です
シェルスクリプトの注意点
シェルスクリプトの注意点についてのメモです
シェルスクリプトでは
java script のように、変数に値を代入できます
もちろん、変数にディレクトリのフルパスを代入することもできます
ただし、注意点として、=のあとに空白をいれてはいけないということ
例えば、
BKPREFIX=”/backup/dirback”
というときに
BKPREFIX= ”/backup/dirback”
とすると意味が変わってしまう
これは、シェルスクリプトでは
スペースをあけてしまうと
コマンドとして認識されてしまうから
なので
BKPREFIX= ”/backup/dirback”ので
としてしまうと
BRPREFIX というコマンドをつかったと解釈されてしまう