Как проверить допустимый ввод строки в bash?
Я бы использовал выражение 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
Вам нужно что-то вроде этого:
case "$location" in
/home/??????????)
echo $location
;;
/??????????)
echo $location
;;
??????????)
echo $location
;;
*)
d=$(dirname "$location")
b=$(basename "$location")
echo $d/${b:0:10}
esac
Вам нужны операторы замещения. ${VAR#/home/}
оценивает значение $VAR
, если лидирующий /home/
лишен, если он существует. Сравнивая результат этих выражений с самим $VAR
, вы можете определить, соответствует ли ваше значение, и что такое разделенная версия. И ${#VAR}
указывает длину переменной.