web-dev-qa-db-ja.com

bashは変数が空かどうかを判断し、空の場合は終了します。

私はこれを実行しようとしています:私はsftpにあるファイルのmd5sumであるテストファイルを持っています。変数にはmd5sum(文字列)を含める必要があります。変数が空の場合は、sftpサーバーにファイルがないことを意味します。私はこのコードを試していますが、うまくいきません。

    if [ -z $I_IDOCMD5 ] || [ -z $I_LEGALMD5 ] || [ -z $I_ZIPMD5 ]
then
        echo "ERROR: At least one file not present of checksum missing no files will be deleted" >>$IN_LOG
        ERRORS=$ERRORS+2
else
 if [[ $I_IDOCMD5 == $($DIGEST -a md5 $SAPFOLDER/inward/idoc/$I_IDOC) ]]
   then
        echo "rm IDOC/$I_IDOC" >/SAP/commands_sftp.in
   else
        echo "problem with checksum"
        ERRORS=$ERRORS+2
 fi

 if [[ $I_LEGALMD5 == $($DIGEST -a md5 $SAPFOLDER/inward/legal/$I_LEGAL) ]]
   then
        echo "rm LEGAL/$I_LEGAL" >>/SAP/commands_sftp.in
   else
        echo "problem with checksum"
        ERRORS=$ERRORS+2
 fi

 if [[ $I_ZIPMD5 == $($DIGEST -a md5 $SAPFOLDER/inward/Zip/$I_Zip) ]]
   then
        echo "rm Zip/$I_Zip" >>/SAP/commands_sftp.in
   else
        echo "problem with checksum"
        ERRORS=$ERRORS+2
fi
21
user2653557

私が好む答えは以下の通りです

[[ -z "$1" ]] && { echo "Parameter 1 is empty" ; exit 1; }

各命令の後に;{}に忘れないでください。

30
Pipo

変数が空かどうかを確認する1つの方法は次のとおりです。

if [ "$var" = "" ]; then
    # $var is empty
fi

別のより短い代替案はこれです:

[ "$var" ] || # var is empty
17
user1019830

最初にこれだけをテストします(それを絞り込むためだけに):

if [ -z "$I_IDOCMD5" ] || [ -z "$I_LEGALMD5" ] || [ -z "$I_ZIPMD5" ]
then
    echo "one is missing"
else
    echo "everything OK"
fi

echo "\"$I_IDOCMD5\""
echo "\"$I_LEGALMD5\""
echo "\"$I_ZIPMD5\""
3
thom

Bashでは、set -uを使用できます。これにより、bashは失敗したパラメーター展開で終了します。

Bash manから(set組み込みに関するセクション):

-u
未展開の変数や特殊パラメーター「@」「*」以外のパラメーターは、パラメーター展開時にエラーとして扱います。設定されていない変数またはパラメーターで展開が試行されると、シェルはエラーメッセージを出力し、インタラクティブでない場合は、ゼロ以外のステータスで終了します。

詳細については、この記事をお勧めします: http://redsymbol.net/articles/unofficial-bash-strict-mode/

3
Lirt

短い形式を使用できます。

FNAME="$I_IDOCMD5"
: ${FNAME:="$I_LEGALMD5"}
: ${FNAME:="$I_ZIPMD5"}
: ${FNAME:?"Usage: $0 filename"}

この場合、I_...変数のどちらも宣言されていない場合、スクリプトは終了し、メッセージをトリガーしたシェルスクリプト行が前に付いたエラーメッセージが出力されます。

これについては abs-guide で参照してください("例10-7"を検索)。

3
gluk47

"変数が空の場合、sftpサーバーにファイルがないことを意味します"

Sftpサーバーにファイルがない場合、is変数、次にreally空?

隠されたスペースやそのようなものはありませんか?または数値ゼロ(空ではないものとしてカウントされます)?

0
thom