Как проверить допустимый ввод строки в bash?

56
6

код:


read location

принятые входы


"/home/(10 chars)" or "/(10 chars)" or "(10 chars)"

как проверить правильность ввода? и как вырезать 10 символов из переменной $location?

спросил(а) 2011-11-01T23:16:00+04:00 8 лет, 1 месяц назад
3
Решение
58

Я бы использовал выражение grep следующим образом:


echo $location | grep -xq "\w\{10\}\|/\w\{10\}\|/home/\w\{10\}"

Это соответствует строкам, которые являются точно одним из следующих случаев (вызванным -x) и не печатают соответствующую строку (вызванную -q)

    10 символов
    10 символов с ведущим /
    10 символов, которым предшествует '/home/'

Чтобы использовать это в script, просто оставьте его в инструкции if:


if echo "$location" | grep -xq "\w\{10\}\|/\w\{10\}\|/home/\w\{10\}"; then
# location valid
else
# location not valid
fi

ответил(а) 2011-11-01T23:46:00+04:00 8 лет, 1 месяц назад
Еще 2 ответа
65

Вам нужно что-то вроде этого:

case "$location" in
/home/??????????)
echo $location
;;

/??????????)
echo $location
;;

??????????)
echo $location
;;

*)
d=$(dirname "$location")
b=$(basename "$location")
echo $d/${b:0:10}
esac

ответил(а) 2011-11-02T00:05:00+04:00 8 лет, 1 месяц назад
55

Вам нужны операторы замещения. ${VAR#/home/} оценивает значение $VAR, если лидирующий /home/ лишен, если он существует. Сравнивая результат этих выражений с самим $VAR, вы можете определить, соответствует ли ваше значение, и что такое разделенная версия. И ${#VAR} указывает длину переменной.

ответил(а) 2011-11-01T23:32:00+04:00 8 лет, 1 месяц назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема