Титла: BASH въпрос Публикувано от: ROKO__ в Dec 02, 2010, 12:12 Предварително да кажа ако темата не е в правилния раздел нека бъде преместена където трябва..
Въпроса е следния... if [ "$1" == 1 ]; then echo "Избрахте различно от "1" Системата ще се изключи! $( halt -p )" else echo "Избрахте "1" Системата ще се рестартира! $( reboot )" fi Не гледайте какво пише то е просто пример та мисълта ми е да изпълни else при зададен "1" А ако е зададен различен от "1" да се изпълни горната команда Титла: Re: BASH въпрос Публикувано от: b2l в Dec 02, 2010, 12:21 Код
Титла: Re: BASH въпрос Публикувано от: ROKO__ в Dec 02, 2010, 12:29 Така изпълнява само "else" независимо какво ще напиша
Титла: Re: BASH въпрос Публикувано от: bop_bop_mara в Dec 02, 2010, 12:48 ... да изпълни else при зададен "1"Т.е. искаш ако 1вия аргумент от командния ред е 1, да се изпълни "Избрахте различно от "1" Системата ще се изключи! $( halt -p )", а ако е различен от 1 - "Избрахте "1" Системата ще се рестартира! $( reboot )"?? Понеже малко недосхващам, ето напътствия 1. В "чистия" (стария Bourne) sh test-сравнението се прави само с =, == е bashism (или го избягвай, или внимавай с кой шел пускаш скрипта) 2. Понеже подозирам, че може да ти трябва отрицателно условие: if [ ! "$1" = 1 ] 3. $( reboot ) също е bashism, sh-варианта е `command` 4. Това $( reboot ) не просто ти изпълнява командата, а я изпълнява и ти дава низ със стандартния изход от нея: Код T.е. това, което би трябвало прави echo "Избрахте "1" Системата ще се рестартира! $( reboot )" е reboot и когато той завърши да сложи стандартния изход от него в този низ и чак тогава да ти го echo-не на ст. изход... Код Нямам идея това ли е търсения от теб ефект... Може да разкажеш отначало докрай какво искаш да постигнеш, за да има по-правилно насочена помощ. ПС. С това "избрахте", "напиша" все ми се струва, че искаш интерактивен скрипт, т.е. че имаш питане "Въведи" и искаш да обработиш отговора от него. Така ли е? Титла: Re: BASH въпрос Публикувано от: ROKO__ в Dec 02, 2010, 12:56 ... да изпълни else при зададен "1"Т.е. искаш ако 1вия аргумент от командния ред е 1, да се изпълни "Избрахте различно от "1" Системата ще се изключи! $( halt -p )", а ако е различен от 1 - "Избрахте "1" Системата ще се рестартира! $( reboot )"?? Да правилно ме разбираш трябва да се направи потребителски избор и той да изпълни според избора. И както съм казал ползвам bourne shell (bash) #!/bin/bash Титла: Re: BASH въпрос Публикувано от: bop_bop_mara в Dec 02, 2010, 13:01 Ами тогава защо по дяволите сравняваш $1 с 1??? $1 ти е 1вия аргумент от командния ред, т.е. като пуснеш скрипта с /path/to/my/script aaa bb c, $1 ти е aaa. Ако го пуснеш без аргументи $1 ти е "". Съвсем нормално е ВИНАГИ да ти се изпълнява else-а...
Код
Титла: Re: BASH въпрос Публикувано от: ROKO__ в Dec 02, 2010, 13:03 www.extremebg.co.cc/files/test2.bash
Титла: Re: BASH въпрос Публикувано от: bop_bop_mara в Dec 02, 2010, 13:07 www.extremebg.co.cc/files/test2.bashКакво за това? Код
Титла: Re: BASH въпрос Публикувано от: ROKO__ в Dec 02, 2010, 13:09 хм ^^ нещо да не е от версиите на bash
Титла: Re: BASH въпрос Публикувано от: b2l в Dec 02, 2010, 13:10 хм ^^ нещо да не е от версиите на bash Сигурно.... Може да е от задклавиатурното нещо... ROKO__, к'во е това на третия ред: Код: 1="1" Титла: Re: BASH въпрос Публикувано от: ROKO__ в Dec 02, 2010, 13:11 Стана номера, но странно защо по пример от bash documentation се изпълнява само else (малко не помня как се пише и се консултирам със документацията)
Титла: Re: BASH въпрос Публикувано от: bop_bop_mara в Dec 02, 2010, 13:13 Стана номера, но странно защо по пример от bash documentation се изпълнява само else (малко не помня как се пише и се консултирам със документацията)Дай да го видим тоз пример тогава. И дай да видим как стана номера, че да разберем какво искаше :) И, между другото, ако искаш да сложиш стойността на 1вия команден аргумент да е 1, това се прави със set... Титла: Re: BASH въпрос Публикувано от: b2l в Dec 02, 2010, 13:14 http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-6.html ($2)
Код
Титла: Re: BASH въпрос Публикувано от: ROKO__ в Dec 02, 2010, 13:14 хм ^^ нещо да не е от версиите на bash Уж променлива :) за да може после да пиша просто $1 Титла: Re: BASH въпрос Публикувано от: ROKO__ в Dec 02, 2010, 13:16 Стана номера, но странно защо по пример от bash documentation се изпълнява само else (малко не помня как се пише и се консултирам със документацията)Дай да го видим тоз пример тогава. И дай да видим как стана номера, че да разберем какво искаше :) Ам правя си подготовка за една предстояща работа иначе скрипта който ще видите няма да ви хареса особено :D но важното е че заработи (1:302)$ cat test.bash =================================== #!/bin/bash func() { printf "\e[1;37mДрасти е мурук\n" printf "\e[1;37mИ добре дошъл в моя ад\n" printf "\e[1;37m За пълна информация изпълнете скрипта като root\n" } info() { printf "\e[0;36mСистемна информация: $( lsb_release -a )\n" printf "\e[1;34mПроцесор информация: $( cat /proc/cpuinfo )\n" } func info echo echo echo printf "\e[0;31mКакъв процесор използвате ? AMD или intel\n" #!/bin/bash amd="amd" intel="intel" echo "Напишете марката с малки букви" read answer if [ "$answer" == intel ] then echo "Избрахте интел... Изглежда сте дебил който си няма понятие от хардуер. Системата ще се рестартира! $( reboot )" else echo "Избрахте АМД. Моите поздравления :)" fi =========================== (1:303)$ . test.bash Драсти е мурук И добре дошъл в моя ад За пълна информация изпълнете скрипта като root No LSB modules are available. Системна информация: Distributor ID: Debian Description: Debian GNU/Linux testing (squeeze) Release: testing Codename: squeeze Процесор информация: processor : 0 vendor_id : AuthenticAMD cpu family : 15 model : 107 model name : AMD Athlon(tm) 64 X2 Dual Core Processor 4000+ stepping : 1 cpu MHz : 2100.000 cache size : 512 KB physical id : 0 siblings : 2 core id : 0 cpu cores : 2 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 1 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good extd_apicid pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch bogomips : 4188.82 TLB size : 1024 4K pages clflush size : 64 cache_alignment : 64 address sizes : 40 bits physical, 48 bits virtual power management: ts fid vid ttp tm stc 100mhzsteps processor : 1 vendor_id : AuthenticAMD cpu family : 15 model : 107 model name : AMD Athlon(tm) 64 X2 Dual Core Processor 4000+ stepping : 1 cpu MHz : 2100.000 cache size : 512 KB physical id : 0 siblings : 2 core id : 1 cpu cores : 2 apicid : 1 initial apicid : 1 fpu : yes fpu_exception : yes cpuid level : 1 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good extd_apicid pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch bogomips : 4188.82 TLB size : 1024 4K pages clflush size : 64 cache_alignment : 64 address sizes : 40 bits physical, 48 bits virtual power management: ts fid vid ttp tm stc 100mhzsteps Какъв процесор използвате ? AMD или intel Напишете марката с малки букви intel bash: reboot: командата не е открита Избрахте интел... Изглежда сте дебил който си няма понятие от хардуер. Системата ще се рестартира! 1418/3021MB 0.63 0.43 0.23 2/350 1893 [14754:2441 0:304] 01:15:53 чт дек 02 [roko__@Debian64: +1] ~ (1:304)$ (1:304)$ . test.bash Драсти е мурук И добре дошъл в моя ад За пълна информация изпълнете скрипта като root No LSB modules are available. Системна информация: Distributor ID: Debian Description: Debian GNU/Linux testing (squeeze) Release: testing Codename: squeeze Процесор информация: processor : 0 vendor_id : AuthenticAMD cpu family : 15 model : 107 model name : AMD Athlon(tm) 64 X2 Dual Core Processor 4000+ stepping : 1 cpu MHz : 1000.000 cache size : 512 KB physical id : 0 siblings : 2 core id : 0 cpu cores : 2 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 1 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good extd_apicid pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch bogomips : 1994.67 TLB size : 1024 4K pages clflush size : 64 cache_alignment : 64 address sizes : 40 bits physical, 48 bits virtual power management: ts fid vid ttp tm stc 100mhzsteps processor : 1 vendor_id : AuthenticAMD cpu family : 15 model : 107 model name : AMD Athlon(tm) 64 X2 Dual Core Processor 4000+ stepping : 1 cpu MHz : 1000.000 cache size : 512 KB physical id : 0 siblings : 2 core id : 1 cpu cores : 2 apicid : 1 initial apicid : 1 fpu : yes fpu_exception : yes cpuid level : 1 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good extd_apicid pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch bogomips : 1994.67 TLB size : 1024 4K pages clflush size : 64 cache_alignment : 64 address sizes : 40 bits physical, 48 bits virtual power management: ts fid vid ttp tm stc 100mhzsteps Какъв процесор използвате ? AMD или intel Напишете марката с малки букви amd Избрахте АМД. Моите поздравления :) 1381/3021MB 0.59 0.43 0.24 4/350 1911 [14754:2441 0:305] 01:16:21 чт дек 02 [roko__@Debian64: +1] ~ (1:305)$ ПС: Не гледайте че съм с дебиан това е просто временно :D смятах че ще ми е удобен за работа но уви Титла: Re: BASH въпрос Публикувано от: b2l в Dec 02, 2010, 13:17 Абе Intel се пише с главна букна бе :D :D :D :D.
Титла: Re: BASH въпрос Публикувано от: bop_bop_mara в Dec 02, 2010, 13:18 $1 е специална променлива и тя означава 1вия аргумент от командния ред (не знам за кой път го казвам в тая тема).... Или позлваш друго име за променливата, или си set-ваш кои са ти аргументите от командния ред...хм ^^ нещо да не е от версиите на bash Титла: Re: BASH въпрос Публикувано от: ROKO__ в Dec 02, 2010, 13:20 Горе долу това е което ми трябваше за скриптинга...
Сега остава Питоня :D Ама по късно ще пиша тема за него Титла: Re: BASH въпрос Публикувано от: bop_bop_mara в Dec 02, 2010, 13:26 Мн интересн скрипт... Изключваме bashism-ите, но какво прави по средата на кода #!/bin/bash??? И за какво ти е
Код след като после имаш Код което е еквивалентно на Код НЕ на Код
Титла: Re: BASH въпрос Публикувано от: ROKO__ в Dec 02, 2010, 13:26 Марче благодаря за помощта
Титла: Re: BASH въпрос Публикувано от: ROKO__ в Dec 02, 2010, 13:27 Мн интересн скрипт... Изключваме bashism-ите, но какво прави по средата на кода #!/bin/bash??? И за какво ти е Позабравил съм нещата за това че не обръщай внимание на грешките след като опресних знанията няма да ги допускам отново Доста полезна ми беше тази помощ поне ще мога да си довърша инсталатора за моя училищен проект. (След време може да го пренапиша на Python ако сметна за необходимо) Титла: Re: BASH въпрос Публикувано от: bop_bop_mara в Dec 02, 2010, 13:36 Марче благодаря за помощтаЗа нищо... Цитат Доста полезна ми беше тази помощ поне ще мога да си довърша инсталатора за моя училищен проект. (След време може да го пренапиша на Python ако сметна за необходимо)Ако това е код за инсталатор... доста интересен ще бъде... А за Python - какъв смисъл има да го пренаписваш, не мисля, че имаш нужда от нещо, което Bash не ти предоставя, а Python - да... Ти си знаеш де, на нас ще ни е интересно да видим какво пишеш на Python :) Титла: Re: BASH въпрос Публикувано от: ROKO__ в Dec 02, 2010, 13:39 http://extremebg.co.cc/gentoo/gentoo-installer
http://extremebg.co.cc/gentoo/Chroot Ще ползвам за база тези скриптове от предишен мой успешен но не много удачен опит и ще го внедря в "ArchLinux за училище" :) Ако имате някакви критики относно тези скриптове ги кажете Титла: Re: BASH въпрос Публикувано от: romeo_ninov в Dec 02, 2010, 13:40 Хора, четете документацията, за сравняване на числа се ползва -eq, а не =
Код: if [ $1 -eq 1 ]; then...... Титла: Re: BASH въпрос Публикувано от: ROKO__ в Dec 02, 2010, 13:40 Марче благодаря за помощтаЗа нищо... Е да тук си права че ще е същото но на работа някой път си казват искам този не онзи и така :) Но в конкретния случай това ми е за инсалатора както и предварителна подготовка за работа Титла: Re: BASH въпрос Публикувано от: shoshon в Dec 02, 2010, 13:40 Мале мале....
за сравнения на числа се използват -eq -lt -gt. За сравнения на низове се използва = . Всякви останали разсъждения са излишни I="ivan" [ivan@ivan-laptop ~]$ if [ "$I" = "ivan" ]; then echo "balabla"; else echo "not alabala"; fi balabla RTFM А гледам че докато съм си изливал "съчувствието" са отговорили преди мене :) Ооо... сега гледам че ROKO_ е "внедрител". Тежко им на дечицата... Титла: Re: BASH въпрос Публикувано от: romeo_ninov в Dec 02, 2010, 13:43 Мале мале....Аз докато напиша моето станаха две страници :) Титла: Re: BASH въпрос Публикувано от: ROKO__ в Dec 02, 2010, 13:46 Мале мале.... Спокойно бре няма да напиша точно това.. Това е просто пример по който по лесно да си припомня материала. Иначе ми трябва като правя инсталатора да може да сравнява зададените параметри например файлова система точки на монтиране \ако не е зададена точка за / да изпише съобщение и такива/ абе знаеш за какво говоря да не разтъкавам локуми Титла: Re: BASH въпрос Публикувано от: bop_bop_mara в Dec 02, 2010, 13:49 за сравнения на числа се използват -eq -lt -gt. За сравнения на низове се използва = .Сега, 1во виж последните скриптове на Роко, ползва точно -eq, тъй че спокойно. Второ, в случая за равенство на практика е все едно, така или иначе всички променливи в bash са низове (-lt, -gt само казват да сравнява тия низове все едно са числа). Стилово все пак може би -eq е по-добре. Роко, ето какво забелязвам по скриптовете (без да чета много надълбоко какви действия извършват): 1. Като установиш, че юзърът не е root и му кажеш да го пусне като root, продължаваш с изпълнението на скрипта... 2. Никъде не се проверява всякак изпълнена команда как е завършила - успешно или неуспешно - и според това как трябва да се продължи. В (ba)sh командите се изпълняват една след друга, ако някоя завърши неуспешно, не спира изпълнението на скрипта, а се продължава със следващата. Доколкото съм виждала и чувала, сериозните скриптове са пълни с if и case. Титла: Re: BASH въпрос Публикувано от: ROKO__ в Dec 02, 2010, 13:52 за сравнения на числа се използват -eq -lt -gt. За сравнения на низове се използва = .Сега, 1во виж последните скриптове на Роко, ползва точно -eq, тъй че спокойно. Второ, в случая за равенство на практика е все едно, така или иначе всички променливи в bash са низове (-lt, -gt само казват да сравнява тия низове все едно са числа). Стилово все пак може би -eq е по-добре. Да това и сам го казах че този скрипт ми беше още в самото начало когато започнах с bash и не всичко съм изпипал и сега това ще тествам докато стане както трябва Титла: Re: BASH въпрос Публикувано от: ROKO__ в Dec 02, 2010, 14:05 Още едно въпрос:
Значи определям процесорната архитектура в инсталатора.. Та мисълта ми е има ли начин да опиша в скрипта преди да започне инсталация да провери "uname -m" и ако е различно от зададената архитектура да прекъсне инсталацията. В конкретния случай правя за 64 битова инсталация Титла: Re: BASH въпрос Публикувано от: bop_bop_mara в Dec 02, 2010, 14:11 Ако uname -m за всички 64-битови връща x86_64:
Код (или разписано с if, ама ме мързи да пиша). Титла: Re: BASH въпрос Публикувано от: ROKO__ в Dec 02, 2010, 14:28 Ако uname -m за всички 64-битови връща x86_64: хм нещо се дъни :) Този скрипт е предназначен за инсталиране на Gentoo Linux от вече съществуващ Линукс (Например Mandriva Sabayon Calculate Toorox Ubuntu). Необходимо е да имате някоя от тези или друга дистрибуция както и интернет връзка. Единствено трябва да сте търпеливи (Поне тези които сте с по стар хардуер) Автор ROKO__ (Росен Александров - sandikata@yandex.ru) Важно! Тази инсталация е за 64 бита. Трябва да имате съответния хардуер. bash: [: !==: очаква се бинарен оператор bash: [: !==: очаква се бинарен оператор Титла: Re: BASH въпрос Публикувано от: b2l в Dec 02, 2010, 14:37 @shoshon, @romeo_ninov: първо да кажа, че с този пост целя само да се заяждам с вас двамцата. Еми господа "RTFM" - ако това в tldp.org ($2) не е RTFM кое е тогава??? А така като гледам примера свавняват стринга "foo" със стринга "foo" с едно просто равно не с -eq...
Титла: Re: BASH въпрос Публикувано от: bop_bop_mara в Dec 02, 2010, 14:47 bash: [: !==: очаква се бинарен операторАз не виждам !== в Код
Титла: Re: BASH въпрос Публикувано от: ROKO__ в Dec 02, 2010, 15:49 bash: [: !==: очаква се бинарен операторАз не виждам !== в Смотри.. www.extremebg.co.cc/images/shet.png Титла: Re: BASH въпрос Публикувано от: bop_bop_mara в Dec 02, 2010, 15:59 bash: [: !==: очаква се бинарен операторАз не виждам !== в Роко... аз какво съм ти написала, във файла ти какво пише??? Прегледай си пак тоя 23 ред на кода и много внимателно прочети какво си написал... Ако не можеш да осъзнаеш, пейстни го тук, за да ти обясним какво правиш... ПС. Разбираш ли какво прави Код
Титла: Re: BASH въпрос Публикувано от: tyuio в Dec 02, 2010, 16:06 //офф
Роко, то е ясно че никакви програмни езици не щпрехаш, ама барем български не говориш ли? Титла: Re: BASH въпрос Публикувано от: ROKO__ в Dec 02, 2010, 16:10 Добре сега ще покажа идеята...
if [[ $(uname -m) == "x86_64" ]]; then printf "\e[0;32mПроцесорът ви поддържа x64"; else printf "\e[0;31mПроцесорът ви не поддържа x64"; fi Това е въпросния ред.. Работи но искам да го направя когато не съответства архитектурата да прекъсва инсталацията ^^ добавях exit 1 след скобите но се получават грешки и нещо не мога да го разбера как трябва да стане Титла: Re: BASH въпрос Публикувано от: tyuio в Dec 02, 2010, 16:18 а нямали да ни кажеш как точно го слагаш тоя изход, или какви грешки дава?
Титла: Re: BASH въпрос Публикувано от: ROKO__ в Dec 02, 2010, 16:19 Не гледаш ли на снимката какво се получава ?
Титла: Re: BASH въпрос Публикувано от: bop_bop_mara в Dec 02, 2010, 16:23 Добре сега ще покажа идеята... Вариант 1 Код
Вариант 2 Код
Вариант 3 Код
Не гледаш ли на снимката какво се получава ?Това на снимката е от Код което си е синтактично неправилно. Титла: Re: BASH въпрос Публикувано от: tyuio в Dec 02, 2010, 16:25 а що изход е в тия скоби? изкарай го след показването на текста!
Опааа, марчето ме изпреварила :) Титла: Re: BASH въпрос Публикувано от: ROKO__ в Dec 02, 2010, 16:29 а що изход е в тия скоби? изкарай го след показването на текста! Ако е грешно значи и документацията на bash е грешна от там гледам за примери Титла: Re: BASH въпрос Публикувано от: ROKO__ в Dec 02, 2010, 16:31 www.extremebg.co.cc/images/work.png
Така се получи... Ето и целия код (има малки въпросителни още но мисля че и за тях има решение) #!/bin/bash # Инсталатор за Gentoo Linux # Автор: Росен Александров - sandikata@yandex.ru # Лиценз: Свободен (По желание на потребителя може да почерпи с кашонче бира :) # Проверка за администраторски права if [ `id -u` != "0" ]; then echo "Добре дошли в инсталатора на Gentoo Linux" echo "За да изпълните този скрипт ви трябва root." echo "Моля стартирайте скрипта като root." fi echo echo echo printf "\e[1;37mТози скрипт е предназначен за инсталиране на Gentoo Linux от вече съществуващ Линукс (Например Mandriva Sabayon Calculate Toorox Ubuntu). Необходимо е да имате някоя от тези или друга дистрибуция както и интернет връзка.\n" printf "\e[1;37mЕдинствено трябва да сте търпеливи (Поне тези които сте с по стар хардуер)\n" printf "\e[1;37mАвтор ROKO__ (Росен Александров - sandikata@yandex.ru)\n" printf "\e[1;37mВажно! Тази инсталация е за 64 бита. Трябва да имате съответния хардуер.\n" echo echo #if [[ $(uname -m) == "x86_64" ]]; then printf "\e[0;32mПроцесорът ви поддържа x64"; else printf "\e[0;31mПроцесорът ви не поддържа x64"; fi [[ $(uname -m) != "x86_64" ]] && printf "\e[0;31mПроцесорът ви не поддържа x64\n" && exit 1 printf "\e[0;32mПроцесорът ви поддържа x64\n" echo "За да продължите с инсталацита натиснете произволен бутон" read key echo "Изберете дял за root (/)" echo "Например : /dev/sda1" read BOOTPART echo "Изберете дял за SWAP (Допълнителна виртуална памет)" read SWAP mkswap $SWAP swapon $SWAP echo echo "Изберете файлова система .. Например reiserfs, ext4" read fs if [ "$fs" == reiserfs ] then mkfs.reiserfs $BOOTPART else mkfs.ext4 $BOOTPART fi mkdir /mnt/gentoo mount $BOOTPART /mnt/gentoo cd /mnt/gentoo echo "Изтегляне на Stage3 файл..." echo "Изберете сървър...(1-4)" echo "1- САЩ" echo "2 - България" echo "3 - Германия" echo "4 - Холандия" echo echo "Pick number:" read LOC if [ $LOC -eq 1 ] then echo "Изтегляне на Stage 3..." wget http://distfiles.gentoo.org/releases/amd64/current-stage3/http://distfiles.gentoo.org/releases/amd64/current-stage3/stage3-amd64-20101021.tar.bz2 elif [ $LOC -eq 2 ] then echo "Изтегляне на Stage 3..." wget ftp://ftp.gentoo.bg/releases/amd64/current-stage3/http://distfiles.gentoo.org/releases/amd64/current-stage3/stage3-amd64-20101021.tar.bz2 elif [ $LOC -eq 3 ] then echo "Изтегляне на Stage 3..." wget http://mirror.netcologne.de/gentoo/releases/amd64/current-stage3/http://distfiles.gentoo.org/releases/amd64/current-stage3/stage3-amd64-20101021.tar.bz2 elif [ $LOC -eq 4 ] then echo "Изтегляне на Stage 3..." wget http://gentoo.tiscali.nl/releases/amd64/current-stage3/http://distfiles.gentoo.org/releases/amd64/current-stage3/stage3-amd64-20101021.tar.bz2 else echo "Изберете бутон от (1-4)!" echo "Downloading Stage 3 from default..." wget http://darkstar.ist.utl.pt/gentoo/releases/amd64/current-stage3/stage3-amd64-20100408.tar.bz2 fi echo "Изтегляне на Portage..." echo "Изберете сървър...(1-4)" echo "1- САЩ" echo "2 - България" echo "3 - Германия" echo "4 - Холандия" echo echo "Изберете бутон (1-4)!" read LOC if [ $LOC -eq 1 ] then echo "Изтегляне на Portage..." wget http://distfiles.gentoo.org/snapshots/portage-latest.tar.bz2 elif [ $LOC -eq 2 ] then echo "Изтегляне на Portage..." wget ftp://ftp.gentoo.bg/snapshots/portage-latest.tar.bz2 elif [ $LOC -eq 3 ] then echo "Изтегляне на Portage..." wget http://mirror.netcologne.de/gentoo/releases/amd64/current-stage3/stage3-amd64-20100408.tar.bz2 elif [ $LOC -eq 4 ] then echo "Изтегляне на Portage..." wget http://gentoo.tiscali.nl/snapshots/portage-latest.tar.bz2 else echo "You have to pick a number between (1-4)!" echo "Downloading Portage from default..." wget http://darkstar.ist.utl.pt/gentoo/snapshots/portage-latest.tar.bz2 fi #Unpacks Stage3 tar file clear echo echo "Stage3 е изтеглен" echo "Portage е изтеглен" echo "Разархивирам Stage3 и Portage..." tar xjpf stage3* tar xjf portage-latest.tar.bz2 -C /mnt/gentoo/usr echo "Готово!" echo #Copies DNS information echo "Копирам DNS" cp -L /etc/resolv.conf /mnt/gentoo/etc/resolv.conf #Mounts Proc filesystem echo "Монтирам proc и dev файлови системи" mount -t proc proc /mnt/gentoo/proc mount -o bind /dev /mnt/gentoo/dev echo "За да продължите инсталацията ви трябва Chroot скрипт. Можете да го изтеглите от тук -> http://extremebg.co.cc/gentoo/Chroot" #Chroots into new Enviroment" echo "Вход в новата система" chroot /mnt/gentoo /bin/bash env-update source /etc/profile Титла: Re: BASH въпрос Публикувано от: romeo_ninov в Dec 02, 2010, 16:42 Код: if [ `id -u` != "0" ]; then Код: if [ `id -u` -ne 0 ]; then Титла: Re: BASH въпрос Публикувано от: neter в Dec 02, 2010, 17:04 # Проверка за администраторски праваСложи и еxit, за да прекъснеш скрипта при изпълнение на условието. В противен случай на потребителя ще се изпише, че трябва да е root, но скриптът ще продължи изпълнението си. echo "Изберете дял за SWAP (Допълнителна виртуална памет)"Всички подобни комплекти от echo и read по-добре да бъдат комплект от printf и read. Пример Код
echo "Изберете дял за root (/)"Ами ако потребителят въведе невалидно или несъществуващо устройство? Добави проверка за валидност на данните и коректност на изпълнението към всяко действие в скрипта. В зависимост от получените резултати (или твоите предпочитания) за действието, скриптът може да пита отново за данни или направо да спре изпълнението си. 4. Изнеси всякакви текстове и линкове като променливи в началото на скрипта, или по-добре в отделни файлове, от които да ги четеш. Гледай в кода да имаш възможно най-малко неща, които може да претърпят промяна в даден момент. 5. Оправи си печатните и граматическите грешки. Не съм гледал за синтактични грешки в кода ти, но ако има такива, ще си проличи. Опитай се да проиграеш всички варианти, които ти хрумнат, за да провериш максимално скрипта си за бъгове. P.S.: Едно допълнение към ядовете ти от предните страници на темата. Никъде и никога не слагай имена на твои променливи, започващи с цифра. Имената на променливите трябва да започват с буква. Иначе ще има много да си скубеш косата ;) Титла: Re: BASH въпрос Публикувано от: ROKO__ в Dec 02, 2010, 18:30 Дай пример за това съм публикувал тук целия скрипт за допълнителни идей
Титла: Re: BASH въпрос Публикувано от: ROKO__ в Dec 02, 2010, 18:58 [ `id -u` != "0" ] && printf "\e[0;31mНямате администраторски права. Моля стартирайте скрипта като администратор (root)\n" && sleep 5s; exit 1
printf "\e[0;32mНапред (Enter)\n" read key Така дали ще се хареса на господата и госпожиците (и госпожите :D) Титла: Re: BASH въпрос Публикувано от: romeo_ninov в Dec 02, 2010, 19:16 [ `id -u` != "0" ] && printf "\e[0;31mНямате администраторски права. Моля стартирайте скрипта като администратор (root)\n" && sleep 5s; exit 1пак сравняваш числа, пробвай с -ne вместо != Титла: Re: BASH въпрос Публикувано от: bop_bop_mara в Dec 02, 2010, 19:32 Роко, имаш
Код Мислиш ли, че това ще стигне до 2рото printf и до read?? Титла: Re: BASH въпрос Публикувано от: ROKO__ в Dec 02, 2010, 20:46 Аз го оправих вече това ^^ Но сега малко почивка
Титла: Re: BASH въпрос Публикувано от: neter в Dec 03, 2010, 14:00 Дай пример за това съм публикувал тук целия скрипт за допълнителни идейНямам много време да се занимавам с това сега, но ето някои насочващи примери: # Проверка за администраторски праваТова става така # Проверка за администраторски права За изнесените стрингове и url-та във външни файлове, става с командата source. Тя изчита подадения файл и вмъква описаните променливи и техните стойности в твоя скрипт. Данните във външните файлове се описват така: Цитат var1="value1"След това в началото на скрипта (за да са достъпни за целия скрипт, иначе не е задължително да седи в началото) слагаш подобен ред: Код В скрипта викаш променливите с техните имена ($var1, $var2, $var3). Препоръчвам ти да си направиш два отделни файла за стринговете и за url-тата (информацията да се раздели смислово). Проверките за валидност и коректност на изпълнението са строго специфични за всяко проверявано действие. Прояви въображение, когато мислиш проверките. За пример, може това echo "Изберете дял за root (/)"да стане така Код Проверяваме с fdisk дали зададеният дял съществува (флагът "-s" връща размера на дяла, ако съществува), и ако потребителят е въвел невалиден или несъществуващ дял, то цикълът ще се завърти отново и отново ще се даде предложение на потребителя да въведе (това не е списък за избор, така че думата "изберете" не пасва) нужния дял. Може да ползваш същата проверка и за $SWAP. Давай нататък ;) Титла: Re: BASH въпрос Публикувано от: ROKO__ в Dec 03, 2010, 14:19 Дай пример за това съм публикувал тук целия скрипт за допълнителни идейНямам много време да се занимавам с това сега, но ето някои насочващи примери:# Проверка за администраторски праваТова става така Благодаря за информацията, после ще публикувам целия скрипт (може да представлява за някого интерес) |