0

假设我有一个文件(.csh)

文件内容

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 代码

任何人都可以告诉这个想法如何实现吗?

4

2 回答 2

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 访问它时。我的脚本会处理这个问题,但是最好使用其中一种格式,并且大小写也应该是统一的……否则你会带来不必要的复杂性。

于 2012-04-15T13:42:50.610 回答
1

$n您可以通过where nis integer > 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
于 2012-04-13T10:40:07.143 回答