LINUX.ORG.RU

Bash: парсинг параметров

 ,


0

3

Неужели за долгие долгие долгие... ГОДА. В баше так и не сделали нормальный парсинг аргументов из КОРОБКИ? Неужели нужно вечно страдать, втыкать в каждый файлик лапшу из ИИ гугла одну и ту же?

while [[ "$#" -gt 0 ]]; do
    case "$1" in
        -o|--output)
            output_file="$2"
            shift # Consume the argument's value
            ;;
        -v|--verbose)
            verbose=true
            ;;
        -i|--input)
            input_value="$2"
            shift # Consume the argument's value
            ;;
        *)
            echo "Unknown parameter: $1"
            exit 1
            ;;
    esac
    shift # Consume the current argument (flag or unknown)
done


с этими корявыми закорючками, которые никогда не запомнишь?

Вот это вообще что такое?

while [[ "$#" -gt 0 ]]; do


Я до сих пор не могу это понять интуитивно. Кто это вообще придумывал такой синтаксис? Что он ел? Что пил?

;;

Зачем делать 2 точки с запятой?

★★★★

Последнее исправление: gobot (всего исправлений: 2)

ИМХО грамотно написано, я после нескольких лет написания автоматизации к такому пришел.

Вот это вообще что такое?

$# количество аргументов, каждый вызов shift удаляет один аргумент, таким образом происходит проход по аргументам.

anonymous
()
while getopts ":hs:i:l:p:n" opt; do
  case "$opt" in
  h) usage ;;
  s) SERVER=$OPTARG ;;
  i) INDEX=$OPTARG ;;
  l) LOGIN=$OPTARG ;;
  p) PASSWD=$OPTARG ;;
  n) ADDITIONAL="--silent" ;;
  :) echo "Опция -$OPTARG требует аргумента" >&2; usage ;;
  \?) echo "Неизвестная опция -$OPTARG" >&2; usage ;;
  esac
done

shift "$((OPTIND-1))"   # убираем уже разобранные параметры

if [ "$SERVER" = "" ] || [ "$INDEX" = "" ] || [ "$LOGIN" = "" ] || [ "$PASSWD" = "" ]; then
  echo "Set required arguments"
  usage
fi

vtVitus ★★★★★
()
Последнее исправление: vtVitus (всего исправлений: 3)
Ответ на: комментарий от gobot

неужели за столько лет нельзя написать какую то функцию, эти параметры ведь в каждом скрипте используется

Спорю что какой-то упорыш, который как и ты не понимает что стоит писать на баше а что нет, это таки написал - поищи на каких-нибудь awesome bash помойках.

А в самом баше этого нет и никогда не будет, потому что на нём нормальные люди никогда не станут писать то что требует разбора аргументов.

anonymous
()
Ответ на: комментарий от anonymous

Ой да ладно, часто нужны скрипты примитивные, куча скриптов для управления проектом и с параметрами и без. Ну а что, если не баш? Он везде есть. На питоне, на ноде или пхп что ли, ну скажи еще что на Ц

gobot ★★★★
() автор топика
Ответ на: комментарий от gobot

куча скриптов для управления проектом и с параметрами и без.

Makefile, из новомодных – just

Ну а что, если не баш? Он везде есть.

нет на винде, маке, бздях и еще кое-где

На питоне, на ноде или пхп что ли

а у этих с переносимостью сильно лучше

anonymous
()