Shell编程-case语句

时间:2020-02-23 14:45:07  来源:igfitidea点击:

在本教程中,我们将学习Shell编程中的Case条件语句。

与if语句类似,我们使用case语句来进行决策并根据某些匹配执行代码块。

case语法

case word in
  pattern1)
    # block of code for pattern1
    ;;

  pattern2)
    # block of code for pattern2
    ;;

  *)
    # default block
    ;;
esac

其中," word"是与" pattern1"," pattern2"等匹配的某个值。

如果单词与任何模式匹配,则执行属于该模式的代码块。

';;'标记了代码块的结尾,使我们脱离了case。

*是默认模式。
如果找不到匹配项,则执行默认模式中的代码。

默认模式" *)"是可选的,可以省略。

esac(大小写相反)标志着case语句的结尾。

例1:编写一个Shell脚本从用户那里获取整数值并根据匹配结果打印一些消息

在下面的示例中,我们将打印数字。

#!/bin/sh

# take a number from user
echo "Enter number:"
read num

case $num in
  1)
    echo "It's one!"
    ;;

  2)
    echo "It's two!"
    ;;

  3)
    echo "It's three!"
    ;;

  *)
    echo "It's something else!"
    ;;
esac

echo "End of script."
$sh num.sh 
Enter number:
10
It's something else!
End of script.

$sh num.sh 
Enter number:
2
It's two!
End of script.

示例2:编写Shell脚本以显示问候语

在下面的示例中,我们将以用户名和一天中的时间作为输入并显示一些问候消息。

#!/bin/sh

# take user name
echo "Enter your name:"
read name

# take time of the day
echo "Enter time of the day [Morning/Afternoon/Evening/Night]:"
read daytime

case $daytime in
  "Morning")
    echo "Good Morning $name"
    ;;

  "Afternoon")
    echo "Good Afternoon $name"
    ;;

  "Evening")
    echo "Good Evening $name"
    ;;

  "Night")
    echo "Good Night $name"
    ;;
esac

echo "End of script."
$sh greetings.sh 
Enter your name:
theitroad
Enter time of the day [Morning/Afternoon/Evening/Night]:
Morning
Good Morning theitroad
End of script.

$sh greetings.sh 
Enter your name:
theitroad
Enter time of the day [Morning/Afternoon/Evening/Night]:

End of script.

在第二次运行中,我们没有收到任何问候消息,因为没有提供当天的时间,并且case语句中没有默认模式" *)"来处理这种情况。

因此,我们可以通过包含" *)"默认模式来修改上述代码以处理这种情况。

#!/bin/sh

# take user name
echo "Enter your name:"
read name

# take time of the day
echo "Enter time of the day [Morning/Afternoon/Evening/Night]:"
read daytime

case $daytime in
  "Morning")
    echo "Good Morning $name"
    ;;

  "Afternoon")
    echo "Good Afternoon $name"
    ;;

  "Evening")
    echo "Good Evening $name"
    ;;
    
  "Night")
    echo "Good Night $name"
    ;;

  *)
    echo "Time of the day missing!"
    ;;
esac

echo "End of script."
$sh greetings-1.sh 
Enter your name:
theitroad
Enter time of the day [Morning/Afternoon/Evening/Night]:

Time of the day missing!
End of script.