我正在尝试使用基于输入的输出创建一个bash脚本。 我的代码如下所示:
#!/bin/bash
echo "Letter:"
read a
if a=3
then
echo "LOL"
fi
if a=4
then
echo "ROFL"
fi
但是当我输入3或4时,我同时获得LOL
和ROFL
。
有没有办法让我获得3 LOL
和4 ROFL
?
对不起,如果我使用不正确的术语和内容,我是新手来编写脚本。
答案 0 :(得分:3)
在bash
中,a=3
是一项任务,而非测试。使用,例如:
if [ "$a" = 3 ]
在[...]
内,等号测试字符串(字符)相等。如果您想要测试数值,请使用'-eq`,如:
if [ "$a" -eq 3 ]
当a
为空时,上面“$ a”的引号是必要的,以避免出现“操作员”错误。
bash
还提供以[[
开头并具有不同格式的条件表达式。许多人更喜欢[[
格式(例如,它避免了上面提到的引用问题)但成本却失去了与其他shell的兼容性。特别要注意的是dash
,它是Debian派生发行版下脚本的默认shell(/bin/sh
),没有[[
。
答案 1 :(得分:2)
Bash认为你试图通过说a=3
来分配变量。您可以执行以下操作来解决此问题:
在使用=
引用变量时使用$
运算符,如下所示:if [[ $a = 3 ]]
使用-eq
运算符,该运算符非常特殊,不需要您使用$
引用变量,但可能不与所有sh
派生的shell兼容:if [[ a -eq 3 ]]
。如果您希望在没有Bash的情况下使用-eq
引用变量:if [[ $a -eq 3 ]]
注意强>:
双方括号[[ ... ]]
是具有特定Bash条件的首选格式。 [ ... ]
适用于任何sh
派生的shell(zsh
,tcsh
等)。
答案 2 :(得分:2)
if a=3
会将值3
分配给变量a
除非a
是只读变量,否则if a=3
始终返回TRUE
同样适用于if a=4
要将变量a
与值进行比较,您可以执行此操作if [ $a = 3 ]
所以脚本应该改为
#!/bin/bash
echo "Letter:"
read a
if [ $a = 3 ]
then
echo "LOL"
fi
if [ $a = 4 ]
then
echo "ROFL"
fi
由于从用户输入读取a
,因此可能存在用户密钥:
所以更安全的检查方法是:
if [ "x$a" = "x3" ]