将文件名作为参数传递给脚本。没有相应的文件和目录

时间:2011-10-13 14:27:36

标签: bash shell unix

我对shell脚本比较陌生,而且我已经坚持了几天这个错误了。我正在尝试读取包含字符串和数字列表的文件的内容,格式化它,并输出低于50的数字。

然而,当输入shell时,所有命令都有效;在脚本中,当我尝试将文件名作为参数传递时,我不断收到“没有这样的文件或目录”错误。

这是有问题的功能:

 belowFifty(){
    count=0
    numbers=`cut -d : -f 3 < "$2"` #here is where the error occurs
    for num in $numbers
    do
      if ((num<50));
      then
      count=$((count+1))
      fi
    done
    echo $count
}
编辑:抱歉,我忘了提脚本做了几件事。 $ 1是选项,$ 2是文件。我这样称呼它:

./script.sh m filename

2 个答案:

答案 0 :(得分:1)

尝试:

${2? 2 arguments are required to function belowFifty}
numbers=$( cut -d : -f 3 < $2 )

我怀疑问题是你正在调用该函数 而没有指定第二个参数。在这个功能中, $ 2是传递给函数的参数,而不是参数 传递给主脚本。

答案 1 :(得分:0)

您指定"$2"; "$1"中传递给函数的内容被忽略了?我强烈怀疑你是试图用一个空字符串作为名称打开文件,并且没有这样的文件 - 因此错误消息。推论是你可能想要引用"$1"。 如果是这样,你应该写:

numbers=$(cut -d : -f 3 < "$1")

通常应该避免使用反向刻度表示法,而使用$(...)