如何在我的案例中使用 switch case?

如何在我的案例中使用 switch case?

我的问题定义是: 1.编写一个 Bourn shell 脚本 dTOe,它将 0 到 999 之间的任何数字作为输入,并打印该数字的英文值。我正在努力解决上述问题。你能给我任何提示或帮助吗?

#! /bin/bash

number=$1

if [ $number -lt  0 -o $number -gt 999 ]
then
    echo put the right input between 0 and 999
fi

case "$number"
    [0-9]) 

答案1

想想你的思维过程是如何从数字形式翻译成散文形式的。你首先看什么?您如何处理这些信息?您的工作流程是否有可以以程序形式表达的模式?如何将其分解为类似于您可用的命令的小的、离散的步骤?

以上思路就是编程和脚本的精髓。

你心里已经有了流程的框架,把它写成“伪代码”——对你来说有意义的单词,如果对 shell 来说没有意义的话——然后逐步执行该流程,以确保它按照你的想法进行操作。而不仅仅是你的。然后将其从您的母语翻译成 shell 命令。

例如,一个好的起点可能是确定必须指示多少位值。有几种方法可以立即浮现在我的脑海中:“我们有多少位数字”,或者“这个数字是否大于 99?大于 9?”或者你甚至可以找出一个不需要你先解决这个问题的系统。

在这种情况下,你首先需要的是能够在shell中进行一些基本的算术,以及对比测试。所以:

假设我们已将数字读入变量 ,number并且已经对其进行了健全性检查,以确保用户没有输入-53or3.14或 oralbatross或我们不想实际解析的内容。我们可以从以下开始:

output=""
if [[ "$number" -gt 100 ]]; then
    # okay, we know $number is greater than 100
    hundreds=$((number/100))
    case $hundreds in
        1) output="one" ;;
        2) output="two" ;;
        3) output="three" ;;
        # et cetera
    esac
    number=$((number-100*hundreds))
fi
output="$output hundred"

您可以从那里开始构建。

答案2

echo -n "Enter number : "
read num

length=$(echo $num | wc -c)
length=$(( $length - 1 ))

echo "Your number $num in words : "
for (( i=1; i<=$length; i++ ))
do
   # get one digit at a time
    digit=$(echo $num | cut -c $i)
   # use case control structure to find digit equivalent in words 
    case $digit in
       0) echo -n "zero " ;;
       1) echo -n "one " ;;
       2) echo -n "two " ;;
       3) echo -n "three " ;;
       4) echo -n "four " ;;
       5) echo -n "five " ;;
       6) echo -n "six " ;;
       7) echo -n "seven " ;;
       8) echo -n "eight " ;;
       9) echo -n "nine " ;;
  esac 
done

 # just print new line
echo ""

相关内容