tcsh中的if-then-else语法

时间:2015-02-03 15:11:16

标签: tcsh

我正在尝试在tcsh(版本6.12.00(Astron)2002-07-23)中编写一个简单的脚本,但是我被if-then-else语法绊倒了。我是剧本写作的新手。

此脚本有效:

#!/bin/tcsh -f
if (1) echo "I disagree"

但是,这个没有:

#!/bin/tcsh -f
if ( 1 ) then
  echo "I disagree"
else
  echo "I agree"
endif

首先,这段代码在运行时会回应两个语句。在我看来,它永远不应该看到别的。另一方面,输出还将这些回声散布在“:找不到命令”的三次迭代中。

编辑添加:这是逐字输出:

: Command not found.
I disagree
: Command not found.
I agree
: Command not found.

我知道标准建议是使用另一个shell,但我真的无法做到这一点(新工作,新同事,其他人都使用tcsh,希望我的脚本可以移植)。

1 个答案:

答案 0 :(得分:4)

当我复制并粘贴您的脚本并在我的系统上运行它时,它会正确打印I disagree

当我将行结尾更改为Windows风格时,我得到:

: Command not found.
I disagree
: Command not found.
I agree
: Command not found.

因此,您的脚本很可能具有Windows样式的行结尾。修复行结尾,它应该工作。 dos2unix命令是一种方法(man dos2unix首先;与大多数UNIX文本处理命令不同,它替换其输入文件。)

问题是tcsh无法识别^ M('\r')作为行尾字符。它将行尾的then^M视为单个命令,并输出错误消息then^M: Command not found。 ^ M导致光标返回到行的开头,消息的其余部分将覆盖then