use*_*557 19 bash md5 if-statement
我正在尝试执行此操作:我有一个测试文件,其中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
Run Code Online (Sandbox Code Playgroud)
Pip*_*ipo 23
我更喜欢的答案如下
[[ -z "$1" ]] && { echo "Parameter 1 is empty" ; exit 1; }
Run Code Online (Sandbox Code Playgroud)
小智 16
检查变量是否为空的一种方法是:
if [ "$var" = "" ]; then
# $var is empty
fi
Run Code Online (Sandbox Code Playgroud)
另一个更短的选择是:
[ "$var" ] || # var is empty
Run Code Online (Sandbox Code Playgroud)
在 bash 中,您可以使用set -uwhich 导致 bash 在参数扩展失败时退出。
来自 bash man(关于set内置的部分):
-u
执行参数扩展时,将未设置的变量和特殊参数“@”和“*”以外的参数视为错误。如果尝试对未设置的变量或参数进行扩展,shell 会打印一条错误消息,如果不是交互式的,则以非零状态退出。
有关更多信息,我推荐这篇文章:http : //redsymbol.net/articles/unofficial-bash-strict-mode/