Linux 标准实用程序清单包括getopts,但不包括getopt。类似于Posix实用程序的开放群列表。
同时,维基百科的标准Unix命令列表包括getopt,但不包括getopts。类似地,(基于基于Debian的Ubuntu )也包括getopt,但不包括getopts (而且它是GNU增强版。
balter@spectre:~$ which getopt
/usr/bin/getopt
balter@spectre:~$ getopt -V
getopt from util-linux 2.27.1
balter@spectre:~$ which getopts
balter@spe
假设我有以下脚本来处理选项:
while getopts dsf opts 2>/dev/null
do
case $opts in
d) echo "d";;
s) echo "s";;
\?) echo "Error: An invalid option [?] was entered.";
exit 1;;
esac
done
我想用我输入的无效开关替换。所以如果我进入
./myscript -z //output: Error: An invalid option [-z] w
我有一个脚本myscript.sh
#!/bin/sh
echo $1 $2
就像..。
./myscript.sh foo bar
这给了我一个输出..。
foo bar
但是如何使这个脚本包含自定义命令选项呢?例如..。
./myscript.sh -a foo and corespond to $1
和
./myscript.sh -b bar and corespond to $2
我正在尝试扩展源代码脚本中的getopts,如下所示。如果传入a、b、c、d以外的选项,则需要打印"invalid option“并退出。 script_a.sh: #!/bin/bash
script_a_getopts() {
while getopts 'a:b:' OPT; do
case "$OPT" in
a)
a=$OPTARG
;;
b)
b=$OPTARG
;;
*)
我正在编写一个bash脚本,它依赖于通过参数提供的许多值,并提供可选(布尔)标志。 基于this page上的示例,我使用-h选项将脚本扩展为以下内容: human=false
while getopts u:a:f:h: flag
do
case "${flag}" in
u) username=${OPTARG};;
a) age=${OPTARG};;
f) fullname=${OPTARG};;
h) human=true;;
esac
done
if $human; then
我需要将单词字符串传递给KSH脚本,如下所示
$ script.sh -p "a b c"
我期望看到以下内容
PARMS a b c
但是当我尝试打印$PARMS的值时,只打印出第一个单词"a“
#!/bin/ksh
ARGS=`getopt p: $*`
set -- $ARGS
for i
do
case "$i"
in
-p) PARMS=$2; shift; shift;;
--) shift; break;;
#!/bin/bash
#if present -a flag then print this echo
#echo "A";
#if -b is present then print b
#echo "B"
#and if -c 10 present how can I read this value '10' ?
上面是我想要的脚本外观
我希望能够像这样开始
myscript.sh -a -b -c 10
或
myscript.sh
或
myscript.sh -a -c 10
或
myscript.sh -c 10
诸若此类
我有下面的程序foo,它可以使用三个可选标志之一,f、g或s
usage()
{
echo "Use this correctly"
}
while getopts "fgs" opt; do
case $opt in
f)
echo f
foo="$OPTARG"
echo $foo
;;
g)
echo g
foo="g"
;;
我正在尝试编写一个简单的bash脚本,执行如下
$ ./export.sh -n <my-file-name> -a <my-api-key>
我使用它作为在构建时在Go项目中传递一些参数的方法。
脚本的一个非常简单的版本是:
#!/bin/bash
while getopts n:a option
do
case "${option}"
in
n) FILENAME=${OPTARG};;
a) APIKEY=${OPTARG};;
esac
done
if [ -z "$FILENAME" ]
then
FILENAME=d
我使用的是Cygwin版本2.10.0和perl 5.26.0。我需要将getopts.pl改为Getopt::Std,但是如何处理&Getopts('F:f:');行呢?
#! /usr/bin/perl
require "getopts.pl" ;
# Perl script to take particle data and
# plot using (in this case) GMT to
# produce a postscript file of specified size.
# Assumption is that this is
我有一系列的BASH脚本。
我正在使用getopts来解析cmd行中的参数(尽管对替代项是开放的)。
这些脚本有一系列常见的选项,称为“选项集”、“队列”、“核心”等。
然后,每个脚本都有一系列额外的选项,即设置B1、B2、B3。
我想要的是脚本
"1 to be able to take options A+B1"
"2 to be able to take options A+B2"
"3 to be able to take options A+B2"
但我希望能够将选项A的代码存储在一个中心位置(库/函数),并且必须在每个脚本中写出
当我试图像这样执行bash脚本时:
bin/provision-pulsar-commands -t development -n provisioning
输出打印:
租户=
命名空间=
这是我的脚本(供应-脉冲星-命令):
#!/bin/bash
function display_usage {
echo "You may override the namespace and tenant for all components for testing, if desired."
echo "usage: bin/provision-pul
我正在尝试使用bash中的getopts处理命令行参数。其中一个需求是处理任意数量的选项参数(不使用引号)。
第一个示例(仅获取第一个参数)
madcap:~/projects$ ./getoptz.sh -s a b c
-s was triggered
Argument: a
第二个示例(我希望它的行为像这样,但不需要引用参数“
madcap:~/projects$ ./getoptz.sh -s "a b c"
-s was triggered
Argument: a b c
有没有办法做到这一点?
下面是我现在拥有的代码:
#!/bin/bash
while getop
我正在尝试编写一个可以同时使用${1}和getopts选项的脚本。我希望使用用法行来运行它:
./test_script test -a
要打印,请执行以下操作:
test
-a was triggered!
我试过了
echo ${1};
while getopts "c:a" opt; do
case $opt in
a)
echo "-a was triggered!" >&2
;;
\?)
echo "Invalid option: -$OPTARG" >
我有简短的脚本test.pl
#!/usr/bin/perl
use locale;
use encoding 'utf-8';
use Getopt::Std;
getopts("dei") or print STDERR "TRALALALALA\n";
print"@ARGV\n";
我需要抑制getopt生成的Unknown option:消息,并且只在stderr上获取我的TRALALALALA。
我正在尝试获取以下内容作为我的脚本的有效调用:
sh name.sh -l -a
sh name.sh -l
这是我到目前为止使用getopts的代码,其中-a是一个必需的参数:
default="no"
echo "Initial parameters.
while getopts ":l:a:" o; do
case "${o}" in
l)
...;;
a)
a+=(${OPTARG})
IFS=','
当使用getopts和case子句时,作为最后一个模式子子句的*)模式子子句是否等效于\?)和:)模式子子句作为最后两个模式子子句的结合?具体来说,
while getopts "" opt; do
case $opt in
a) a="$OPTARG"
;;
b) b="$OPTARG"
;;
...
;;
\?) printf "illegal option: -%s\n" "$
我想在我的.bash_profile中定义的函数中使用getopts。我的想法是,我想把一些标志传递给这个函数来改变它的行为。
代码如下:
function t() {
echo $*
getopts "a:" OPTION
echo $OPTION
echo $OPTARG
}
当我像这样调用它时:
t -a bc
我得到以下输出:
-a bc
?
怎么了?我希望在不手动移动和解析的情况下获得值bc。如何在函数中正确使用getopts?
编辑:更正了我的代码片段以尝试$OPTARG,但无济于事
编辑#2:好吧,原来代码没问题,我的shell不知
我在OSX上,我需要一个处理多个参数的bash脚本。基于这个网站上的一些答案,我编写了以下bash脚本(为了隐私起见,删除了一些字符串):
#!/bin/bash
# A POSIX variable
OPTIND=1 # Reset in case getopts has been used previously in the shell.
# Default parameter value:
PORT=xxx
PUBKEY=xxx
HOST_IP=xxx
# show_help function
show_help() {
echo "Usage: $
嗨,有人能解决这个问题吗,我不能出去。
我无法得到-p的输出。
#!/bin/bash
args=`getopt c:m:p $*`
if [ $? != 0 -o $# == 0 ]
then
echo 'Usage: -c <current-dir> -m <my dir> -p <argument>'
exit 1
fi
set -- $args
for i
do
case "$i" in
-c) shift;CURRDIR=$1;shift;shift ;;
我有以下bash脚本:
#!/bin/bash
function usage() {
printf "\n"
echo "Updates a Lambda with env vars stored in a Secrets Manager secret. Complete drop n' swap."
printf "\n"
echo "Syntax: bash $0 -a <ARN> -s <secretName> [-h]"
echo "options:"