Как проверить правильность ввода строки в Bash? - PullRequest
2 голосов
/ 02 ноября 2011

код:

read location

допустимые входные данные:

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

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

Ответы [ 3 ]

3 голосов
/ 02 ноября 2011

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

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

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

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

    *)
        d=$(dirname "$location")
        b=$(basename "$location")
        echo $d/${b:0:10}
esac
2 голосов
/ 02 ноября 2011

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

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

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

  • 10 символов
  • 10 символов с начальным /
  • 10 символами, которым предшествует '/ home /'

Чтобы использовать это в скрипте, просто поместите его в оператор if следующим образом:

if echo "$location" | grep -xq "\w\{10\}\|/\w\{10\}\|/home/\w\{10\}"; then
    # location valid
else
    # location not valid
fi
2 голосов
/ 02 ноября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...