Создать скрипт, который принимает слово в качестве аргумента от пользователя
echo "Enter your string"
read str;
Как я могу поставить проверку, чтобы убедиться, что пользователь передал слово, отображая оператор использования, если слово не было передано в качестве аргумента.
3 ответа
Если вы хотите заставить пользователя ввести строку, а не числовое значение, и продолжать спрашивать, пока ввод не выполнит требование, я определенно использовал бы тест в цикле while, например:
#!/bin/bash
while true;
do
echo "Enter your string"
read str;
echo "${str}" | grep -q '[0-9]'
if [ $? != 0 ] && [ "$str" != "" ] ; then
break
else
echo 'Invalid input'
fi
done
# use the input for further processing
echo $str
(используя тест из этого поста)
[ "$str" ] || { echo "This is my usage statement"; exit 1; }
Это использует test
, обозначается [...]
, В своей простейшей форме, используемой здесь, он просто проверяет, является ли строка непустой (возвращающая успех / истина) или пустой (возвращающая сбой / ложь). Управляющий оператор, ||
, выполняет оператор, который следует, только если предыдущий оператор вернул false.
Я предполагал, что если пользователю не удалось ввести непустой str
, что вы хотели бы выйти с кодом ошибки после выдачи инструкции использования. Если нет, удалите exit 1
,
Если у вас есть что-то более сложное, то используйте более формальный if
заявление:
if [ "$str" ]
then
echo "This is my usage statement"
# do other stuff....
exit 1
fi
Вышесказанное должно работать на любой оболочке POSIX, включая dash
(/bin/sh
) а также bash
,
Другие тесты
Вот два связанных теста (оба требуют bash
):
[ "${str//[^[:digit:]]/}" ] || { echo "You entered no numbers"; exit 1; }
А также,
[ "${str//[^[:alpha:]]/}" ] || { echo "You entered no letters"; exit 1; }
Вы можете попробовать использовать строку $ и ввести в терминал это:
эхо "введите свое имя"; строка $ читать строку $
и это может нормально работать таким образом.