LINUX.ORG.RU
ФорумAdmin

bash scripting - цикл внутри цикла?

 


1

1

Сабж.
по сути задача - берём .iso файл и копируем его в соотв указанное место указанное число раз, меняя имя каждой копии ( надо заполнить нжмд файлами для проверки на бедблоки ( ситуация хитрая, надо. про смартцтл, диск регенератор и прочее - в курсе, но там всё странно выглядит).

соотв подобрал такой скрипт:


#!/bin/bash
#alternate audiobook renaming
pref=100

for i in *.iso
do
(( pref++ ))
cp «$i» /mnt/hd/«${pref:1}.iso»
done


вроде можно организовать цикл для сего действия:


#!/bin/bash

for s in {1..20}
do
done


но тогда надо как то о тделить один цикл от второго, иначе do разных циклов спутаются, и я получу не то что хотел на выходе,нет?

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

«программер» я тот ещё ( бейсик на спектруме в детстве), но дело это меня интересует и несколько нравится, несмотря на остутсвие талантов.

спасибо заранее!

★★

Последнее исправление: cetjs2 (всего исправлений: 2)

Используй отступы.

Adjkru ★★★★★
()

Вот тебе таблица умножения

#!/bin/bash
for s in `seq 1 9`
do
  for t in `seq 1 9`
  do
    printf '%3s' $(($s * $t))
  done
  echo
done

mtk
()

Как-то так. Завершается когда использовано 99% диска Сам не запускал

#!/bin/bash

pref=100
DISK=/dev/sda2
LIMIT=99

while true
do
  for i in *.iso
  do
    ((pref++))
    # Использованное пространство в процентах
    space=`df -H $DISK | sed '1d' | awk '{print $5}' | cut -d'%' -f1`
    echo "Использованное пространство: $space %"
    if [[ $space -ge $LIMIT ]]
    then
      return
    fi
    cp -v "$i" /mnt/hd/$pref.iso
  done
done

mtk
()

осиль форматирование - банальные отступы

megabaks ★★★★
()

Про вложенные циклу уже объяснили, а теперь о сути проблемы.

надо заполнить нжмд файлами для проверки на бедблоки ( ситуация хитрая, надо. про смартцтл, диск регенератор и прочее - в курсе, но там всё странно выглядит

Загрузочная утилита MHDD хорошо проверяет диски и инициализирует ремап повреждённых секторов.
Это самый простой способ.

MrClon ★★★★★
()
Ответ на: комментарий от MrClon

есть такая вещь как hdd regenerator с лайв-сиди. тоже типа восстанавливает сектора.
но тут прям мистика: стояла у меня на этом диске система.купил новые диски, посавил в райд, все данные с сего диска (сигейт st500dm005, 500 gb) стал копировать на новый массив ( через миднайт коммандер). смотрю - такой-то файл нечитается.

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

принёс на работу, запустил на него регенератора - нашёл порядка 1300 бад секторов, все восстановил. запускаю снова регенератора - новые бады.
смотрю смарт - куррен пендинг есть, ремаппед - ноль. смарт шорт селфтест на 90 процентах тоже завершился с «реад еррор». поскольку ясно что диск надо будет нести по гарантии - запускю на него стиралку информации

shred -z -n 1 /dev/sdb

когда отработала - поставил опять регенератором проверится - мистика - ниодного бада!

полез в смарт - cerrent pending sectors = 0 remapped sectors=0 запустил short offline test

smartctl -t short /dev/sdb
smartctl -t long /dev/sdb

-оба, блин, без проблем завершились.
мистика какая то.
щас сделал ехт3 раздел на весь диск, копирую туда исошник в х вариациях. потом поставлю всё подряд считыватся в .дев.нулл...

wisedraco ★★
() автор топика
Ответ на: комментарий от wisedraco

Сектора диска могут быть повреждены физически (поцарапана пластина) и логически (повреждены данные, не совпадает контрольная сумма сектора).
При попытки чтения такого сектора в любом случае возникнит ошибка чтения и счётчик pending секторов увеличится на один.
Можно попытаться форсировано записать в такой сектор новую информацию. Если сектор физически не поврёжден то поврёждйнные данные просто затрутся, будет записана новая контрольная сумма и счётчик pending секторов уменьшится на один.
Если есть физическое повреждение сектора то диск произведёт его ремап (отметит в служебной таблице что данный сектор теперь находится в другом месте, у диска есть специальная область выделенная под это дело). Счётчик pending секторов уменьшится, счётчик remapped секторов увеличится.

В данном случае видимо было только повреждение данных, а не поверхности блинов.

MrClon ★★★★★
()
Ответ на: комментарий от wisedraco

Я обычно тестирую диски так:
читаю весь диск dd if=/dev/sdx of=/dev/null
забиваю нулями dd if=/dev/zero of=/dev/sdx
прогоняю долгий тест SMARTа
Если что-то не так то прогоняю mhdd в режиме ремапа.

MrClon ★★★★★
()
Ответ на: комментарий от mtk

spasibo. sorry, nepostavil essho keyboard switcher for xfce4.
u skripta problema s otrabotkoi pa zapolneniu 99% prostranstva:


Использованное пространство: 99 %
./fill_hd_lor.scr: line 17: return: can only `return' from a function or sourced script
‘lglive-0.9.7-i686-hybrid-lite.iso’ -> ‘/mnt/hd/101.iso’

v ostalnom vsyo ok, spasibo!

wisedraco ★★
() автор топика
Ответ на: комментарий от wisedraco

А, надо exit вместо return. Сделал сначала функцией, потом переделал для простоты.

mtk
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.