Регулярные выражения в Bash

Я стараюсь реализовывать рукописный шрифт в bash, что санкционировал каталог используя регулярные выражения, что у меня есть, так это следующее.

echo "Ingresa La ruta de tu directorio"
read ruta
if [ $ruta != '^/[a-zA-Z]$' ];then
    echo "No has ingresado una ruta valida, recuerda que la ruta inicia con /"
    echo " "
    continue
else
    if [ -d $ruta ]; then
        echo""
        echo "hey, ya tienes creado tu directorio, tal vez necesites usar otra opcion"
        continue
    fi
fi

Когда я ввожу documents утверждение в компьютер, функционируй, но введя информацию в компьютер например /Documents что является существующим каталогом, функционирование равно и не стоившая выражение - как будто он не введет информацию в компьютер /.

Как он мог бы санкционировать правильно выражение?

5
задан 06.06.2017, 03:18
2 ответа

Чтобы подтверждать одну expresiГіn регулировать в bash, ты должен использовать оператор =~ и должен размещаться между двойными brackets [[ ]],

, Кроме того чтобы делать более совместимыми между версиями рукописный шрифт, deberГ-схвати размещать ее expresiГіn регулировать между кавычками просто в переменной заблаговременно. (Спасибо @TomFenech)

Относительно тебя expresiГіn регулировать ты должен добавлять один + или * despuГ©s [a-zA-Z], так как, если ты это не делаешь, он захватывает единственный характер, и ты хочешь захватить все. (он использует *, если она стоимость одинокие / стоится)

IF quedarГ - в asГ-:

regla='^/[a-zA-Z]+ 

Восток - упрощенный пример:

#!/bin/bash

echo "Ingresa La ruta de tu directorio"
read ruta

regla='^/[a-zA-Z]+
if [[ ! $ruta =~ $regla ]]; then
 echo "Tiene la barra"
else
 echo "Falta la barra"
fi
if [[ ! $ruta =~ $regla ]]

Восток - упрощенный пример:

#!/bin/bash

echo "Ingresa La ruta de tu directorio"
read ruta

regla='^/[a-zA-Z]+
if [[ ! $ruta =~ $regla ]]; then
 echo "Tiene la barra"
else
 echo "Falta la barra"
fi
6
ответ дан 24.11.2019, 14:53
  • 1
    Не надо убегать брусок в этом контексте. Ты использовал ' в твоем первом примере но не во втором; форма без ' - правильная. М и # 225; s совместимый быть и # 237; чтобы вводить переменную re='^\/[a-zA-Z]+[112]#39; и потом использовать [[ ! $ruta =~ $re ]]. – Tom Fenech 15.02.2016, 14:32
  • 2
    Спасибо, он это не заметил, я во что-то из копии и затруднения верю. впрочем, с более совместимым ты имеешь в виду, что портативнее? – rnrneverdies 15.02.2016, 14:37
  • 3
    Quer и # 237; чтобы говорить, что оно функционирует лучше между версиями, отличными от Bash. Могут осведомляться в Бас Вики (ссылка в ingl и # 233; s) в secci и # 243; n " Регулировать Expressions". – Tom Fenech 15.02.2016, 14:43

Я думаю, что ты это поместил в revГ©s. Сначала проверь, если пользователь во введенный она/, и если ты не посылаешь его else if. Я оставляю тебе измененный код. Я это протестировал и в меня оно я функционирует.

    read -p "Ingresa La ruta de tu directorio " ruta

if [ -d $ruta ]
then
     echo " "
     echo "hey, ya tienes creado tu directorio, tal vez necesites usar otra opcion"
     continue
elif [ $ruta != '^/[a-zA-Z] ]
then
   echo""
echo "No has ingresado una ruta valida, recuerda que la ruta inicia con /"
                continue
fi
1
ответ дан 24.11.2019, 14:53

Теги

Похожие вопросы