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

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; }

Вы можете попробовать использовать строку $ и ввести в терминал это:

эхо "введите свое имя"; строка $ читать строку $

и это может нормально работать таким образом.

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