带有命令行选项的 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= 这样的表达式一起使用时,-f
是 csh
文件查询 方案的一部分]
上述组合被 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
%
我目前正在用 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= 这样的表达式一起使用时,-f
是csh
文件查询 方案的一部分]
上述组合被 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
%