33

我正在尝试执行此操作:我有一个测试文件,其中 md5sum 位于 sftp 上。变量应该包含一个 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
4

6 回答 6

48

我更喜欢的答案是

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

注意,不要忘记;{}每条指令之后

于 2015-03-27T17:04:01.553 回答
25

检查变量是否为空的一种方法是:

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

另一个更短的选择是:

[ "$var" ] || # var is empty
于 2013-11-07T14:16:40.093 回答
9

在 bash 中,您可以使用set -uwhich 导致 bash 在参数扩展失败时退出。

来自 bash man (关于set内置的部分):

-u
执行参数扩展时,将除特殊参数“@”和“*”之外的未设置变量和参数视为错误。如果尝试对未设置的变量或参数进行扩展,shell 会打印一条错误消息,如果不是交互式的,则以非零状态退出。

有关更多信息,我推荐这篇文章: http ://redsymbol.net/articles/unofficial-bash-strict-mode/

于 2017-07-14T12:19:48.340 回答
4

您可以使用简写形式:

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

在这种情况下,如果两个变量都没有声明,则脚本将退出I_...,打印一条错误消息,并在触发消息的 shell 脚本行前附加。

abs-guide中查看更多信息(搜索 «Example 10-7»)。

于 2015-11-09T16:42:06.500 回答
3

首先只测试这个(只是为了缩小范围):

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\""
于 2013-11-07T14:30:07.670 回答
0

“如果变量为空,则表示 sftp 服务器上没有文件”

如果 sftp 服务器上没有文件,那么变量真的是空的吗?

没有隐藏空间或类似的东西?还是数字零(算作非空)?

于 2013-11-08T00:12:13.330 回答