Bash - Как обнаружить, если переменная является больше, чем определенное количество символов

#/bin/bash
echo "This message may not be more than 8 characters"
read detect

Как я обнаруживаю количество букв? Это был бы оператор IF?

if #detect var
then
else
fi

Править: Как я могу заставить его повториться, пока пользователь не вводит корректное сообщение?

0
задан 24 December 2019 в 00:18

2 ответа

Можно использовать if-then-else-fi как это:

if [[ ${#detect} -gt 8 ]] ; then
    echo "Error message..."
    exit 1
else
    echo "Good to go..."
    exit 0
fi

exit 1 обычно отказ средств и exit 0 обычно успех средств. В любом случае Ваш сценарий заканчивается сразу, когда exit встречен, так используйте их соответственно.

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

[[ ${#detect} -gt 8 ]] && { echo "Error message..." ; exit 1 ; }

# successful code here
exit 0

, Если Вам не было нужно сообщение об ошибке { ... }, фигурные скобки не требуются для единственной команды, например:

[[ ${#detect} -gt 8 ]] && exit 1

может использоваться для высказывания, "Если названная переменная обнаруживает,> 8 затем выход".

<час>

Улучшение процесса

Обычно считают грубым позволить пользователю только один шанс ввести строку. Вежливый метод должен попросить строку снова после сообщения их, это должны быть 8 символов или меньше. Например:

echo "Enter character string 1 to 8 characters long or press <CTRL>+C to exit."
while True ; do
    read StringVar
    [[ ${#StringVar} -ge 1 ]] && [[ ${#StringVar} -le 8 ]] && break
    echo "Sorry that string is ${#StringVar} long. Please try again."
done

# successful code here

В этом случае программа продолжает запрашивать вход, пока переменная StringVar не получена, и это больше, чем или равный 1 , И это меньше чем или равно 8 , в которой точке эти while из взгляда убегают с эти break команда.

Поочередно пользователь может нажать Ctrl +C/kbd> для завершения сценария удара.

краткие строки:

[[ ${#StringVar} -ge 1 ]] && [[ ${#StringVar} -le 8 ]] && break
echo "Sorry that string is ${#StringVar} long. Please try again."

... может быть сделан смехотворно подробным как это:

if [[ ${#StringVar} -ge 1 ]] ; then
    if [[ ${#StringVar} -le 8 ]] ; then
        break
    else
        echo "Sorry that string is ${#StringVar} long. Please try again."
        continue
    fi
else
    echo "Sorry that string is ${#StringVar} long. Please try again."
    continue
fi

, Хотя весьма корректный расточительно и время программиста и системы.

4
ответ дан 24 December 2019 в 21:56

Я предполагаю, что Вы хотите попросить у пользователя входа снова и снова до длины входа меньше чем 8 символов. Если так, можно использовать while цикл вместо if-else операторы. В этом цикл продолжится в течение бесконечных времен, пока длина входа не будет меньше чем 8 символами. Когда длина "входа" является меньше чем 8 символами только затем, сценарий продолжается. Код будет что-то как:

#!/bin/bash
echo -n "Enter message with less than 8 characters: "
read detect
while [[ ${#detect} -gt 8 ]]
do
        echo -n "Length of the message was greater than 8. Try again...: "
        read detect
done
echo $detect 
#and the rest of the code continues

, Кроме того, если Вы запускаете скрипт от корневой папки (/), затем хижина #!bin/bash могла бы работать (который Вы упомянули в исходное сообщение ), но если Вы выполняете это откуда-либо, включаете полный путь интерпретатора, т.е. /bin/bash, поэтому изменяя хижину к #!/bin/bash.

1
ответ дан 24 December 2019 в 21:56

Другие вопросы по тегам:

Похожие вопросы: