2012-04-13 58 views
0

可以說我有一個文件(.csh)從包含多個腳本(殼/ perl的)

文件內容

Script_1 
{ 
code of script1 
} 

Script_2 
{ 
    code of script2 
} 
. 
. 
. 

Script_n 
{ 

code of script_n 

} 

現在的事情是,如果我們運行像

文件運行特定的腳本
./file.csh -script1 <other arguments> 

它應該只執行腳本代碼1 像明智的,如果我們運行

./file.csh -script2 <other arguments> 

它應該只執行腳本2代碼

任何人都可以告訴想法如何做到這一點?

+3

你爲什麼要這樣做?文件很便宜;把每個腳本放在它自己的文件名中。 – 2012-04-13 10:43:04

+0

只是爲了幫助理念,而不是攜帶多個腳本。最好有一個單一的劇本! – user1228191 2012-04-13 10:47:42

+0

它使腳本變慢;所有腳本必須在您想運行的腳本運行之前完全解析。當然,你可以使用通用的'函數'(腳本的片段 - 'csh'具有POSIX shell的功能嗎?)。我在我的私人'$ HOME/bin'目錄中有數百個程序,其中很多是腳本(總共528個條目; 12個子目錄; 132個可執行文件;因此,384個腳本)。 – 2012-04-13 10:53:03

回答

1

您可以通過$n搶命令行參數,其中,n是爭論的順序整數> 0通過

#!/bin/csh 
if ($#argv < 1) then 
    echo "Usage: $0 (-script1|-script2) <args>" 
    exit 0 
endif 

if ($1 == '-script1') then 
# run Script_1 
else 
# run Script_2 
endif; 

如果你想獲得的所有參數除了第一個起來,你可以使用shift

#!/bin/csh 

// without argument by default operates on $argv which is all the arguments 
// passed via command line 
shift 

echo $argv // now contains all arguments but the first 
+0

可改變一個參數,以便在'-script1'丟失而使其他參數由處理子腳本(當然,它與下標很不相同)。 – 2012-04-13 10:42:13

+0

@JonathanLeffler編輯 – 2012-04-13 10:48:49

+0

夥計,它報告錯誤「如果:格式錯誤的文件查詢。」哪裏不對了!! – user1228191 2012-04-13 11:16:31

1

這是我的解決方案,希望它會有所幫助。

使用all_script文件來存儲所有內容。 我的樣本文件的內容是:

Script_1 
{ 
echo executing script1 
echo 1st arg = $1 
echo 2nd arg = $2 
echo rest arg = $* 
} 

Script_2 
{ 
echo script2 
echo 1st arg = $1 
echo 2nd arg = $2 
echo rest arg = $* 

} 

Script_3 
{ 
echo script3 
echo 1st arg = $1 
echo 2nd arg = $2 
echo rest arg = $* 
} 

我的腳本來運行這個:

#! /bin/csh -f 


set script_name = `echo $argv[1] | sed 's/-s/S/g' | sed 's/t/t_/g'` 
set script_arg = "$argv[2-$#argv]" 

#grep the relevent script 
grep -A1000 $script_name all_script | grep -B1000 -m1 "}" | sed 's/Script_[0-9]//g' | sed 's/{//g' | sed 's/}//g' > myscript 
csh ./myscript $script_arg 

echo "DONE :)" 

更改基於腳本的最大長度數量1000。 另外,請注意,您已將Script_1用作文件中的腳本名稱。而您嘗試使用參數-script1訪問它時。我的腳本負責處理這個問題,但是最好使用其中一種格式,並且應該使用統一的格式......否則您將招致不必要的複雜性。