при чтении строки в сценарии оболочки – как остановить цикл?

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

while read line do wget -x "http://someurl.com/${line}.pdf" -o ${line}.pdf done < inputfile 

Однако этот скрипт продолжает работать с $ -ой строкой, не содержащей никакого значения. Как мне изменить код, который скрипт останавливает, если следующая строка пуста или какое-то слово «сигнал».

спасибо за помощь

3 Solutions collect form web for “при чтении строки в сценарии оболочки – как остановить цикл?”

Вот как бы вы остановили while-loop на нулевом значении line :

 #!/usr/bin/bash while read line do if [[ -z $line ]] then exit fi wget -x "http://someurl.com/${line}.pdf" done < inputfile 

Я думаю, что ваша реальная проблема может заключаться в непревзойденном символе двойной кавычки до «http» или в непревзойденном обратном тике в конце «inputfile». Вы должны очистить цитату перед тем, как попробовать мой пример кода.

  while read line && [ "$line" != "quit" ]; do # ... 

Или остановиться на пустой строке:

  while read line && [ "$line" != "" ]; do # ... 

или

  while read line && [ -n "$line" ]; do # ... 

По другой теме:

 "http://someurl.com/$line.pdf" -o "$line.pdf" 

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

  line=\ ; PS4='${#line}: + ' while read line <&$((${#line}?0:3)) do : "$line" done <<msg 3</dev/null one nice thing about allowing shell expansions to self test is that the shell already has mechanisms in place for the evaluation. its doing it all the time anyway. theres almost nothing for you to do but to let it fall into place. For example: ${line##*[ :: i doubt very seriously the shell will read any of this :: ]*} msg 

 1: + read line 59: + : 'one nice thing about allowing shell expansions to self test' 59: + read line 58: + : 'is that the shell already has mechanisms in place for the' 58: + read line 59: + : 'evaluation. its doing it all the time anyway. theres almost' 59: + read line 52: + : 'nothing for you to do but to let it fall into place.' 52: + read line 12: + : 'For example:' 12: + read line 0: + : '' 0: + read line 

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

 while read line && ${line:+":"} break do : stuff done 

… будет работать хорошо.

  • Как написать скрипт для проверки заданий ошибок и автоматического повторного отправки?
  • Как я могу получить пять секунд данных, добавленных в конец файла?
  • Выход из скрипта, который перезапускает приложение
  • список файлов с той же первой 3-ей буквой, за которой следует последовательность # со сценарием оболочки
  • Я хочу создать zip-файл с сохранением оригинала
  • Сценарий Bash для обработки файла данных эксперимента
  • Эффективный способ запуска нескольких сценариев оболочки из одного сценария оболочки
  • найти проблему в скрипте bash
  • Работа с оператором if
  • Shell Script: для извлечения части строки из файла после того, как найдено совпадение
  • как получить строку между фигурными скобками вместе со строкой без фигурных скобок, используя awk
  • Как получить 2 разных результата из 1 файла в unix?
  • Interesting Posts

    Сделать кнопки со стороны мыши запускать виртуальные ключи

    Разрешение псевдодоменного имени на частный IP-адрес

    Неверный файл iso, предотвращающий загрузку Debian dvd с помощью uefi

    awk – добавить столбец после сопоставления остальных столбцов

    Может ли rm рекурсивно удалять пустые каталоги?

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

    ssh-соединение с проблемой клиента OS X

    Как получить правильные коды сканирования для клавиатуры ноутбука без нажатия клавиши?

    apt-get: нет кандидата на установку libxul-dev

    Щелкните правой кнопкой мыши, чтобы скопировать имя файла (или имя каталога)

    Загрузка Ubuntu и вставка на живом USB

    Какое распределение вы предлагаете для ежедневного использования?

    Не удалось получить psk из сети с помощью wpa_cli

    Создайте интерфейс loopback и сделайте его постоянным (FreeBSD)

    Потеря статического IP-адреса и получение IP-адреса DHCP

    Linux и Unix - лучшая ОС в мире.