2015-11-04 187 views
0

我目前正在写一个脚本在csh和我的脚本必须采取-f命令行选项,所以我的剧本是这样的:通过命令行选项CSH脚本

checker -f 

而且会做什么,我会希望它能做到。 如何检查用户是否放入-f命令行选项?

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

上面这个给我错误说“如果:缺少文件名”。我敢肯定,我正在错误地检查用户是否在提供命令行选项 - 但我该怎么做?

回答

0

你必须用双引号括$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 

一种替代的方式来达到同样是在前面加上虚拟人物,就像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 

结果到:

% ./c.sh -a 
OK 
%