标签: getopts

getopts不会连续两次调用?

由于某种原因,选项在第一次调用时运行良好lib_progress_bar -c "@" -u "_" 0 100,但在第二次调用时超出一切都是默认值,因为getopts c:u:d:p:s:%:m: flag第二次看似不是真的,或者至少在我使用时从未执行过的情况set -x

#!/bin/bash



lib_progress_bar() {
    local current=0
    local max=100 
    local completed_char="#"    
    local uncompleted_char="."  
    local decimal=1 
    local prefix=" ["
    local suffix="]"
    local percent_sign="%"
    local max_width=$(tput cols)

    local complete remain subtraction width atleast percent chars
    local padding=3

    while getopts c:u:d:p:s:%:m: flag; do
        case "$flag" in
            c) completed_char="$OPTARG";;
            u) uncompleted_char="$OPTARG";;
            d) decimal="$OPTARG";;
            p) prefix="$OPTARG";;
            s) suffix="$OPTARG";;
            %) percent_sign="$OPTARG";;
            m) max_width="$OPTARG";;
        esac
    done
    shift $((OPTIND-1))


    current=${1:-$current} 
    max=${2:-$max} 


    if (( decimal > …
Run Code Online (Sandbox Code Playgroud)

bash shell getopts

12
推荐指数
2
解决办法
4446
查看次数

OPTIND变量如何在shell内置的getopts中工作

我的shell脚本非常简单,如下所示:

  while getopts "abc:" flag; do
         echo "$flag" $OPTIND $OPTARG
  done
Run Code Online (Sandbox Code Playgroud)

我做了一些测试如下:

Blank@Blank-PC:~/lab/shell/getopts_go$ sh foo.sh -abc CCC Blank
a 1
b 1
c 3 CCC

Blank@Blank-PC:~/lab/shell/getopts_go$ sh foo.sh -a -b -c CCC Blank
a 2
b 3
c 5 CCC

Blank@Blank-PC:~/lab/shell/getopts_go$ sh foo.sh -ab -c CCC Blank
a 1
b 2
c 4 CCC

Blank@Blank-PC:~/lab/shell/getopts_go$ sh foo.sh -a -bc CCC Blank
a 2
b 2
c 4 CCC
Run Code Online (Sandbox Code Playgroud)

我无法理解如何OPTIND使用不同的命令行调用,我对输出感到困惑.

你能帮助弄清楚计算机制OPTIND吗?

bash shell getopts

12
推荐指数
1
解决办法
2万
查看次数

在Bash中解析命令行参数的最佳方法?

经过几天的研究,我仍然无法找到在.sh脚本中解析cmdline args的最佳方法.根据我的参考资料,getopts cmd是要走的路,因为它"在不干扰位置参数变量的情况下提取和检查开关.意外的开关或缺少参数的开关被识别并报告为错误. "

当涉及空格但是可以识别常规和长参数(-p和--longparam)时,位置参数(例如2 - $ @,$#等)显然不能正常工作.我注意到,当使用嵌套引号传递参数时,这两种方法都会失败("这是"引用""引号"".").这三个代码示例中哪一个最能说明处理cmdline args的方法?大师不推荐使用getopt函数,所以我试图避免它!

例1:

#!/bin/bash
for i in "$@"
do
case $i in
    -p=*|--prefix=*)
    PREFIX=`echo $i | sed 's/[-a-zA-Z0-9]*=//'`

    ;;
    -s=*|--searchpath=*)
    SEARCHPATH=`echo $i | sed 's/[-a-zA-Z0-9]*=//'`
    ;;
    -l=*|--lib=*)
    DIR=`echo $i | sed 's/[-a-zA-Z0-9]*=//'`
    ;;
    --default)
    DEFAULT=YES
    ;;
    *)
            # unknown option
    ;;
esac
done
exit 0
Run Code Online (Sandbox Code Playgroud)

例2:

#!/bin/bash
echo ‘number of arguments’
echo "\$#: $#"
echo ”

echo ‘using $num’
echo "\$0: $0"
if [ $# -ge 1 ];then …
Run Code Online (Sandbox Code Playgroud)

bash command-line getopts

11
推荐指数
2
解决办法
5万
查看次数

在shell脚本中添加使用内容而不使用getopts

我有脚本,我需要显示使用命令,以防用户在执行脚本时错过任何必要的信息.

Usage : Script -s <server> -i <instance> -u <user> -p <password> <query> -w <warning value> -c <critical value>
Run Code Online (Sandbox Code Playgroud)

随着所有的解释 OPTIONS

我从参数中得到的值如下变量时尚.但我希望在shell脚本中使用此验证.

SERVER=$1
INSTANCE=$2
USER=$3
DB_PASSWD=$4
QUERY=$5
VAL_WARN=$6
VAL_CRIT=$7
Run Code Online (Sandbox Code Playgroud)

我尝试过使用getopts,但由于在传递值之前<query>没有-q参数,因此无法使用.

我已经尝试找到所有其他方法,但每个人都建议getopts这对我来说不是可行的解决方案.

请帮我这个..

unix linux shell getopts

10
推荐指数
1
解决办法
3万
查看次数

getopts检查互斥参数

我有一个简单的脚本(下面),它具有互斥的参数.

./scriptname.sh -m|-d [-n]但是,脚本的参数应该是用户可以运行./scriptname.sh -m -d错误的脚本.

问题:如何强制用户只提供了一个互斥参数?

#!/bin/sh

usage() {
   cat <<EOF
Usage: $0 -m|-d [-n]
where:
    -m create minimal box
    -d create desktop box
    -n perform headless build
EOF
   exit 0
}

headless=
buildtype=

while getopts 'mdnh' flag; do
  case "$flag" in
    m) buildtype='minimal' ;;
    d) buildtype='desktop' ;;
    n) headless=1 ;;
    h) usage ;;
    \?) usage ;;
    *) usage ;;
  esac
done

[ -n "$buildtype" ] && usage
Run Code Online (Sandbox Code Playgroud)

bash getopts

8
推荐指数
1
解决办法
6502
查看次数

在bash中使用getopts的布尔cli标志?

是否可以在 bash 中使用 getopts 实现布尔 cli 选项?基本上,如果-x指定了,我想做一件事,如果没有指定,则做另一件事。

bash command-line-interface getopts

8
推荐指数
1
解决办法
5933
查看次数

如果没有提供选项,有getopts显示帮助

我解析了一些类似的问题,但这些问题并不适合我.

我有这个很棒的bash脚本,可以执行一些很酷的功能,这里是代码的相关部分:

while getopts ":hhelpf:d:c:" ARGS;
do
    case $ARGS in
        h|help )
            help_message >&2
            exit 1
            ;;
        f )
            F_FLAG=1
            LISTEXPORT=$OPTARG
            ;;
        d )
            D_FLAG=1
            OUTPUT=$OPTARG
            ;;
        c )
            CLUSTER=$OPTARG
            ;;
        \? )
            echo ""
            echo "Unimplemented option: -$OPTARG" >&2
            echo ""
            exit 1
            ;;
        : )
            echo ""
            echo "Option -$OPTARG needs an argument." >&2
            echo ""
            exit 1
            ;;
        * )
            help_message >&2
            exit 1
            ;;
    esac
done
Run Code Online (Sandbox Code Playgroud)

现在,如果触发,我的所有选项都运行良好.我想要的是getopts 在没有触发选项时吐出help_message函数,比如脚本只是在没有参数的情况下启动./scriptname.sh.

我在这里看到了一些方法,实现了IF循环和函数, …

bash getopts

7
推荐指数
2
解决办法
9776
查看次数

如何在bash结尾处使用不带参数的getopts选项

我想在bash中使用getopts.用户应该选择自己的选项.大多数选项都有参数,但有两个选项没有参数.当没有参数的选项位于命令的中间时,它工作正常,但是当它在结尾时它不起作用.

注意 - 前两个参数(服务器和密码)是必需的,而不是getopts的一部分.

#!/bin/bash

SERVER=${1}
PASSWORD=${2}
VERSION=v0
ASKED_REVISION=0
DB=schema_1
PROPERTIES=1
FULL=0
USER=

# Usage info
show_help()
{
echo "
        Usage: Environment DBPassword [-V Version] [-R Revision] [-S Schema] [-P] [-F] [-U Username]

        -V Version      Version to deploy.
        -R Revision     Revision number (0 means the latest revision).
        -S Schema       Schema in the DB to deploy.
        -P              No(!) External Properties. If this flag is marked the deploy will not copy the external properties
        -F              Full deploy
        -U              Username. This User who …
Run Code Online (Sandbox Code Playgroud)

linux bash ubuntu getopts

7
推荐指数
1
解决办法
6488
查看次数

没有值的Shell Script Argument

我正在创建一个非常简单的sh文件来执行某些操作,但我想传递一个没有值的参数,例如:

./fuim -l
Run Code Online (Sandbox Code Playgroud)

但我收到以下消息:

./fuim: option requires an argument -- l
Run Code Online (Sandbox Code Playgroud)

如果我传递一个随机值,就像./fuim -l 1它完美无缺.我怎样才能做到这一点?

这是我到目前为止所拥有的:

while getopts e:f:l:h OPT
do
    case "$OPT" in
        h) print_help ;;
        e) EXT=$OPTARG ;;
        f) PROJECT_FOLDER=$OPTARG ;;
        l) LIST_FILES=1 ;;
        ?) print_help ;;
    esac
done

shift $((OPTIND-1))

if [ -z "$EXT" ] || [ -z "$PROJECT_FOLDER" ]; then
    print_help
fi
Run Code Online (Sandbox Code Playgroud)

linux bash getopts

6
推荐指数
1
解决办法
1812
查看次数

Bash - getopts - 在命令行参数传递的第一个位置的质量参数(操作数)

我使用以下行(希望这是最好的做法,如果不能纠正我)来处理命令行选项:

#!/usr/bin/bash

read -r -d '' HELP <<EOF
OPTIONS:
-c    Enable color output
-d    Enable debug output
-v    Enable verbose output
-n    Only download files (mutually exclusive with -r)
-r    Only remove files (mutually exclusive with -n)
-h    Display this help
EOF

# DECLARE VARIABLES WITH DEFAULT VALUES
color=0
debug=0
verbose=0
download=0
remove=0


OPTIND=1                # Reset in case getopts has been used previously in the shell
invalid_options=();     # Array for invalid options

while getopts ":cdvnrh" opt; do
  echo "Actual opt: …
Run Code Online (Sandbox Code Playgroud)

bash parameter-passing getopts command-line-arguments

6
推荐指数
1
解决办法
2873
查看次数