Автор Тема: shell скрипт  (Прочетена 5158 пъти)

AMD

  • Напреднали
  • *****
  • Публикации: 873
  • Distribution: Calculate Linux Scratch 64 / Alt Linux Centaurus 6.0 64
  • Window Manager: Gnome 2.32/3.2 XFCE 4.8/4.10-git
  • AMD Athlon64/Sempron64 4000+Dual Core/3400+
    • Профил
shell скрипт
« -: Dec 28, 2011, 21:00 »
Значи въпроса ми е следния. Изпитвам затруднения да интегрирам допълнителна функция към дадена команда.

Код
GeSHi (Bash):
  1. du -csh $iso &>size
Код
GeSHi (Bash):
  1. dd if=$iso | pv -ptrs $size -i2 | dd of=$flash

Но не съм сигурен дали изобщо може да заработи по този начин?

Как точно трябва да се сформира реда с командата
Код
GeSHi (Bash):
  1. du -csh $iso
, за да може да вкара размера на файла в променлива която да се чете в
Код
GeSHi (Bash):
  1. pv -ptrs $size -i2
Активен

Господи моля те пази ме от ламерите, от хакерите и сам мога да се пазя.

romeo_ninov

  • Напреднали
  • *****
  • Публикации: 2155
    • Профил
Re: shell скрипт
« Отговор #1 -: Dec 28, 2011, 22:19 »
а ако направиш нещо от рода няма ли да работи:
Код:
a=$(pv -ptrs $size -i2 $iso)
dd if=$iso of=$flash нещо_си_за_размера=$a
Активен

0x2B|~0x2B

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: shell скрипт
« Отговор #2 -: Dec 28, 2011, 23:55 »
РОКО, шел променливите не са файлови дескриптори и не можеш да pipe-ваш изхода в тях. romeo_ninov ти е написал едното решение, другото е да ползваш обратни кавички:

Цитат
pv -ptrs `du -csh $iso` -i2

при положение че си export-нал $iso.

Имай предвид че без да проверяваш exit кода от du, можеш да си докараш неприятни проблеми.
Активен

"Knowledge is power" - France is Bacon

AMD

  • Напреднали
  • *****
  • Публикации: 873
  • Distribution: Calculate Linux Scratch 64 / Alt Linux Centaurus 6.0 64
  • Window Manager: Gnome 2.32/3.2 XFCE 4.8/4.10-git
  • AMD Athlon64/Sempron64 4000+Dual Core/3400+
    • Профил
Re: shell скрипт
« Отговор #3 -: Dec 29, 2011, 09:44 »
РОКО, шел променливите не са файлови дескриптори и не можеш да pipe-ваш изхода в тях. romeo_ninov ти е написал едното решение, другото е да ползваш обратни кавички:

Цитат
pv -ptrs `du -csh $iso` -i2

при положение че си export-нал $iso.

Имай предвид че без да проверяваш exit кода от du, можеш да си докараш неприятни проблеми.

Ти ме разбра по-точно какво имам в предвид. Но неприятностите са че трябва да извлека от изхода само цифрите. Може би ще го оставя както е.
Активен

Господи моля те пази ме от ламерите, от хакерите и сам мога да се пазя.

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: shell скрипт
« Отговор #4 -: Dec 29, 2011, 11:04 »
Да не кажеш че съм лош само :)

Цитат
pv -ptrs `du -csh -B1M  $iso 2>/dev/null|grep total|awk '{print $1}'` -i2

Това е в мегабайти, ако ти трябва в други единици виж man страницата на du.
Активен

"Knowledge is power" - France is Bacon

AMD

  • Напреднали
  • *****
  • Публикации: 873
  • Distribution: Calculate Linux Scratch 64 / Alt Linux Centaurus 6.0 64
  • Window Manager: Gnome 2.32/3.2 XFCE 4.8/4.10-git
  • AMD Athlon64/Sempron64 4000+Dual Core/3400+
    • Профил
Re: shell скрипт
« Отговор #5 -: Dec 29, 2011, 12:27 »
Да не кажеш че съм лош само :)

Цитат
pv -ptrs `du -csh -B1M  $iso 2>/dev/null|grep total|awk '{print $1}'` -i2

Това е в мегабайти, ако ти трябва в други единици виж man страницата на du.

То точно в мегабайти ми трябва да е изхода, ама виж някак ми трябва само да отчете обема без текста ->

du -csh iso/altlinux-6.0.0-centaurus-x86_64-ru-live-cd.iso
661M   iso/altlinux-6.0.0-centaurus-x86_64-ru-live-cd.iso
661M   итого
Активен

Господи моля те пази ме от ламерите, от хакерите и сам мога да се пазя.

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: shell скрипт
« Отговор #6 -: Dec 29, 2011, 12:36 »
Дам, не обича да му излиза на руски :)

Айде пробвай така:

pv -ptrs `du -csh -B1M  $iso 2>/dev/null|tail -n1|awk '{print $1}'` -i2
Активен

"Knowledge is power" - France is Bacon

AMD

  • Напреднали
  • *****
  • Публикации: 873
  • Distribution: Calculate Linux Scratch 64 / Alt Linux Centaurus 6.0 64
  • Window Manager: Gnome 2.32/3.2 XFCE 4.8/4.10-git
  • AMD Athlon64/Sempron64 4000+Dual Core/3400+
    • Профил
Re: shell скрипт
« Отговор #7 -: Dec 29, 2011, 12:46 »
Дам, не обича да му излиза на руски :)

Айде пробвай така:

pv -ptrs `du -csh -B1M  $iso 2>/dev/null|tail -n1|awk '{print $1}'` -i2

То хубаво ама нещо не мога да го излъжа, и не знам дали има шансове, значи с pv искам да изкарам прогрес индикатор при изпълнение на dd но трябва някак за опцията  "-s" във "pv" да се вземе размера на ISO образа пример "pv -s 600m" и само тази идея ми дойде на ум но нещо не е белязана от успех.

При стартиране на трансфера прогрес индикатора показва ..

[======================================================================] 100000%

Нещо което не е реално уж трябва да започне от 0% и да брои до 100% в зависимост от размера при du -csh $iso
Активен

Господи моля те пази ме от ламерите, от хакерите и сам мога да се пазя.

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: shell скрипт
« Отговор #8 -: Dec 29, 2011, 13:06 »
Ами показва тези неща най-вероятно заради мерните единици. Това което съм ти дал връща големината на iso файла в мегабайти, а pv си прави сметките в байтове. Демек максималната големина ти е 600, но dd ще му подаде 600 милиона байта, демек далееееч над 100%. Виж внимателно аргументите към du командата и го промени от мегабайти, да ти връща големината в байтове.
Активен

"Knowledge is power" - France is Bacon

AMD

  • Напреднали
  • *****
  • Публикации: 873
  • Distribution: Calculate Linux Scratch 64 / Alt Linux Centaurus 6.0 64
  • Window Manager: Gnome 2.32/3.2 XFCE 4.8/4.10-git
  • AMD Athlon64/Sempron64 4000+Dual Core/3400+
    • Профил
Re: shell скрипт
« Отговор #9 -: Dec 29, 2011, 13:25 »
Ами показва тези неща най-вероятно заради мерните единици. Това което съм ти дал връща големината на iso файла в мегабайти, а pv си прави сметките в байтове. Демек максималната големина ти е 600, но dd ще му подаде 600 милиона байта, демек далееееч над 100%. Виж внимателно аргументите към du командата и го промени от мегабайти, да ти връща големината в байтове.

Значи аз го оправих да показва реално като махнах -B1M всичко стана нормално.
http://imglink.ru/pictures/29-12-11/3aae4cb73a0597acd414299c73a53fc3.jpg

А ето и кода, малко е грозен все още но е в процес на доработка, преди ги бях понаучил ама сега съм забравил доста от нещата как стават.

Активен

Господи моля те пази ме от ламерите, от хакерите и сам мога да се пазя.

AMD

  • Напреднали
  • *****
  • Публикации: 873
  • Distribution: Calculate Linux Scratch 64 / Alt Linux Centaurus 6.0 64
  • Window Manager: Gnome 2.32/3.2 XFCE 4.8/4.10-git
  • AMD Athlon64/Sempron64 4000+Dual Core/3400+
    • Профил
Re: shell скрипт
« Отговор #10 -: Dec 29, 2011, 13:55 »
Е gat3way не вярвах че някога мога да ти кажа думата Благодаря.

Ето и крайния код ако някой има желание да го ползва или да го подобрява.

Код
GeSHi (Bash):
  1. #!/bin/bash
  2. # Автор: Росен Александров (и благодарности към gat3way)
  3. # За мен: roko@jabber.calculate-linux.org , sandikata@yandex.ru, Скайп ROKO__2
  4. # Важно за да работи правилно скрипта трябва да го поставите в /usr/local/bin както и да имате инсталиран пакет "pv", поне в AltLinux се казва така.
  5.  
  6. if [ `id -u` -ne 0 ] ;
  7. then
  8. exec notify-send -t 10000 "Нямате администраторски права! Стартирайте скрипта като администратор или със sudo dd-flash" ; exit 1
  9. fi
  10.  
  11. echo "За да можете да създадете Жив флаш диск трябва да го поставите в USB порта на компютъра, като флаш диска не трябва да е монтиран!"
  12. echo
  13. echo "Пълен път до ISO (Пример /home/user/Загрузки/iso.iso)"
  14. read iso
  15.  
  16. while ! [ -s $iso ]; do
  17. printf "Избрания файл не съществува. Моля изберете съществуващ.  ->  "
  18. read iso
  19. done
  20. echo
  21. while ! fdisk -s $flash &>/dev/null; do
  22.    printf "Въведете съществуващ флаш диск. Пример /dev/sdc  ->  "
  23. read flash
  24. done
  25. echo
  26. echo "Операцията ще унищожи информацията на вашия флаш диск!"
  27. echo "Сигурни ли сте че искате да продължите?"
  28. select yn in "Да" "Не"; do
  29. case $yn in
  30. # Разкоменирайте този ред ако искате по-кратка информация за трансфера Да ) dd if=$iso | pv -ptr -N $iso | dd of=$flash ;;
  31. Да ) dd if=$iso | pv -ptrs `du -csh $iso 2>/dev/null|tail -n1|awk '{print $1}'` | dd of=$flash ; exit 1 ;;
  32. Не ) exit;;
  33. esac
  34. done
  35.  
« Последна редакция: Dec 29, 2011, 13:58 от AMD »
Активен

Господи моля те пази ме от ламерите, от хакерите и сам мога да се пазя.

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: shell скрипт
« Отговор #11 -: Dec 29, 2011, 20:38 »
ROKO_, разбирам че Убунту не ти е любима дистрибуция, ама няма да е зле да промениш това:

Цитат
if [ `id -u` -ne 0 ] ;

Това няма да сработи ако викаш скрипта със sudo. Проверявай $EUID променливата - ще сработи и в двата случая.
Активен

"Knowledge is power" - France is Bacon

AMD

  • Напреднали
  • *****
  • Публикации: 873
  • Distribution: Calculate Linux Scratch 64 / Alt Linux Centaurus 6.0 64
  • Window Manager: Gnome 2.32/3.2 XFCE 4.8/4.10-git
  • AMD Athlon64/Sempron64 4000+Dual Core/3400+
    • Профил
Re: shell скрипт
« Отговор #12 -: Dec 29, 2011, 21:56 »
ROKO_, разбирам че Убунту не ти е любима дистрибуция, ама няма да е зле да промениш това:

Цитат
if [ `id -u` -ne 0 ] ;

Това няма да сработи ако викаш скрипта със sudo. Проверявай $EUID променливата - ще сработи и в двата случая.

$EUID ?!

Нещо не мога да зацепя.
Активен

Господи моля те пази ме от ламерите, от хакерите и сам мога да се пазя.

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: shell скрипт
« Отговор #13 -: Dec 29, 2011, 22:26 »
A, това принтвало euid-а все пак, моя грешка. Както и да е, $EUID е по-бърз вариант, не се вика външна програма.
Активен

"Knowledge is power" - France is Bacon

shoshon

  • Напреднали
  • *****
  • Публикации: 497
    • Профил
Re: shell скрипт
« Отговор #14 -: Dec 29, 2011, 23:08 »
Код
GeSHi (Bash):
  1. while ! fdisk -s $flash &>/dev/null; do
  2.   printf "Въведете съществуващ флаш диск. Пример /dev/sdc  ->  "
  3. read flash
  4. done

Това не е никак хубав код! Как ще спреш програмата? В смисъл Ctrl+Backspace трябва да се използва...
Активен

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Shell картинка
Настройка на програми
Hanibal 0 1961 Последна публикация Jan 08, 2007, 00:35
от Hanibal
Shell скрипт за актуализация на папка
Общ форум
Radev 13 3934 Последна публикация Feb 11, 2007, 13:51
от radoulov
Проблем със shell конзолата
Кошче
madmad 2 2094 Последна публикация Sep 17, 2007, 23:04
от alabal
Проблем с Shell скрипт за НТВ
Настройка на програми
GuessWho 2 2295 Последна публикация Mar 14, 2009, 13:17
от GuessWho
Безплатен Shell Акаунт
Настройка на програми
madmad 2 2495 Последна публикация Jun 28, 2010, 18:03
от betso