我的代码是:
#!/bin/bash
if [ $1 -gt $2 ];then
echo $1 > $2
fi
if [ $1 -eq $2 ];then
echo $1 = $2
fi
if [ $1 -lt $2 ];then
echo $1 < $2
fi
在./script.sh 3 56
执行脚本时,我收到的回复是
./script.sh: line 9: 56: No such file or directory
。
我有权执行该脚本。我是bash编程和使用linux的新手。请告诉我如何修复我的脚本。
答案 0 :(得分:6)
echo $1 < $2
是一个重定向,导致echo
从名为$2
的文件中读取其输入。由于名为56
的文件不存在,您将收到错误消息。要解决此问题,请引用要打印的字符串:
echo "$1 < $2"
编辑欢迎来到bash的世界!在学习的过程中,我建议在变量的所有使用中使用双引号。这样可以为您节省一些麻烦,并且您可以在以后不使用引号时了解情况。例如,见this discussion at the bash-hackers wiki。快乐的黑客!
答案 1 :(得分:3)
Bash使用>
将标准输出流重定向到文件(而不是在终端中输出)。同样,它使用<
从文件中获取标准输入,而不是从您键入(或管道)到终端的内容。
使用引用来避免这种特殊处理。变量替换也是在双引号字符串上执行的,因此您可以将整个输出作为单个参数传递给echo
,作为cxw suggested:
echo "$1 < $2"
或者您可以传递3个参数:
echo $1 "<" $2
# or
echo $1 '<' $2
在单引号字符串中,不执行变量替换,因此
echo '$1 < $2'
不会按预期工作,而是按字面输出
$ 1&lt; $ 2
不用变量'content替换变量名。