if statement - UNIX valid_password



为什么在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

@emil指出了答案:

if [ "$password" = "$valid_password" ]

而不是

if [ "$password" == "$valid_password" ]

另外:您是否授予了脚本执行权限?尝试

chmod +x script_name

因为要[的正确语法是:

[ a = b ]

从您的错误消息中听起来像您写的:

if ["$password" = "$valid_password" ]

将其更改为:

if [ "$password" = "$valid_password" ]

请注意 [ 之后的空格。 if只接受一个 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
read password
stty echo

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

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

http://www.grymoire.com/Unix/Sh.html

相关内容

  • 没有找到相关文章

最新更新