Разрешить чтение, чтобы принять только две длины - PullRequest
1 голос
/ 21 января 2011

Я пытаюсь добавить в скрипт, я пишу ограничение для ввода, где пользователь может вводить только 9 или 10 символов, я настроил его так, но когда я его запускаю, он не работает так, как яхочу этого.Все, что я ввожу, возвращается как 10 символов, даже если я просто введу одно число.Что не так с моим кодом?

#!/bin/bash
#

echo "Please input numbers only"
read inputline
if read -n10 inputline
then
    echo "10 chars"
else
    if read -n9 inputline
    then
    echo "9 chars"
else
    echo "invalid input length"
fi

Ответы [ 2 ]

3 голосов
/ 22 января 2011

Ваш скрипт запрашивает ввод три раза. Я предполагаю, что следующее ближе к тому, что вы намереваетесь:

#!/bin/bash
read -p "Please input numbers only " inputline
len=${#inputline}
if (( len == 9 || len == 10 ))
then
    echo "$len chars"
else
    echo "invalid input length"
fi

Параметр -n, равный read, ограничивает ввод указанным количеством символов, но принимает эту длину без нажатия клавиши ввода. Вы можете ввести меньше, нажав Enter, хотя. Я нашел это полезным для -n 1, но редко в противном случае.

1 голос
/ 22 января 2011

Используйте расширение параметра смещения, чтобы усечь все, что они вводят, до максимум 10 символов, например:

$ num="123456789012"; echo ${num::10}
1234567890
...