g****g 发帖数: 1828 | 1 这个我都快读晕了。
#!/bin/bash
# Light weight option parser for bash
#
abstract=""
usage="Usage: \${0##*/} [options] [arg1] [arg2] ..."
function Abstract()
{
abstract=$@
}
function Usage()
{
usage=$@
}
function Option()
{
eval "options=\"$options $1,$2,$3\""
eval "main_help=\"$main_help \t -$1,--$2\n\""
eval "main_help=\"$main_help \t $4\n\n\""
}
function OptionWithArgument()
{
ARGUMENT=`echo $3 | tr a-z A-Z`
eval "options_warg=\"$options_warg $1,$2,$3\""
eval "main_help=\"$main_help \t -$1 $ARGUMENT, -- | o**n 发帖数: 1249 | 2 复杂一些的东西就用python/perl之类的吧,别shell了。
【在 g****g 的大作中提到】 : 这个我都快读晕了。 : #!/bin/bash : # Light weight option parser for bash : # : abstract="" : usage="Usage: \${0##*/} [options] [arg1] [arg2] ..." : function Abstract() : { : abstract=$@ : }
| v*****r 发帖数: 1119 | 3 shell 并不难,如果了解了用两只手就能数清的 special variables ($#, $-, $?, $!
,$@ ...), glob patten matching etc. 而且 shell 的这些东西都 natually built
into Perl, 对真正理解 Perl 也是必需的。
一般给自己的 shell script 加个 option parser 用不着这么复杂,用 shell
builtin 的 getopt/getopts, 或者用 case + while [ $# -gt 0 ],如果 options 不
多的话,不需要几行 code。
你这个 script 好象是个 parse generator, 用来给带着超级多 options 的 shell
script 自动产生 case statement 的 (case + while [ $# 。。。 】), 如果能贴
个使用的例子就清楚了
【在 g****g 的大作中提到】 : 这个我都快读晕了。 : #!/bin/bash : # Light weight option parser for bash : # : abstract="" : usage="Usage: \${0##*/} [options] [arg1] [arg2] ..." : function Abstract() : { : abstract=$@ : }
| g****g 发帖数: 1828 | 4 真是牛人,这么复杂的script,也能理出头绪。下面是另一个script用到前面那个
script的部分code。应该够用了。
# Importing the option parser
. $SRT_PRIVATE_CONTEXT/*******************/OptionParser.sh
# Description of the script
Abstract \${0##*/} - Merge a set of root files defined by a expresion.
# Description of how to use the script
Usage \${0##*/} "-n -p|-r [-d] dir1 [dir2] ..."
# Defining the parameters to be parsed
OptionWithArgument n name name 'Name of the merged file.'
OptionWithExpression p pattern pattern 'Pattern for matching fil
【在 v*****r 的大作中提到】 : shell 并不难,如果了解了用两只手就能数清的 special variables ($#, $-, $?, $! : ,$@ ...), glob patten matching etc. 而且 shell 的这些东西都 natually built : into Perl, 对真正理解 Perl 也是必需的。 : 一般给自己的 shell script 加个 option parser 用不着这么复杂,用 shell : builtin 的 getopt/getopts, 或者用 case + while [ $# -gt 0 ],如果 options 不 : 多的话,不需要几行 code。 : 你这个 script 好象是个 parse generator, 用来给带着超级多 options 的 shell : script 自动产生 case statement 的 (case + while [ $# 。。。 】), 如果能贴 : 个使用的例子就清楚了
| v*****r 发帖数: 1119 | 5 谢谢例子,把 option parser 和 main script 分开估计是想modularize, 但你们这个
parsergenertor 是有点 overcomplicated 了,而且又不能被 generalized 到其他
scripts 上。 Shell 不难,但写出 easily readable shell 是不容易.
BTW, 推荐一本书给你:Portable Shell Programming
http://www.amazon.com/Portable-Shell-Programming-Extensive-Collection/dp/0134514947 |
|