« 2006年6月 | トップページ | 2007年12月 »

シェルスクリプト

長らく投稿がなかったのは何かと言うとユーザIDを忘れていたからです……アイタタタ。Yahooのと一緒、と書いておこう。

で、仕事でシェルスクリプトを勉強しています。ので本当メモ的にちょこっと。自分的メモ。

■if条件
  -d ファイル名    指定したファイルがディレクトリならtrue
  -e ファイル名    指定したファイルが存在しているならtrue
  -w ファイル名    指定したファイルが書き込み可能ならtrue
  -r ファイル名    指定したファイルが読み取り可能ならtrue
  -s ファイル名    指定したファイルのファイルサイズが0より大きければtrue
  条件 -o 条件    OR条件
  条件 -a 条件    AND条件
■特殊な変数
  $?          この変数が出てくる直前、最後に実行したコマンドの終了ステータス
■シェル変数
  str = `命令`    バッククォート内で実行されたコマンドの結果をstrに代入する
              ※コマンドは実際に実行されている
[例]msg=`mv ${sendfile} ${backUp}`

  この場合、strに格納される値は標準出力に出力された内容のみとなり、エラーが発生した場合は標準出力ではなくて標準エラー出力に出力されるため、strには出力内容はセットされない。
これをセットしたい場合は、
[例]msg=`mv ${sendfile} ${backUp} 2>&1`
と記述する。リダイレクトを指定することで、コマンドの実行結果をエラーも含めて全てmsgにセットする。
n>&m という記述は、ファイルディスクリプタn番の出力をm番にリダイレクトする。

※※※疑問※※※
[例]msg=`mv ${sendfile} ${backUp} 2>&1`
if [ $? -ne 0 ]; then
  EXIT_CODE=9
  Log E $EXIT_CODE \"`basename ${sendfile}`\"を\"${backUp}\"に退避できませんでした。[$msg]
  exit $EXIT_CODE
fi
★上記のように書いた場合、直前に実行されるのはmvコマンドではなくて、そのコマンドの実行結果をmsgに代入する、という部分では?それだとこの部分は絶対にtrueになると思われるが…
→→
ExcelVBAで上記のような失敗をしたことがあったので心配だったのですが(うろ覚え)、VBAなどとは違って今回のは『シェルスクリプトのロジック』と『コマンド』の2種類があり、この$?に入れられるのはあくまでも『コマンド』の実行結果である、ということらしいので問題ない、とのことでした。解決。

| | コメント (0) | トラックバック (0)

« 2006年6月 | トップページ | 2007年12月 »