#/bin/bash
echo "This message may not be more than 8 characters"
read detect
Как я обнаруживаю количество букв? Это был бы оператор IF?
if #detect var
then
else
fi
Править: Как я могу заставить его повториться, пока пользователь не вводит корректное сообщение?
Можно использовать 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
, Хотя весьма корректный расточительно и время программиста и системы.
Я предполагаю, что Вы хотите попросить у пользователя входа снова и снова до длины входа меньше чем 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
.