сценарий оболочки для проверки состояния переданной строки

строка состояния начинаются с верхнего или нижнего алфавитов или подчеркивания, например, _abc или xyz или Abc

строка может содержать цифры после первого символа типа _f9 или f10 или car20 или top10cars

строка никогда не должна содержать специальные символы, как! @ # $% ^ & * () + – =

здесь мой маленький сценарий

if [[ $1 =~ ^[A-Za-z_]+$ ]]; then echo it matches else echo does_not match fi 

когда я передаю аргумент, как только & или * или (, сценарий не работает, иногда курсор никогда не возвращается, мне нужно нажать ctrl + c

 for example ./script.sh (abc ./script.sh && ./script.sh &abc 

Что случилось с скриптом

  • Сценарий оболочки с трубами, не работающими в crontab
  • Регулярное выражение для смешанных слов
  • Редактирование файла конфигурации с помощью сценария bash
  • Справка по скрипту для обработки файла txt в CSV
  • Может добавить горячую клавишу Tab в мой сценарий оболочки?
  • В чем разница между запуском «bash script.sh» и «./script.sh»?
  • перебирать файлы и отправлять строки в качестве позиционных параметров в другой файл
  • Помощь с 64-битными целыми числами в скриптах?
  • 2 Solutions collect form web for “сценарий оболочки для проверки состояния переданной строки”

    Цитирование.

    В сценарии используйте "$1" а не только $1 .

    В командной строке используйте

     ./script '*(ontehu' 

    вместо

     ./script *(ontehu 

    • ./script.sh (abc Это синтаксическая ошибка в грамматике оболочки.

    • ./script.sh && Это заставляет оболочку думать, что в командной строке есть условное И, и она ожидает что-то в правой части оператора && .

    • ./script.sh &abc Это две команды: ./script запускается как фоновый процесс (с помощью & ) и команда abc .

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


    Ваш скрипт:

     if [[ $1 =~ ^[A-Za-z_]+$ ]]; then echo it matches else echo does_not match fi 

    Ответить $1 :

     if [[ "$1" =~ ^[A-Za-z_]+$ ]]; then echo it matches else echo does_not match fi 

    Разрешить цифры в хвосте значения:

     if [[ "$1" =~ ^[A-Za-z_][A-Za-z0-9_]+$ ]]; then echo it matches else echo does_not match fi 

    Соблюдайте отчетность об ошибках (это дополнительно):

     if [[ "$1" =~ ^[A-Za-z_][A-Za-z0-9_]+$ ]]; then printf '"%s" is a valid variable name\n' "$1" else printf '"%s" is not a proper variable name\n' "$1" >&2 exit 1 fi 

    Это потому, что это зарезервированные символы.

    & означает команду запуска в фоновом режиме

    * разрешает все файлы / директории в фактическом каталоге, которые затем передаются как аргументы

    () используется для предпочтений порядка команд или объявлений функций

    Если вам нужны такие символы в строке, поместите их в кавычки "" или "

    Interesting Posts

    ALSA: как временно изменить устройство вывода

    Как отправлять SMS-сообщения с мобильного телефона или маршрутизатора? (Linux / Textmode)

    удалить опцию восстановления Windows из меню grub на fedora?

    Можем ли мы запустить два системных процесса dbus разной версии?

    Возможно ли запустить сеанс видимости tmux

    Извлечение дерева из cpio-архива

    Включение растровых шрифтов выборочно в X?

    как запретить CUPS предлагать принтеры, которые не указаны в файле printer.conf?

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

    Как запомнить / автозаполнение форм с помощью uzbl

    Найти имена репозиториев из гитолитного информационного вывода

    Протокол обмена мультимедиа

    Make не компилирует модули. Ошибка: создание модулей, этап 2. Модули MODPOST 0

    Передача файла Tftp через последовательный порт

    RHEL6 Установите MySql-Python без подключения к Интернету?

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