Vil*_*agg 2 unix linux bash shell getopts
我正在尝试创建一个shell脚本,它有两个必需参数(arg1,arg2),然后是一个可选的-b标志加上用户选择使用该标志时需要遵循的参数.
让我解释:
这是一个安装脚本,它利用GIT从Github存储库中获取应用程序.用户键入终端f.ex.:
./shellscript.sh new <app_name> # fetches master branch by default
Run Code Online (Sandbox Code Playgroud)
并且脚本从此存储库中获取主分支的实例.但是,用户是否应该选择使用可选的-b标志,这意味着他/她想要指定要获取的分支,例如开发分支.意味着用户可以这样做:
./shellscript.sh new <app_name> -b develop # or which ever branch there is available
Run Code Online (Sandbox Code Playgroud)
我也很好奇如何使脚本工作,以便用户在'new'参数和'app_name'参数之前键入-b标志+ branch_name并不重要.但这可能不是目前最重要的事情.
要知道我正在尝试构建什么,这里是一个指向我当前脚本的链接,它只接受两个必需参数并且只获取主分支:My Super Cool Artisan Executable Script
PS:我一直在尝试使用getopts的很多例子,我在Stackoverflow和其他博客上都找到了这些例子,但是没有一个帮助我完全使它工作.因此,我在这里向你们所有人寻求帮助.
非常感谢,请务必查看我的Linux Mint/Ubuntu - 仅适用于酷人的安装后脚本(您和那些从Windows/Mac切换到Linux的人)
此致,Villi
我通常会自己编写以允许短期和长期期权:
function Usage()
{
cat <<-ENDOFMESSAGE
$0 [OPTION] REQ1 REQ2
options:
-b -branch branch to use
-h --help display this message
ENDOFMESSAGE
exit 1
}
function Die()
{
echo "$*"
exit 1
}
function GetOpts() {
branch=""
argv=()
while [ $# -gt 0 ]
do
opt=$1
shift
case ${opt} in
-b|--branch)
if [ $# -eq 0 -o "${1:0:1}" = "-" ]; then
Die "The ${opt} option requires an argument."
fi
branch="$1"
shift
;;
-h|--help)
Usage;;
*)
if [ "${opt:0:1}" = "-" ]; then
Die "${opt}: unknown option."
fi
argv+=(${opt});;
esac
done
}
GetOpts $*
echo "branch ${branch}"
echo "argv ${argv[@]}"
Run Code Online (Sandbox Code Playgroud)