LINUX.ORG.RU

Помогите приделать нормальные параметры

 


0

2

Есть следующий код. Места параметров зашиты и мне бы хотелось добавить к этому чуду нормальные параметры сохраняя логику:

-o и --output= для output (default: "./output.out")
-m и --mode= для mode (default: "HEX")
-f и --file= для command (запуск main.sh MUL.aic (т.е. без -f) тоже должен быть допустим) (без этого параметра должен выводить справку)
-i и --init= для initialiser (default: "00000000")
-d и --deep= для отдельного (внизу не перечислен) параметра глубины. (default: "0")
-h и --help для вывода справки

Научите, пожалуйста, как так сделать?

# USE: main.sh MUL.aic INTS ./output.out DEADBEEF
#        $0      $1      $2      $3        $4
#     filename command mode    output   initialiser
#      [M]       [M]    [M]     [O]        [O]

PAR0="$0"
PAR1="$1"
PAR2="$2"
PAR3="$3"
PAR4="$4"

if [ -z "$PAR1" ] || [ -z "$PAR2" ]
then
    echo "Aicha v.0.2 LGPL v3"
    echo "Use: main.sh <file> <format> (output file) (initialiser sequence)"
    echo "Allowed formats: ASCII, HEX, INTS"
    exit 0
fi

if [ "$PAR2" == "HEX" ]
then
   FORMAT="HEX"
   PAR2="0"
elif [ "$PAR2" == "ASCII" ]
then
   FORMAT="ASCII"
   PAR2="0"
elif [ "$PAR2" == "INTS" ]
then
   FORMAT="INTS"
   PAR2="0"
fi

if [ -z "$PAR3" ]
then
    OUTPUT="./output.txt"
else
    OUTPUT="$PAR3"
fi

if [ -z "$PAR4" ]
then
    INITER="00000000"
else
    INITER="$PAR4"
fi
★★

Последнее исправление: sambist (всего исправлений: 1)
Ответ на: комментарий от sambist

getopt не умеет в длинные теги, иди читай дальше.

$ getopt -h

Usage:
 getopt optstring parameters
 getopt [options] [--] optstring parameters
 getopt [options] -o|--options optstring [options] [--] parameters

Options:
 -a, --alternative            Allow long options starting with single -
 -h, --help                   This small usage guide
 -l, --longoptions <longopts> Long options to be recognized
 -n, --name <progname>        The name under which errors are reported
 -o, --options <optstring>    Short options to be recognized
 -q, --quiet                  Disable error reporting by getopt(3)
 -Q, --quiet-output           No normal output
 -s, --shell <shell>          Set shell quoting conventions
 -T, --test                   Test for getopt(1) version
 -u, --unquote                Do not quote the output
 -V, --version                Output version information

иди читай дальше.

Ты как был самоуверенным невеж{ей,дой}, так и остался.

tailgunner ★★★★★
()

The getopts command deprecates the older getopt(1) utility due to its handling of arguments containing whitespace.

anonymous
()

После этой обработки сдвинуть параметры (shift) и уже обрабатывать нормально. В чём вопрос-то?

ziemin ★★
()

что значит «нормальные параметры»?

Iron_Bug ★★★★★
()

Я делаю обычно так:

#!/bin/bash

file=
command=
mode=
output=
initlzr=
depth=

help() {
 cat <<EOF
help
EOF
exit
}

heeelp() {
 cat <<EOF
Much more help
EOF
exit
}

while test "$1" ; do
    param="$1" ; shift
    case "x$param" in
    x-h) help ;;
    x--help) heeelp ;;
    x-f) test "$file" || file="$1" ; shift ;;
    x--file=*) test "$file" || file="${param#--file=}" ;;
    #... дальше по аналогии...
    x*) test "$file" || file="$param" ;;
    esac
done

test "$file" || help
test "$output" || output=./output.out
test "$mode" || mode=HEX
test "$initlzr" || initlzr=00000000
test "$depth" || depth=0

# обработка здесь

В таком виде file задаёт первый -f либо --file=. Если в case убрать 'test «$file» || ', то задавать будет последний. В принципе, если задать что-то типа "-x"/"--exec", то можно в case на этот параметр дёргать обработку с накопленными значениями, т. е. обрабатывать, например, несколько файлов за раз.

berrywizard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.