我正在尝试创建一个文件,以便在Linux中登录到cyberoam客户端。
crclient是一个接受不同参数的文件。./crclient -u username
表示登录,./crclient -l
表示注销。
我编写的shell脚本在登录时运行良好,但是当我试图注销时,终端显示./crclient -l
。
#!/bin/sh
cd Downloads/crclient
if [ $1=="-u" ]
then
./crclient $1 u09me215
else
./crclient $1
fi
现在脚本在将
non-option ARGV-elements: u09me215
替换为@devnull指出的if [ $1=="-u" ]
后正确运行。但是“=”和“=”之间的区别在于,一个用于比较,另一个用于赋值。为什么
if [ $1 = "-u" ]
对==
有效而对-u
无效。 最佳答案
如果没有空格,$1==-u
将被视为单个字符串,而不是比较表达式。由于非空字符串在test
命令中的计算结果始终为true,因此最终将运行
./crclient -l u09me215
这显然会导致你看到的错误。
更微妙的是,
[ $1 == "-u" ]
在技术上是不允许的,因为test
命令(由POSIX指定)不使用==
进行字符串比较。然而,如果您的/bin/sh
实际上是bash
,那么bash
偏离了标准并允许它。你应该使用[ "$1" = "-u" ] # Note the quotes around $1
或
[[ "$1" == "-u" ]] # A single = would be fine, and quoting $1 is optional but recommended.