2015-11-04 236 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 
%