我正在尝试创建一个用于登录Linux中的cyberoam客户端的文件。
crclient是一个采用不同参数的文件。
登录./crclient -u username
,登出./crclient -l
。
我写的shell脚本可以正常登录,但是当我尝试注销时,./crclient -l
终端正在显示
non-option ARGV-elements: u09me215
。
#!/bin/sh
cd Downloads/crclient
if [ $1=="-u" ]
then
./crclient $1 u09me215
else
./crclient $1
fi
现在,在将if [ $1=="-u" ]
替换为if [ $1 = "-u" ]
作为@devnull指向后,脚本正在正常运行。
但是除了一个之外的“==”和“=”之间的区别是用于比较,而另一个用于值分配。为什么==
适用于-u
而不适用于-l
。
答案 0 :(得分:1)
如果没有空格,$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.