UNIX有效密码

UNIX有效密码,unix,if-statement,cygwin,ubuntu-10.10,Unix,If Statement,Cygwin,Ubuntu 10.10,为什么在Cygwin终端中-if语句工作 ubuntu-unix-不适用于 此代码: #!/bin/sh valid_password="pass" echo "Please enter the password:" read password if [ "$password" == "$valid_password" ] then echo "You have access!" else echo "Access denied!" fi 因为[的正确语法是: [ a = b

为什么在Cygwin终端中-if语句工作
ubuntu-unix-不适用于
此代码:

#!/bin/sh
valid_password="pass"

echo "Please enter the password:"
read password

if [ "$password" == "$valid_password" ]
then
   echo "You have access!"
else
   echo "Access denied!"
fi

因为
[
的正确语法是:

[ a = b ]
从错误消息中,听起来像是您写了:

if ["$password" = "$valid_password" ]
将此更改为:

if [ "$password" = "$valid_password" ]
注意
[
如果
只接受一个shell命令,请尝试运行它,并根据程序的退出代码是否为
0
运行
if
语句中的命令

在终端中,写下,即:

user@localhost$ true; echo $?
0
要测试if语句,请执行以下操作:

user@localhost$ pass=pass; valid=pass
user@localhost$ if [ "$pass" = "$valid" ]; then echo 'You have access!'; fi
正如@nullrevolution所说的,
将被计算,如果您使用双引号,它将尝试运行shell历史记录中的最后一个命令,在本例中,该命令与
u
匹配

user@localhost$ uname
Linux
user@localhost$ !u
uname
Linux
user@localhost$ echo "!"
sh: !: event not found
这是因为在匹配双引号之前会计算
,并运行echo。如果仍要使用双引号,则必须在引号之外转义

echo "Access denied"\!
@nullrevolution还表示可以尝试使用
bash
,它在if语句中为表达式提供了内置语法

#!/bin/bash

valid_password=pass

echo "Please enter the password:"
read password

if [[ "$password" == "$valid_password" ]]; then
    echo 'You have access!'
else
    echo 'Access denied!'
fi
在您的程序中,我猜您不想在终端中回显密码,要关闭回显临时更改:

read password

如果忘记写入
stty echo
再次打开echo,只需在终端中写入
reset
,它就会将终端重置为默认设置

bourn shell脚本的有用教程可在此处找到:


@emil指出了答案:

if [ "$password" = "$valid_password" ]
而不是

if [ "$password" == "$valid_password" ]
另外:您是否授予脚本执行权限?请重试

chmod +x script_name

对不起,它不工作了,也许我需要在ubuntu中做些什么?shay@ubuntu:~/scripts$./password请输入密码:pass./password:12:[通过:未找到访问被拒绝!很好!然后将其标记为已接受的答案(在我的答案旁边执行此操作),因此问题将被标记为已解决。它不起作用是没有帮助的!它怎么不起作用?显示了哪些错误消息。我怀疑该文件有DOS行结尾,请尝试
dos2unix文件
它是否能与
#!/bin/bash
一起工作,而不是
sh
?此外,我建议您将echo命令中的双引号更改为single引用,这样shell就不会试图将
解释为历史引用。shay@ubuntu:~/scripts$./password请输入密码:pass./password:12:[pass:notfound访问被拒绝!是的,我给chmod 777,dos2unix在Cygwin中-可以工作,但在ubuntu中没有
chmod +x script_name