Linux Shell脚本中的逻辑错误
输入“退出”、“q”、“退出”或“x”时需要退出的简单计算器。在这种情况下需要改变什么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
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