У меня есть ниже read
, который будет принимать имя пользователя в виде first.last
.Это обрабатывается регулярным выражением ниже.Как я могу ограничить максимальное количество символов до 16
?
Я пытался добавить ^[a-zA-Z]+\.[a-zA-Z]+{,16}$
, но при тестировании позволил мне создать пароль> 16 символов
read -p "Enter a Username (firstname.lastname): " username
until [[ "${username}" =~ ^[a-zA-Z]+\.[a-zA-Z]+$ ]];
do
read -p "Incorrect format, retry Username: " username
done
Результатом будет ограничение в 16 символов для read
для имени пользователя.
Редактировать
Мне удалось заставить его работать без-regex решение, как я изначально хотел, см. ниже:
read -p "Enter a Username (first.last): " username
until [[ "${username}" =~ ^[a-zA-Z]+\.[a-zA-Z]+$ ]] && ((
"${#username}" < 16 )); do
read -p "Maximum of 16 characters, try again: " username
done
Выходы:
Хорошо:
bash -x userInt.sh
+ read -p 'Enter a Username (first.last): ' username
Enter a Username (first.last): foo.bar
+ [[ foo.bar =~ ^[a-zA-Z]+\.[a-zA-Z]+$ ]]
+ (( 7 < 16 ))
+ read -sp 'Enter a Password (Minimum 8 characters): ' password
Плохо:
bash -x userInt.sh
+ read -p 'Enter a Username (first.last): ' username
Enter a Username (first.last): someones.reallylongname
+ [[ someones.reallylongname =~ ^[a-zA-Z]+\.[a-zA-Z]+$ ]]
+ (( 23 < 16 ))
+ read -p 'Maximum of 16 characters, try again: ' username