«тире» аргументы для сценариев оболочки [дубликат]

Нужно ли для этого использовать sed ? grep и perl могут делать то, что вам нужно.

grep 'Build_Type\|docker_Name' environment-info.conf | perl -pe "s|docker_Name='(.*?)-.*|docker_Name=\1|" > build_version.txt
4
04.11.2016, 19:45
2 ответа
#!/bin/bash
myfile=''
mydir=''

parse_args() {
    case "$1" in
        -d)
            mydir="$2"
            ;;
        -f)
            myfile="$2"
            ;;
        *)
            echo "Unknown or badly placed parameter '$1'." 1>&2
            exit 1
            ;;
    esac
}

while [[ "$#" -ge 2 ]]; do
    parse_args "$1" "$2"
    shift; shift
done
1
27.01.2020, 20:50

Существует getopts стандартная (встроенная) утилита в оболочках POSIX для разбора аргументов командной строки.

Вы можете использовать этот шаблон:

#! /bin/sh -
PROGNAME=$0

usage() {
  cat << EOF >&2
Usage: $PROGNAME [-v] [-d <dir>] [-f <file>]

-f <file>: ...
 -d <dir>: ...
       -v: ...
EOF
  exit 1
}

dir=default_dir file=default_file verbose_level=0
while getopts d:f:v o; do
  case $o in
    (f) file=$OPTARG;;
    (d) dir=$OPTARG;;
    (v) verbose_level=$((verbose_level + 1));;
    (*) usage
  esac
done
shift "$((OPTIND - 1))"

echo Remaining arguments: "$@"

Который разбирает аргументы стандартным образом, как это делают другие стандартные команды. например, вы можете вызвать его так:

myscript -vvv -f file -d dir other arg
myscript -ffile -ddir -- other arg

Подробности см. в спецификации POSIX или в руководстве к вашей оболочке.

9
27.01.2020, 20:50

Теги

Похожие вопросы