【问题标题】:RHEL 6.3 shell scriptingRHEL 6.3 shell 脚本
【发布时间】:2023-03-11 23:05:01
【问题描述】:

这有什么问题?

if [ ! -d "$LOCAL_WORKING_DIR" ] 
then     
     mkdir "$LOCAL_WORKING_DIR" 
     cd "$LOCAL_WORKING_DIR" 
else 
     cd"$LOCAL_WORKING_DIR" 
fi 

错误:意外标记“else”附近的语法错误

怎么样??

 if -f $LOCAL_EVENT_LOG_FTP_TEMP del $LOCAL_EVENT_LOG_FTP_TEMP

 else
     echo Event Log Backup Module not Activated.
 fi;  

有什么错误吗?

【问题讨论】:

  • 是您的 fi 关键字,与 cd"$LOCAL_WORKING_DIR" 位于同一行
  • 戴尔:不 :) 错字。
  • 是的;现在不是。

标签: shell scripting rhel


【解决方案1】:

第一版问题如下:

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 时则不是)而是)。

【讨论】:

  • 为什么不需要 Else?我还不太了解 RHEL 中的序列..
  • 因为thenelse都做cd "$LOCAL_WORKING_DIR"所以你只需要在if...fi语句之后写一次,如图所示。
猜你喜欢
  • 2014-01-03
  • 1970-01-01
  • 1970-01-01
  • 2016-06-24
  • 1970-01-01
  • 1970-01-01
  • 2014-03-23
  • 1970-01-01
  • 2013-08-18
相关资源
最近更新 更多