通过命令行选项CSH脚本
问题描述:
我目前正在写一个脚本在csh和我的脚本必须采取-f
命令行选项,所以我的剧本是这样的:通过命令行选项CSH脚本
checker -f
而且会做什么,我会希望它能做到。 如何检查用户是否放入-f
命令行选项?
if($1 == "-f") then
do something
endif
上面这个给我错误说“如果:缺少文件名”。我敢肯定,我正在错误地检查用户是否在提供命令行选项 - 但我该怎么做?
答
你必须用双引号括$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)
。 - 第三,
-f
是csh
文件查询方案的一部分与像if (==)
表达式中使用时。
上述组合通过csh
解释为尝试使用-f
操作者在名为字面上==
文件,其中,当然,是不存在的,因此在“if:缺少文件名”。
以下是csh的档案查询交换机的列表:
r, w, x, e, o, z, f, d
如果您选择的不在这个名单上的任何字母,你就不会碰到你的问题:
if($1 == "-a") then
echo OK
endif
结果到:
% ./c.sh -a
OK
%