第一版问题如下:
if [ ! -d "$LOCAL_WORKING_DIR" ]
then
mkdir "$LOCAL_WORKING_DIR"
cd "$LOCAL_WORKING_DIR"
else
cd"$LOCAL_WORKING_DIR" fi
我回答:您不应该收到 else 的语法错误。但是,fi 放错了位置。它前面需要一个分号,或者它应该单独一行。
if [ ! -d "$LOCAL_WORKING_DIR" ]
then
mkdir "$LOCAL_WORKING_DIR"
cd "$LOCAL_WORKING_DIR"
else
cd "$LOCAL_WORKING_DIR" # Note the space
fi
但是,您根本不需要else 子句:
if [ ! -d "$LOCAL_WORKING_DIR" ]
then
mkdir "$LOCAL_WORKING_DIR"
fi
cd "$LOCAL_WORKING_DIR"
甚至:
mkdir -p "$LOCAL_WORKING_DIR" || exit 1
cd "$LOCAL_WORKING_DIR" || exit 1
如果目录不存在且无法创建(例如,因为有一个名称为您想成为目录的文件,或者您没有权限),则使用第一个 exit。由于mkdir 报告了错误,因此退出是合理的,但您可以执行任何其他您愿意执行的错误处理操作。如果您不能 cd 进入该目录,则第二个 exit 被带走——这几乎可以肯定意味着您没有权限,或者有人设法在 mkdir 命令检查它存在和cd 的执行时间。
你的第二个例子是:
if -f $LOCAL_EVENT_LOG_FTP_TEMP del $LOCAL_EVENT_LOG_FTP_TEMP
else
echo Event Log Backup Module not Activated.
fi;
您完全错过了then 子句及其操作。看起来您可能打算测试一个文件然后删除它,但del 是一个 Windows 命令(不是标准的 Unix 命令),您需要使用 test 命令(shell 内置命令)。
if [ -f $LOCAL_EVENT_LOG_FTP_TEMP ]
then del $LOCAL_EVENT_LOG_FTP_TEMP
else echo Event Log Backup Module not Activated.
fi
记住,[ 是命令的名称;它必须与if 以空格分隔,并且必须与其参数以空格分隔,并且当您使用名称[ 时,最后一个参数必须是](但当您使用名称test 时则不是)而是)。