繁体   English   中英

在csh中切换语句

[英]Switch statement in csh

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

#!/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

以下是一些足以帮助您实现目标的建议。

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

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

将所有echo -n s更改为echo -n选项告诉echo打印其输出而没有尾随换行符; 您的整个菜单将打印在一行上。

案例标签中的方括号是不必要的。 case A :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编程被认为是有害的” ,由汤姆克里斯蒂安森

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM