Linux 如果语句操作不起作用?
此功能不起作用。看来我用的手术太多了。它工作到第二个II或操作,然后在第三个和第四个停止工作。所以我注释掉的那一行不起作用,但另一行起作用了 不知道我做错了什么?我不想使用用例语句;也许有更好的办法?我只需要调用这个函数并确保用户输入是正确的。它不应该是空的,并且应该是其他三个条目中的任何一个Linux 如果语句操作不起作用?,linux,bash,if-statement,Linux,Bash,If Statement,此功能不起作用。看来我用的手术太多了。它工作到第二个II或操作,然后在第三个和第四个停止工作。所以我注释掉的那一行不起作用,但另一行起作用了 不知道我做错了什么?我不想使用用例语句;也许有更好的办法?我只需要调用这个函数并确保用户输入是正确的。它不应该是空的,并且应该是其他三个条目中的任何一个 get_selection () { count1=1 while [ $count1 = 1 ]; do echo "enter user or service or item user|service
get_selection ()
{
count1=1
while [ $count1 = 1 ];
do
echo "enter user or service or item user|service|item :"
read entry
echo entry is $entry
# if [ -z "$entry" ] || [ $entry != "user" ] || [ $entry != "service" ] || [ $entry!= "item" ]; then
if [ -z "$entry" ] || [ $entry != "user" ] || [ $entry != "service" ]; then
echo "blank or incorrrect entry"
else
echo "entry is correct "
count1=$(( $count1 + 1 ))
fi
done
}
如果您不想使用案例,可以使用:
get_selection ()
{
count1=1
while [ $count1 = 1 ]; do
echo "enter user or service or item user|service|item :"
read entry
echo entry is $entry
if [[ -z "$entry" ]] || [[ ! $entry =~ (user|service|item) ]]; then
echo "blank or incorrrect entry"
else
echo "entry is correct "
count1=$(( $count1 + 1 ))
fi
done
}
但我仍然会推荐这种情况:
get_selection ()
{
count1=1
while [ $count1 = 1 ]; do
echo "enter user or service or item user|service|item :"
read entry
echo entry is $entry
case $entry in
user|service|item)
echo "entry is correct "
count1=$(( $count1 + 1 ))
break
;;
*)
echo "blank or incorrrect entry"
esac
done
}
这很清楚您要检查的内容。如果您不想使用案例,可以使用:
get_selection ()
{
count1=1
while [ $count1 = 1 ]; do
echo "enter user or service or item user|service|item :"
read entry
echo entry is $entry
if [[ -z "$entry" ]] || [[ ! $entry =~ (user|service|item) ]]; then
echo "blank or incorrrect entry"
else
echo "entry is correct "
count1=$(( $count1 + 1 ))
fi
done
}
但我仍然会推荐这种情况:
get_selection ()
{
count1=1
while [ $count1 = 1 ]; do
echo "enter user or service or item user|service|item :"
read entry
echo entry is $entry
case $entry in
user|service|item)
echo "entry is correct "
count1=$(( $count1 + 1 ))
break
;;
*)
echo "blank or incorrrect entry"
esac
done
}
无论条目的值是什么,它都将无法匹配至少一个用户或服务,即它不能同时等于这两个用户或服务。你想要
if [ -z "$entry" ] || { [ "$entry" != "user" ] && [ "$entry" != "service" ]; }; then
您可以使用case语句和不同的循环条件来简化函数:
get_selection () {
while true; do
echo "Enter user or service or item: "
read entry
case $entry in
"") echo "blank entry" ;;
user|service|item) echo "entry is correct"; break; ;;
* ) echo "incorrect entry" ;;
esac
done
}
但是,您实际上是在重新创建select命令:
无论条目的值是什么,它都将无法匹配至少一个用户或服务,即它不能同时等于这两个用户或服务。你想要
if [ -z "$entry" ] || { [ "$entry" != "user" ] && [ "$entry" != "service" ]; }; then
您可以使用case语句和不同的循环条件来简化函数:
get_selection () {
while true; do
echo "Enter user or service or item: "
read entry
case $entry in
"") echo "blank entry" ;;
user|service|item) echo "entry is correct"; break; ;;
* ) echo "incorrect entry" ;;
esac
done
}
但是,您实际上是在重新创建select命令:
要补充@chepner和@naab的有用答案: 充分利用bash的[…]条件与[…]条件,原始if语句可以写成:
if [[ ! ($entry == "user" || $entry == "service") ]]; then
echo "blank or incorrrect entry"
else
echo "entry is correct "
fi
请注意,无需使用-z$entry测试$entry是否为空,因为您只关心该项是否与您的一个关键字匹配,并且您的错误消息涵盖无效输入和空输入情况。要补充@chepner和@naab的有用答案: 充分利用bash的[…]条件与[…]条件,原始if语句可以写成:
if [[ ! ($entry == "user" || $entry == "service") ]]; then
echo "blank or incorrrect entry"
else
echo "entry is correct "
fi
请注意,没有必要使用-z$entry测试$entry是否为空,因为您只关心该条目是否与您的一个关键字匹配,并且您的错误消息包括无效输入和空输入情况