2011-07-29 7 views
1

以下のように、Unixのデバッグ方法を教えてください。 以下のコードが何をしているかを理解するには、ステップバイステップで行います。

if [ ! -f $R_C_S_L/j_r_d* ] 
    then 
echo 0>$R_C_S_L/j_r_d 
fi 
+3

'man test' .... –

+0

あなたの環境に' R_C_S_L'という変数がありますか、それともスクリプトの上に定義されていますか?これは単純に「このパスと一致するファイルがない場合は空のファイルを作成する」ですが、どのパスであるかを知るコンテキストはありません。うまくいけば、誰かがこれを説明しているmanページであなたを指すこともできます(bash?test?) – Rup

+0

こんにちはRUP、R_C_S_Lは環境からエクスポートされたパラメータです。このパスに一致するファイルがない場合、空のファイル "を教えてください。 -f ...]とこれらのようなステートメントは?答えてくれてありがとう。 – user840963

答えて

3

さてあなたは、ちょうど左から右にそれを読む:

if [ ! -f $R_C_S_L/j_r_d* ] 

私はif[がクリアされていると思いますか?

man [ 

アップ man testをもたらし、そしてそこに我々は読む:

NAME 
     test - check file types and compare values 

SYNOPSIS 
     test EXPRESSION 
     test 

     [ EXPRESSION ] 
     [ ] 
     [ OPTION 

をし、さらに下:

-f FILE 
      FILE exists and is a regular file 

ファイルを?

$R_C_S_L/j_r_d* 

は$を示し、それは可変で、左から解析されます。変数を自分で書いて、それらを一緒にグルーミングすることから、それはLのみを含むことになるので、$ R_C_S_Lは変数、次に/はディレクトリ区切り文字、j_r_d *はglobbingパターンを持つ名前の一部です。

$ R_C_S_Lで参照される、j_r_d *と一致するファイルを含むディレクトリが検索されます。これがテストです。テストが失敗した場合、内部が完了します。

echo 0 > $R_C_S_L/j_r_d 

このファイルが存在しない場合は、上記のパターンと一致する最短のファイルに0を書き込みます。

+0

優秀な説明は大変ありがとうございます。 – user840963

4
  • []述語を囲みます。
  • !は、NOTの述語であり、真から括弧の間にあるものはすべて無効になります。
  • -fは述語であり、 'ファイルは存在しますか?'
  • $R_C_S_Lは、他の場所で定義された変数です。
  • *はワイルドカードです。
  • thenはifブロックを開始します。
  • fiはifブロックを終了します。
  • echo {stuff}が画面に画像を印刷します。
  • echo {stuff} > {file}をファイルにリダイレクトします。

は、上記のステートメントは、このように翻訳することができます。

「、そして書き込みj_r_d 『0』ファイルj_r_d内にディレクトリ$ R_C_S_Lにある存在と文字で始まるファイルが存在する場合$R_C_S_Lディレクトリ。

$ man bashを参照してください。

+0

そのようなファイルがない場合は、そのことを意味します。 :) –

+0

はい私はまたそれのように理解したが、素晴らしい説明はありがとう。 – user840963

3

それは

if [ I_AM_TRUE ] 
then 
    DO_ME 
fi 

then ...なステートメント続い/場合ではfiは、ソートの閉じ括弧のようなものです、ソートの開口ブラケットのようなものです。

-f FILENAMEがFILENAMEがファイルで、 を入れたときにTRUEになります。その式の前に真理値を反転させ...

ので! -f FILENAME FILENAMEは

echoプリントアウトのものを、シンボル>はどこかにそれをその原料を受け取り、再指示しながら、ファイルでないときTRUEです。それがすべて一致するように、VARの値は最後に$VAR ...

を入力して頂いております、*、ワイルドカードである(何も含まないの!)

特定のファイルの接頭辞かどうかをチェックのようなので、それが見えます使用されていない場合は、ファイルを作成し、ファイルにゼロを入れます。あなたがテストすることができ、物事のより完全なリストについては

内部/その文がhttp://en.wikipedia.org/wiki/Test_(Unixをチェックアウト)またはプロンプトでman test上に述べた場合。それはそれを行う人的な方法でしょう。

関連する問題