带有命令行选项的 csh 脚本

csh script with command line options

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

checker -f 

那会做我想做的事。 我如何检查用户是否输入了 -f 命令行选项?

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

上面的错误提示 "if: Missing file name"。我很确定我在检查用户是否输入了命令行选项时走错了路 — 但我应该怎么做?

您必须将 </code> 括在双引号 <code>" 中才能生效:

#!/bin/csh   
if ("" == "-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

实现相同目标的另一种方法是在 both 前添加一个 虚拟字符 ,如 b 或其他== 表达式的一部分,像这样:

if (b == b-f) then 

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

  • 首先,您选择了要调用的命令行开关 f
  • 其次,表达式if( == "-f")被计算为if (-f == -f)
  • 第三,当与 if ( == ).[=55= 这样的表达式一起使用时,-fcsh 文件查询 方案的一部分]

上述组合被 csh 解释为试图在字面上命名为 == 的文件上使用 -f 运算符,当然,该文件不存在,因此"if: Missing file name".

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

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

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

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

结果:

% ./c.sh -a
OK
%