Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.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 如果语句操作不起作用?_Linux_Bash_If Statement - Fatal编程技术网

Linux 如果语句操作不起作用?

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

此功能不起作用。看来我用的手术太多了。它工作到第二个II或操作,然后在第三个和第四个停止工作。所以我注释掉的那一行不起作用,但另一行起作用了

不知道我做错了什么?我不想使用用例语句;也许有更好的办法?我只需要调用这个函数并确保用户输入是正确的。它不应该是空的,并且应该是其他三个条目中的任何一个

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是否为空,因为您只关心该条目是否与您的一个关键字匹配,并且您的错误消息包括无效输入和空输入情况