2017-12-07 5 views
-3

過去の私は、私が持っているスクリプトが失敗している理由を理解しようとしていましたが、実行のすべてがエラーのこの部分(この疑似コード投稿):失敗した場合はネストされています - 疑似コードのサンプル

if [ -z "${removed-unset}" ]; then 
    ABC 
    else 
     if [ "$(date +%u)" == 4 ]; then 
      if test `find "ABC" -cmin +2880` then 
       if [ ! -f /tmp/ABC ]; then 
        CODE HERE 
         if [[ -s ABC ]]; then 
          CODE HERE 
           if [ -z "${ABC-unset}" ]; then 
            CODE HERE 
           else 
            CODE HERE 
           fi 
         else 
          rm ABC 
         fi 
       else 
        CODE HERE 
       fi 
      else 
       CODE HERE 
      fi 
    else 
     CODE HERE 
    fi 
fi 

私はそれが私が間違っていることについていくつかの指針を持つことができたのだろうかと思っていました。私は実際のコードと構文がないことをお詫びします。

+0

[ShellCheck](http://shellcheck.net)は、 '' if test '' ABC "-cmin + 2880' then''のように' then'の前にセミコロンが必要であることを指摘してくれたことが有益です。 –

+0

それはまさにそれでした!ありがとうございました!私はそれを受け入れる答えとしてそれを提出してもらえますか? ShellCheckはお気に入りに入っています! :) – t988GF

+1

私はしましたが、 "もう再生できない問題や簡単な誤字脱字"という句 –

答えて

0

ShellCheckあなたはセミコロンが欠落していることを指摘:

if test `find "ABC" -cmin +2880` then 
           ^-- SC1010: Use semicolon or linefeed before 'then' 
              (or quote to make it literal). 

提案としてちょうどそれを挿入します。

if test `find "ABC" -cmin +2880`; then 

thenは、コマンドの開始時にだけ特別であるため、これが必要です。

+0

これはOPの即時の問題を解決しますが、 1つのファイルが見つかった場合、または名前にスペースが含まれていると見なされた場合、 'test'の動作はここで予測するのが難しいです。 –

関連する問題