Чтение ввода из командной строки

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

echo "Do you want to continue?(yes/no)" read -p $1 if [ "$1" == "yes" ] then sleep 5s echo "" echo " move ahead" else echo "" echo "Skipping The Step.." echo "" sleep 5s fi 

Я хочу выполнить скрипт следующим образом.

 sh script.sh yes sh script.sh no 

Добавлен -p к вышеупомянутому скрипту, и все, кажется, работают очень хорошо. Это моя настоящая проблема. У меня есть еще один скрипт test.sh, который вызывает script.sh. Так вот как я помещаю вход

 cat test.sh yes #!/bin/bash echo "execute the below script" sh script.sh $1 sh test.sh yes 

Этот способ не работает, так как сценарий берет значение по умолчанию и движется вперед. Есть идеи.

  • Как «whereis» находит файлы так быстро?
  • Инструмент командной строки для «cat» попарно расширяет все строки в файле
  • Как получить ответ от любого URL-адреса?
  • Получить конкретное слово и следующий текст
  • Проверьте, является ли условие awk совпадением в лог-файле
  • Как получить владельца и полный путь 50 файлов большого размера для всех пользователей?
  • Как программы с программным обеспечением с оболочкой уравновешивают скорость вывода / ввода?
  • Есть ли инструмент, который автоматически вставляет и обновляет блок заголовка сценария, например, сценарии оболочки или Python?
  • One Solution collect form web for “Чтение ввода из командной строки”

    $1 , $2 … – позиционные аргументы командной строки и не могут быть назначены как read [-p] $1 или любым другим способом, кроме

     set -- firsr_arg second_arg … 

    Для вашего случая это может быть проверка, если аргументы присутствуют, а затем проверить их

     while [ -z "$REPLY" ] ; do if [ -z "$1" ] ; then read -p "Do you want to continue?(yes/no) " else REPLY=$1 set -- fi case $REPLY in [Yy]es) sleep 5s echo -e "\n move ahead" ;; [Nn]o) echo -e "\nSkipping The Step..\n" sleep 5s ;; *) echo "Wrong answer. Print 'yes' or 'no'" unset REPLY ;; esac done 
    Linux и Unix - лучшая ОС в мире.