【问题标题】:Switch statement in cshcsh中的switch语句
【发布时间】:2023-04-03 18:26:01
【问题描述】:

我正在尝试制作一个 switch 语句以在 tcsh 中工作,但我不确定它为什么不工作。我在屏幕上显示一个菜单,如果选择了该选项,它会显示价格,然后返回顶部并重复,直到选择退出选项。

#!/bin/csh

clear          
echo -n "Petes A Pizza                 "        
echo -n "                 Menu           "      
echo -n "                                     " 
echo -n "                 Make a selection    " 
echo -n "                         "     
echo -n "               A. Speciality Pizza     "     
echo -n "               B. Veggi Lovers Pizza   "     
echo -n "               C. Meat Lovers Pizza    "       
echo -n "               D. Hawaiian Pizza       "       
echo -n "               E. Cheese Pizza         "     
echo -n "               F. Exit                 "     

set a = $<                      

switch ($a)                    

        case [A] :        
 set A = ((7.99 + 0.07))
                echo $A
                sleep 5
                goto top
        case [B] :              #they choose option 2
                set B = ((8.99 * 0.07) + 8.99)
                echo $B
                sleep 5
                goto top
        case [C] :              #they choose option 3
                set C = ((6.99 * 0.07) + 6.99)
                echo $C
                sleep 5
                goto top
        case [D] :              #they choose option 4
                set D = ((8.49 * 0.07) + 8.49)
                echo $D
                sleep 5
                goto top
        case [E] :              #they choose option 5
                set E = ((3.99 * 0.07) + 3.99)
                echo $E
                sleep 5
        case [F] :             
                exit 0          
                breaksw         

        endsw
end

【问题讨论】:

  • 问题是你使用 csh 开头:) 见 this Wikipeda 有一个很好的语法示例
  • 您为什么使用case [A] : 而不仅仅是case A :?为什么要使用echo -n,它将所有输出打印在一行上?你没有标签top
  • 谢谢,我已将其更改为案例 A。我无法进行计算,因为它最终会打印数字和其他信息,而不是计算结果。
  • csh 使用内置的@ 命令执行算术运算,但仅限于整数。 expr 命令也只对整数起作用。

标签: linux switch-statement csh


【解决方案1】:

这里有一些建议应该足以帮助你让它发挥作用。

#!/bin/csh 更改为#!bin/csh -f。这告诉 shell not 读取您的 ~/.cshrc 文件,这样可以节省时间并避免混淆。 (例如,如果您不小心编写了依赖于您在 .cshrc 中定义的别名的代码,那么您的脚本将无法为其他任何人工作。)

如果您必须清除屏幕,clear 命令就是这样做的方法——但是为什么呢?如果我想在运行你的脚本之前清除我的屏幕,我会自己做,非常感谢。如果我的屏幕上有我不想丢失的信息,当你的脚本决定为我删除它时,我会很生气。

将所有echo -ns 更改为仅echo-n 选项告诉echo 打印其输出时不带换行符;您的整个菜单将打印在一行上。

案例标签中的方括号是不必要的。 case A :case [A] : 的含义相同。请注意,您要求用户以大写形式提供输入,这可能不方便。

set A = ((7.99 + 0.07))
...
set B = ((8.99 * 0.07) + 8.99)

这些不一致。看起来您正在尝试计算基本价格加上 7% 的销售税。对于案例 B,更简单的表达式是 8.99 * 1.07

csh 无法识别此(( ... )) 语法;我想知道你从哪里得到它的想法。 csh 可以使用@ 命令进行算术运算:

@ x = 2 + 2
@ x ++

但它只对整数起作用。 bc 命令可以进行浮点计算。你可以这样写:

set B = `echo 'scale=5; 1.07 * 8.99' | bc`

或者,更简单地说:

set B = `echo '1.07 * 8.99' | bc -l

但是bc -l 可能会给你比你想要的更多的数字。 man bc 以获取有关 bc 命令、其语法及其工作原理的更多信息。请记住,csh 变量的值是字符串,而不是数字。

(我不确定bc 是完成这项工作的最佳工具。)

最后,csh 并不是编写脚本的最佳语言。我使用它的时间比我愿意承认的要长,有时我不得不通过反复试验来找出给定语法的行为方式;在许多情况下,语法定义不明确,并且手册页并不总是清楚地说明问题。

推荐阅读:"Csh Programming Considered Harmful",作者 Tom Christiansen。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 2012-12-03
    • 2010-09-17
    相关资源
    最近更新 更多