在Linux / Unix中执行shell脚本时出错

时间:2014-11-19 10:25:11

标签: linux shell unix

我目前刚接触shell脚本,并遇到了一些我需要你帮助的问题。

我正在linux命令promt上运行shell脚本processmainjk.ksh。 此脚本在内部使用此条目调用另一个脚本

$PROC_BIN_DIR/admin/processsub.ksh -c $PROC_CONFIG_DIR/daily/processsub.cfg -m tkp

processsub.cfg的名称值条目类似于" prc_log_dir $ {PROCESS_LOG_DIR}"这些是由脚本processsub.ksh在内部读取的,代码如下

while read name value
do
   value=`eval "echo $value"`
   case "$name" in
     prc_log_dir) LOGDIR=$value;;
     prc_arch_dir) ARCHIVE_DIR=$value;;
 esac
done < $config_file


if [ ! -d ${LOGDIR} ]; then
  echo "ERROR:($PNAME)(Invalid or missing $LOGDIR)"
  exit 1
fi

其中$ config_file是processsub.cfg。现在我不确定&#34;读取名称值&#34;正在脚本中,但我猜测它的配置文件中的读取名称值par。 while循环后的if块抛出错误。在命令提示符中单独调试它,并且正在挑选$ {LOGDIR},但我不知道为什么它在我运行脚本时不起作用。

当我第一次运行此脚本而没有任何更改时,它成功运行。后来我在配置文件processap.cfg中进行了一些更改并修改了它的权限,因为它不允许我编辑,当我再次运行它这次它给我以下错误

 /testmac/bin/admin/processsub.ksh[52]: eval[1]: meaning: not found [No such file or directory]
)RROR:(/testmac/bin/admin/processsub.ksh)(Invalid or missing /testmac/bin/admin

如果您在错误&#34; 52&#34;中看到行号它指向while循环中的value = eval "echo $value"。不确定此错误,但目录/ testmac / bin / admin存在于文件系统中。使用先前的更改运行相同的脚本会产生相同的错误。

有人可以帮我解决这个问题,让我知道如何解决它。现在长期坚持这个错误。

更新

非常感谢你们的帮助。实际的问题是,当我在Windows中编辑它并使用FileZilla将其传输到linux盒时,配置文件已经搞砸了。现在,linux上的所有操作都提示自己,一切正常

谢谢

1 个答案:

答案 0 :(得分:0)

$value包含诸如&#34 ;;意思是foo&#34;之类的内容。这意味着"echo $value"会扩展为"echo ;meaning foo"。当你评估这个时,你首先运行echo没有参数,然后运行meaning foo。但是meaning不是一个有效的命令,因此脚本会爆炸。