假设我有一个文件(.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代码
任何人都能说出如何实现这个目标吗?
答案 0 :(得分:1)
您可以通过$n
获取命令行参数,其中n
是整数&gt; 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
答案 1 :(得分: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访问它时。我的脚本会处理这个问题,但是最好使用其中一种格式,并且情况也应该是统一的...否则你将会邀请不必要的复杂性。