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

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

Пользователи передадут некоторые аргументы, и часть аргументов будет иметь 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. 

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]+$

  • Ошибка с выражением if в Unix
  • Как сделать «Ctrl + L» для очистки экрана в ksh под Red hat linux?
  • ksh: для печати четвертой строки над согласованной линией и второй строкой после согласованной строки
  • Использование Diff в определенном столбце в файле
  • Выполнение пользовательской функции в вызове find -exec
  • Как передать ряд шаблонов в awk из сценария оболочки?
  • Меню KSH, основанное на тексте, с использованием STDERR
  • Как ksh93 избегает зависаний при подстановке команд
  • Скрипт Ksh для нескольких каталогов ftp одновременно
  • Тайм-аут оболочки Korn
  • Подстроки в сценарии оболочки
  • Interesting Posts

    Не ждите, пока не вернется перенаправление Shell

    Есть ли способ сгладить папку и показать все строки, содержащие символы не-ascii?

    Почему в этом случае использование xargs завершилось неудачей?

    Как обрабатывать ряд парных файлов

    Как мне выполнить мой сценарий еще одну команду после того, как предыдущая команда вернет ненулевое значение до того, как оно будет прервано?

    при установке ошибки centos заключается в том, что 'sda должен иметь метку gpt'

    xargs git: пропустить ввод пользователя

    поиск содержимого файлов, упакованных в zip-файл

    Убрать недостающий шрифт в меню приложения

    Как загрузить все дистрибутивы FreeBSD

    Как использовать команду find для поиска нескольких расширений

    Как я могу скопировать скрытый каталог рекурсивно и сохранить его разрешения?

    Любой дистрибутив Linux с GNUstep?

    Восстановление суперблока ext4

    Как разрешить SSH в терминале после подключения к VPN-серверу с помощью серверов NordVpn через OpenVpn

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