Helpers - компьютеры, интернет, программирование

AWK BEGIN IF синтаксический запрос

Итак, чего я пытаюсь добиться, так это проверить правильность ввода пользователя, чтобы убедиться, что ввод больше 0. Однако после переноса его в gedit в моей среде Linux меня приветствовал целый кусок розового текста, который определенно означает, что синтаксис неправильный, но почему-то я просто не понимаю.

Я относительно новичок (2 недели) в шеллскрипте, поэтому я был бы очень признателен, если бы кто-нибудь мог объяснить мне свое решение. Я также пытался поставить END непосредственно перед выходом 1, но безрезультатно. Заранее спасибо!

Строка кода, вызывающая проблему:

awk 'BEGIN{if($get_price>'0') exit 1}'

Полный код для случая C:

[Cc] | [C|c] ) read -p "New Price: " get_price
        awk 'BEGIN{if($get_price>'0') exit 1}'
        if [ $? -eq 1]; then
            PRICE[$index]=$get_price;
            echo "The book price has been updated successfully!"
            echo "--------------------------------------------"
        else
            tput setf 4;echo "Please input a valid price!";tput setf 2;
            echo "--------------------------------------------"
        fi
        press_enter;;
24.01.2018

Ответы:


1

awk не является оболочкой. awk — это инструмент, который вы можете вызывать из оболочки для управления текстом. У него есть собственный синтаксис, семантика, область действия для символов и т. д. Представьте, что вы вызываете программу на C из оболочки, а не пытаетесь вызвать какую-то подпрограмму оболочки из оболочки.

Похоже, это то, что вы ищете:

delim="--------------------------------------------"
while IFS= read -r -p "New Price: " price; do
    awk -v price="$price" 'BEGIN {
        exit ( (price+0 == price) && (price > 0) ? 0 : 1 )
    }'
    if [ $? -eq 0 ]; then
        PRICE["$index"]="$price"
        echo "The book price has been updated successfully!"
        echo "$delim"
        break
    else
        tput setf 4;echo "Please input a valid price!";tput setf 2;
        echo "$delim"
    fi
done

Условие price+0 == price позволяет убедиться, что переменная price содержит число.

Обратите внимание, что статус успешного выхода в оболочке — 0, а не 1 или любой другой номер.

24.01.2018
  • Большое спасибо! Я могу понять ваше решение больше всего, и я узнал гораздо больше о его синтаксисе. 25.01.2018

  • 2

    Прежде всего, если вы хотите использовать значение переменной оболочки в awk, вы должны сделать это следующим образом:

    awk -v awkVar="$shellVar" '{..awk..codes... print awkVar}' ...
    

    В awk $foo означает столбец foo-th в текущей строке.

    Кроме того, exit в вашем коде awk будет выходить только из обработки awk, а не из всего вашего шеллскрипта. Я думаю, вы должны проверить пользователя, указанного get_price в оболочке.

    24.01.2018

    3

    awk здесь проблему не решает. exit в awk просто выходит из awk. Вам нужна тестовая конструкция сразу после read, как показано ниже.

    У вас есть два требования здесь:

    • get_price должно быть числом (помните, что пользователи могут вводить что угодно).
    • get_price должно быть больше нуля.

    ! [[ "${get_price:-s}" =~ ^[0-9]*(\.[0-9]+)?$ ]] && echo "Entered price is not decimal" && exit 1
    [ ${get_price:-0} -le 0 ] && echo "Price should be a value greater than zero. Aborting.." && exit 1
    

    Примечание. Подробнее о подстановке параметров оболочки здесь. :-)

    24.01.2018
  • @EdMorton Спасибо. Исправлено. 24.01.2018
  • Новые материалы

    Интуитивное понимание тензоров в машинном обучении
    Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

    Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
    Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

    Почему объяснимость так важна прямо сейчас?
    По мере того, как системы искусственного интеллекта и инструменты на основе машинного обучения распространяются в нашей повседневной жизни, как практики, так и критики все чаще заявляют о..

    Анимированный математический анализ
    Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

    Создание простого слайдера изображений с помощью JavaScript
    Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

    Создание базы данных с помощью супергероя «Python»
    В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

    ИИ для чайников: руководство для начинающих по пониманию будущего технологий
    Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..