为什么这段代码不起作用?设置变量和配置文件

时间:2013-06-20 19:52:02

标签: bash shell unix scripting configure

我最近刚制作了这个剧本:

 if test -s $HOME/koolaid.txt ; then
  Billz=$(grep / $HOME/koolaid.txt)
  echo $Billz
  else
 Billz=$HOME/notkoolaid
 echo $Billz
 fi



 if test -d $Billz ; then
  echo "Ok"
 else touch $Billz
fi

基本上,如果文件$HOME/koolaid.txt文件不存在,那么Billz将被设置为$ HOME / koolaid.txt。然后它会成功创建文件。

但是,如果我确实制作了koolaid.txt,那么我就得到了这个

mkdir: cannot create directory : No such file or directory

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

以下是变量和评估内容的内容之间的差异...... 如果您的变量包含字符串$HOME/some - ,则需要将其展开以获取/home/login/same 一个危险方法是eval

bin=$(grep / ~/.rm.cfg)
eval rbin=${bin:-$HOME/deleted}
echo "==$rbin=="

除非你完全确定你的评价,否则不要评估...

答案 1 :(得分:0)

以下是一些需要解决的问题:

使用“shebang”启动脚本,例如:

#!/bin/sh

这样shell就会知道你想把它作为Bourne shell脚本运行。

此外,脚本顶部的条件不能很好地处理.rm.cfg存在但不包含斜杠字符的情况。在这种情况下,rbin变量永远不会被设置。

最后,尝试添加行

ls ~

在顶部,这样你就可以看到shell如何解释波形符;这可能是问题。