Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Shell脚本中的逻辑错误_Linux_Shell_Logical Operators - Fatal编程技术网

Linux Shell脚本中的逻辑错误

Linux Shell脚本中的逻辑错误,linux,shell,logical-operators,Linux,Shell,Logical Operators,输入“退出”、“q”、“退出”或“x”时需要退出的简单计算器。在这种情况下需要改变什么 echo -n "Enter Number Operator Number [exit/quit if finished]" read num1 op num2 if [[ "${num1,,}" =~ "quit" | "q" ]] || [[ "${num2,,}" =~ "exit" | "x" ]] then echo -e "\nExiting `basename $0`, Goodbye

输入“退出”、“q”、“退出”或“x”时需要退出的简单计算器。在这种情况下需要改变什么

echo -n "Enter Number Operator Number [exit/quit if finished]"
read num1 op num2

if [[ "${num1,,}" =~ "quit" | "q" ]] || [[ "${num2,,}" =~ "exit" | "x" ]]
then
    echo -e "\nExiting `basename $0`, Goodbye!\n"
    exit 0
fi

你误解了“或”的意思。它不是不同值之间的or,而是不同逻辑条件之间的or

我想这就是你想要的:

[[ $num1 =~ "quit" || $num1 =~ "q" || $num2 =~ "exit" || $num2 =~ "x" ]]

你误解了“或”的意思。它不是不同值之间的or,而是不同逻辑条件之间的or

我想这就是你想要的:

[[ $num1 =~ "quit" || $num1 =~ "q" || $num2 =~ "exit" || $num2 =~ "x" ]]

你误解了“或”的意思。它不是不同值之间的or,而是不同逻辑条件之间的or

我想这就是你想要的:

[[ $num1 =~ "quit" || $num1 =~ "q" || $num2 =~ "exit" || $num2 =~ "x" ]]

你误解了“或”的意思。它不是不同值之间的or,而是不同逻辑条件之间的or

我想这就是你想要的:

[[ $num1 =~ "quit" || $num1 =~ "q" || $num2 =~ "exit" || $num2 =~ "x" ]]
正则等式上的
=~
的特点是,右侧表达式被解释为扩展正则表达式
(quit | q | exit | x)
是这样一个表达式,它表示与“quit”或“q”或“exit”或“x”匹配的任何文本

请注意,功能
[[
=~
需要像bash这样的高级shell。普通
/bin/sh
可能没有这些功能

如果您想要更高的兼容性,有两个选项。一个选项使用
[
(测试)语句:

num1="$(echo $num1 | tr '[:upper:]' '[:lower:]')"
if [ "${num1}" = quit -o  "${num1}" = q -o  "${num1}" = exit -o  "${num1}" = quit -o  "${num1}" = x ]
num1="$(echo $num1 | tr '[:upper:]' '[:lower:]')"
case "${num1}" in
    quit|q|exit|x)
        echo ""
        echo "Exiting `basename $0`, Goodbye!"
        echo ""
        exit 0
        ;;
esac
上面的表达式较长,因为我们仅限于简单的相等性测试。
-o
[
的“or”运算符

另一个选项使用case语句:

num1="$(echo $num1 | tr '[:upper:]' '[:lower:]')"
if [ "${num1}" = quit -o  "${num1}" = q -o  "${num1}" = exit -o  "${num1}" = quit -o  "${num1}" = x ]
num1="$(echo $num1 | tr '[:upper:]' '[:lower:]')"
case "${num1}" in
    quit|q|exit|x)
        echo ""
        echo "Exiting `basename $0`, Goodbye!"
        echo ""
        exit 0
        ;;
esac
简单shell没有
${var,,}
功能,但是如上所示,
tr
(translate)实用程序可以进行大小写转换

还请注意,在上面的最后一个示例中,我用三个简单的
echo
语句替换了
echo-e
。这是因为许多shell不支持
echo
-e
选项

=~
优于正则等式的特点是,右侧表达式被解释为扩展正则表达式。
(quit | q | exit | x)
是这样一个表达式,表示与“quit”或“q”或“exit”或“x”匹配的任何文本

请注意,功能
[[
=~
需要像bash这样的高级shell。普通
/bin/sh
可能没有这些功能

如果您想要更高的兼容性,有两个选项。一个选项使用
[
(测试)语句:

num1="$(echo $num1 | tr '[:upper:]' '[:lower:]')"
if [ "${num1}" = quit -o  "${num1}" = q -o  "${num1}" = exit -o  "${num1}" = quit -o  "${num1}" = x ]
num1="$(echo $num1 | tr '[:upper:]' '[:lower:]')"
case "${num1}" in
    quit|q|exit|x)
        echo ""
        echo "Exiting `basename $0`, Goodbye!"
        echo ""
        exit 0
        ;;
esac
上面的表达式较长,因为我们仅限于简单的相等性测试。
-o
[
的“or”运算符

另一个选项使用case语句:

num1="$(echo $num1 | tr '[:upper:]' '[:lower:]')"
if [ "${num1}" = quit -o  "${num1}" = q -o  "${num1}" = exit -o  "${num1}" = quit -o  "${num1}" = x ]
num1="$(echo $num1 | tr '[:upper:]' '[:lower:]')"
case "${num1}" in
    quit|q|exit|x)
        echo ""
        echo "Exiting `basename $0`, Goodbye!"
        echo ""
        exit 0
        ;;
esac
简单shell没有
${var,,}
功能,但是如上所示,
tr
(translate)实用程序可以进行大小写转换

还请注意,在上面的最后一个示例中,我用三个简单的
echo
语句替换了
echo-e
。这是因为许多shell不支持
echo
-e
选项

=~
优于正则等式的特点是,右侧表达式被解释为扩展正则表达式。
(quit | q | exit | x)
是这样一个表达式,表示与“quit”或“q”或“exit”或“x”匹配的任何文本

请注意,功能
[[
=~
需要像bash这样的高级shell。普通
/bin/sh
可能没有这些功能

如果您想要更高的兼容性,有两个选项。一个选项使用
[
(测试)语句:

num1="$(echo $num1 | tr '[:upper:]' '[:lower:]')"
if [ "${num1}" = quit -o  "${num1}" = q -o  "${num1}" = exit -o  "${num1}" = quit -o  "${num1}" = x ]
num1="$(echo $num1 | tr '[:upper:]' '[:lower:]')"
case "${num1}" in
    quit|q|exit|x)
        echo ""
        echo "Exiting `basename $0`, Goodbye!"
        echo ""
        exit 0
        ;;
esac
上面的表达式较长,因为我们仅限于简单的相等性测试。
-o
[
的“or”运算符

另一个选项使用case语句:

num1="$(echo $num1 | tr '[:upper:]' '[:lower:]')"
if [ "${num1}" = quit -o  "${num1}" = q -o  "${num1}" = exit -o  "${num1}" = quit -o  "${num1}" = x ]
num1="$(echo $num1 | tr '[:upper:]' '[:lower:]')"
case "${num1}" in
    quit|q|exit|x)
        echo ""
        echo "Exiting `basename $0`, Goodbye!"
        echo ""
        exit 0
        ;;
esac
简单shell没有
${var,,}
功能,但是如上所示,
tr
(translate)实用程序可以进行大小写转换

还请注意,在上面的最后一个示例中,我用三个简单的
echo
语句替换了
echo-e
。这是因为许多shell不支持
echo
-e
选项

=~
优于正则等式的特点是,右侧表达式被解释为扩展正则表达式。
(quit | q | exit | x)
是这样一个表达式,表示与“quit”或“q”或“exit”或“x”匹配的任何文本

请注意,功能
[[
=~
需要像bash这样的高级shell。普通
/bin/sh
可能没有这些功能

如果您想要更高的兼容性,有两个选项。一个选项使用
[
(测试)语句:

num1="$(echo $num1 | tr '[:upper:]' '[:lower:]')"
if [ "${num1}" = quit -o  "${num1}" = q -o  "${num1}" = exit -o  "${num1}" = quit -o  "${num1}" = x ]
num1="$(echo $num1 | tr '[:upper:]' '[:lower:]')"
case "${num1}" in
    quit|q|exit|x)
        echo ""
        echo "Exiting `basename $0`, Goodbye!"
        echo ""
        exit 0
        ;;
esac
上面的表达式较长,因为我们仅限于简单的相等性测试。
-o
[
的“or”运算符

另一个选项使用case语句:

num1="$(echo $num1 | tr '[:upper:]' '[:lower:]')"
if [ "${num1}" = quit -o  "${num1}" = q -o  "${num1}" = exit -o  "${num1}" = quit -o  "${num1}" = x ]
num1="$(echo $num1 | tr '[:upper:]' '[:lower:]')"
case "${num1}" in
    quit|q|exit|x)
        echo ""
        echo "Exiting `basename $0`, Goodbye!"
        echo ""
        exit 0
        ;;
esac
简单shell没有
${var,,}
功能,但是如上所示,
tr
(translate)实用程序可以进行大小写转换


请注意,在上面的最后一个示例中,我用三个简单的
echo
语句替换了
echo-e
。这是因为许多shell不支持
-e
-e

选项。您能解释一下您为实现这一目标尝试了什么吗?好的,这是一个很长的程序,但基本上这部分是w在这里,用户将输入一个数字,后跟一个运算符,然后再输入另一个数字,这样就可以进行计算。但是,如果用户输入我提到的4个选项之一,程序需要退出。因此,如果该条件为真,程序必须回显退出,然后退出。如果不是,则继续计算。我需要该条件才有意义。可以吗你解释了为了达到这个目标你尝试做了什么?好吧,这是一个很长的程序,但基本上这部分是用户输入一个数字,后跟一个操作符,然后是另一个数字,s