一時ファイル作成と削除

一時ファイルを作成するとき
他の一時ファイルと名前が被るとエラーをおこす
これを避けるには
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正常終了

プロセスの再起動

プロセスに割り込み

プロセスを終了
15
プロセス終了
trap コマンドとプロセスに関しては
シグナルと trap コマンド
を参考にさせていただきました

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
これをリダイレクトという機能をつかうことで
ファイルに記録するようにすることができる
< は標準入力のリダイレクト 標準入力のリダイレクトの使い道は 設定ファイルの読み込みとかに使う この機能を使うことで 設定ファイルをつくり、それをもとにバックアップなど の処理を行うことができる >> は標準出力のリダイレクト
これはファイルの追記に使う
追記される場所は、ファイルの最終行
>もあるけど、こっちはファイルを上書きするので
つかうときには注意

シェルスクリプトでの

シェルスクリプトで
1増やすというときには
n=$((${n}+1))
というように
$(( )) の中に記述する
$(( )) の中に書いた場合は
計算結果が返される
もし
n=1
なら
$((${n}+1))


注意点としては
$(( ))
で囲まずに”” とかで囲むと
文字列になってしまう
試しに
端末を開いて
n=1
として
echo $n
とすると
1
が表示される
では
これを
echo “$n+1”
とすると
1+1
とでてくる
今度は
echo $((n+1))
とすると
計算結果の2がでてくる
Screenshot-2012-12-13 21:19:59

シェルスクリプトで使う条件式

シェルスクリプトで条件式を書くときによくでてくる
条件をメモ
-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 というコマンドをつかったと解釈されてしまう