带命令行选项的csh脚本

时间:2015-11-04 06:46:45

标签: shell csh

我目前正在csh中编写脚本,我的脚本必须采用-f命令行选项,所以我的脚本看起来像这样:

checker -f 

这会做我想要它做的事情。 如何检查用户是否放置了-f命令行选项?

if($1 == "-f") then
    do something
endif

上面给出了错误说“if:Missing file name”。我很确定我会检查用户是否正在使用命令行选项 - 但我应该怎么做?

1 个答案:

答案 0 :(得分:1)

您必须将$1括在双引号"中才能实现此目的:

#!/bin/csh   
if ("$1" == "-f") then
    echo RIGHT FLAG
else
    echo WRONG OR NO FLAG
endif

产生:

% ./c.sh -f
RIGHT FLAG
% ./c.sh -z
WRONG OR NO FLAG
% ./c.sh
WRONG OR NO FLAG

另一种实现相同目的的方法是在 {/ 1}}的两个部分之前添加虚拟角色,如b或其他任何内容。表达式,像这样:

==

这种情况发生的原因与某些看似无关的因素的相当神秘的组合有关:

  • 首先,您选择了名为if (b$1 == b-f) then
  • 的命令行开关
  • 其次,表达式f被评估为if($1 == "-f")
  • 第三,与if (-f == -f)这样的表达一起使用时,-fcsh 文件查询方案的一部分。

上述组合被if ( == )解释为尝试在名为字面csh的文件上使用-f运算符,当然,该文件不存在,因此“if :缺少文件名“。

以下是csh的文件查询开关列表:

==

如果您选择了此列表中没有的任何字母,您就不会遇到问题:

r, w, x, e, o, z, f, d 

结果:

if($1 == "-a") then
    echo OK
endif