Согласование шаблонов с входными аргументами

Мы пытаемся усовершенствовать один из наших скриптов.

Пользователи передадут некоторые аргументы, и часть аргументов будет иметь 5.0.3 . Например, входной аргумент будет похож на Jboss5.0.3GA . Так как у него (Jboss5.0.3GA) есть «5.0.3», мы попытаемся найти установочный двоичный файл «Jboss5.0.3GA.tar».

Текущий скрипт, который мы имеем сейчас, является скриптом ksh. Я пытаюсь использовать условие if со сценарием.

Примеры использования и результаты:

 ./test.sh Jboss5.0.3GA Match found... we'll try to locate the installation binary ./test.sh Jboss5.0.3 Match found... we'll try to locate the installation binary ./test.sh 5.0.3 Match found... we'll try to locate the installation binary ./test.sh Jboss5.1.3 No Match found ... we'll be exiting the script. 

  • Скрипт для просмотра / mysqlshare присутствует во всех серверах списков, делая только первую итерацию
  • Форматирование вывода: Подчеркивание
  • ksh, выполнить действие при достижении максимального значения цикла
  • Удалить все файлы, созданные до определенной даты
  • Как получить ранее использованную команду в обратном поиске HP-UX
  • Как ksh93 так быстро?
  • деформировать, но сохранить -v подробный вывод отдельно от STDERR
  • Почему Korn Shell не делает ctrl-r?
  • 2 Solutions collect form web for “Согласование шаблонов с входными аргументами”

    Согласование шаблонов в оболочках POSIX выполняется с помощью конструкции case . ksh также является оператором [[ x = pattern ]] (также скопированным bash и zsh ) и [[ x =~ regexp ]] в последних версиях.

    Так:

     case $1 in (*5.0.3*) install=$1.tar echo Found;; (*) echo >&2 Not found exit 1;; esac 

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

     #!/bin/sh argument="$1" #if [[ $argument =~ [a-zA-Z]*5\.0\.3[a-zA-Z]+ ]]; then# only works on bash if echo $argument | egrep -q '[a-zA-Z]*5\.0\.3[a-zA-Z]+'; then #echo "Found: ${BASH_REMATCH[0]}" # for bash echo "Match Found" # you can check for $argument at some other location, here. else echo "No match" fi 

    Сохраняя его в качестве test и запуская его, вы получаете следующие результаты:

     bash test 333xxxx5.0.3xxxxx777 Match Found bash test 333xxxx5.0.2xxxxx777 No match bash test 5.0.3xxxxx777 Match Found bash test 5.0.2xxxxx777 No match 

    Вы можете добавить ^ в начале и $ в конце, чтобы соответствовать полной строке или ничто. Подобно этому ^[a-zA-Z]*5\.0\.3[a-zA-Z]+$

    Interesting Posts

    Термин поиска труб из буфера обмена (не имя файла) в grep для поиска папки

    Как cygwin, как я могу экспортировать вывод в терминал в файл?

    Порядок монтажа USB-устройств в Linux

    Найти все каталоги, в которых у пользователя есть доступ к поиску и эхо из этих каталогов в оболочке

    Apache. Создайте закрытый ключ из существующего .crt-файла.

    Является ли стандартом иерархии файловой системы стандартом UNIX или стандартом GNU / Linux?

    Как монтировать диск, зашифрованный cryptsetup (crypto_LUKS) в Ubuntu 14.04?

    Высокий уровень softirq при использовании сети контроля скорости

    xargs не работает в Linux, поскольку работает в Unix

    ядро dotnet на 32-битном Ubuntu

    Переключитесь на приложение, используя его PID

    Отключить электронные письма cron, если нет ошибок?

    Что это за конструкция в bash? МояКоманда () {DoSomething;}

    Почему моя установка Arch устанавливается на случайных этапах во время загрузки?

    Команда wget не работает в cronjob

    Linux и Unix - лучшая ОС в мире.