Intereting Posts
Что такое двоичный пакет? Как их построить? Странный вид каталога «stealth» в Linux Как сообщить остальной системе, что моя оболочка изменилась с zsh на bash? Можете ли вы указать, был ли файл переименован? Обеспечьте доступ sftp для чтения / записи к папке и подпапкам, ограничьте все остальное установите g ++ на RHEL 6 Как применить команду awk для всех полей, за исключением нескольких определенных строк Предоставляет ли Linux Predictive Self-Healing на x86? Действительно ли rsync или duplicity записывают файлы на смонтированном хранилище? Найдите шаблон, затем добавьте текст в третью пустую строку Удаленная команда ssh не отправляет echo-переменную из сценария ksh в AIX Закрепить файл как подкоманду Является ли cmp быстрее, чем diff -q? Почему мои жесткие ссылки не обновляют друг друга? Как анализировать сообщения о панике ядра от сбоя, чтобы диагностировать проблему?

Что я тут делаю не так (проблема с петлями)

Эта вещь здесь

n=0 x=1 while [ $n -lt 6 ] do n=$(( n+1 )) echo "sasadgsad gsda $n" >> /home/test/rptest if [ $n -eq 5 ] then while [ $x -le 5 ] do echo "end of line$x" >> /home/test/rptest x=$(( x+1 )) done fi done 

Выведите эту вещь

 sasadgsad gsda 1 sasadgsad gsda 2 sasadgsad gsda 3 sasadgsad gsda 4 sasadgsad gsda 5 end of line1 end of line2 end of line3 end of line4 end of line5 sasadgsad gsda 6 

Эта 11-ая строка не должна быть там … Разве первая не должна заканчиваться, когда n = 5? Почему он создает эту последнюю строку?

Спасибо вам за помощь 🙂

Я даже попробовал это с n = 1 и пока [$ n -le 5]

Ваш скрипт с правильными отступами:

 n=0 x=1 while [ $n -lt 6 ]; do n=$(( n+1 )) echo "sasadgsad gsda $n" >> /home/test/rptest if [ $n -eq 5 ]; then while [ $x -le 5 ]; do echo "end of line$x" >> /home/test/rptest x=$(( x+1 )) done fi done 

Ваш внешний цикл работает от 0 до 5, что в шесть раз. Поскольку вы обновляете n в начале внешнего цикла, значение n в теле цикла изменится от 1 до 6. Когда n равно 5, вы запускаете другой цикл от 1 до 5, выводя end of line... Когда это будет сделано, у вас останется одна итерация внешнего цикла.

Другой способ написать скрипт на bash :

 for (( n=1; n<=5; ++n )); do printf 'sasadgsad gsda %s\n' "$n" if (( n == 5 )); then for (( x=1; x<=5; ++x )); do printf 'end of line%s\n' "$x" done fi done >>/home/test/rptest 

Это не будет иметь ту же проблему, потому что внешний цикл останавливается, когда n достигает 6.

Однако, если вы просто хотите добавить выходные данные внутреннего цикла после внешнего цикла, вы также можете запускать после друг друга:

 for (( n=1; n<=5; ++n )); do printf 'sasadgsad gsda %s\n' "$n" done >>/home/test/rptest for (( n=1; n<=5; ++x )); do printf 'end of line%s\n' "$n" done >>/home/test/rptest 

или, только для этого простого примера,

 printf 'sasadgsad gsda %s\n' {1..5} >>/home/test/rptest printf 'end of line%s\n' {1..5} >>/home/test/rptest