[英]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.