Автор Тема: BASH въпрос  (Прочетена 7853 пъти)

ROKO__

  • Напреднали
  • *****
  • Публикации: 1531
  • Distribution: Calculate Linux Workstation amd64
  • Window Manager: GNOME 2.30
  • AMD Athlon64 4000+ Dual Core 2100 MHz 2MB L2 cache
    • Профил
BASH въпрос
« -: Dec 02, 2010, 12:12 »
Предварително да кажа ако темата не е в правилния раздел нека бъде преместена където трябва..

Въпроса е следния...


if [ "$1" == 1 ]; then
 echo "Избрахте различно от "1" Системата ще се изключи! $( halt -p )"
else
 echo "Избрахте "1" Системата ще се рестартира! $( reboot )"
fi

Не гледайте какво пише то е просто пример та мисълта ми е да изпълни else при зададен "1"
А ако е зададен различен от "1" да се изпълни горната команда
Активен

Не е важно да си добър, важно е да си най добрия!!!

http://www.calculate-linux.ru/
http://www.agilialinux.ru/

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: BASH въпрос
« Отговор #1 -: Dec 02, 2010, 12:21 »
Код
GeSHi (Bash):
  1. if [ "$1" = 1 ];then
  2. echo "Избрахте "1" Системата ще се рестартира! $( reboot )"
  3. else
  4. echo "Избрахте различно от "1" Системата ще се изключи! $( halt -p )"
  5. fi
  6.  
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

ROKO__

  • Напреднали
  • *****
  • Публикации: 1531
  • Distribution: Calculate Linux Workstation amd64
  • Window Manager: GNOME 2.30
  • AMD Athlon64 4000+ Dual Core 2100 MHz 2MB L2 cache
    • Профил
Re: BASH въпрос
« Отговор #2 -: Dec 02, 2010, 12:29 »
Така изпълнява само "else" независимо какво ще напиша
Активен

Не е важно да си добър, важно е да си най добрия!!!

http://www.calculate-linux.ru/
http://www.agilialinux.ru/

bop_bop_mara

  • Напреднали
  • *****
  • Публикации: 2433
  • Distribution: Debian Testing
  • Window Manager: LXDE
  • Cute and cuddly
    • Профил
Re: BASH въпрос
« Отговор #3 -: Dec 02, 2010, 12:48 »
... да изпълни else при зададен "1"
А ако е зададен различен от "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 ) не просто ти изпълнява командата, а я изпълнява и ти дава низ със стандартния изход от нея:
Код
GeSHi (Bash):
  1. mara@BlackPearl:~$ n=$(echo xxxx)
  2. mara@BlackPearl:~$ echo $n
  3. xxxx
  4. mara@BlackPearl:~$
T.е. това, което би трябвало прави echo "Избрахте "1" Системата ще се рестартира! $( reboot )" е reboot и когато той завърши да сложи стандартния изход от него в този низ и чак тогава да ти го echo-не на ст. изход...
Код
GeSHi (Bash):
  1. mara@BlackPearl:~$ echo "Избрахте "1" Системата ще се рестартира! $( echo xxxx )"
  2. Избрахте 1 Системата ще се рестартира! xxxx
  3. mara@BlackPearl:~$
Нямам идея това ли е търсения от теб ефект...

Може да разкажеш отначало докрай какво искаш да постигнеш, за да има по-правилно насочена помощ.

ПС. С това "избрахте", "напиша" все ми се струва, че искаш интерактивен скрипт, т.е. че имаш питане "Въведи" и искаш да обработиш отговора от него. Така ли е?
« Последна редакция: Dec 02, 2010, 12:51 от bop_bop_mara »
Активен

ROKO__

  • Напреднали
  • *****
  • Публикации: 1531
  • Distribution: Calculate Linux Workstation amd64
  • Window Manager: GNOME 2.30
  • AMD Athlon64 4000+ Dual Core 2100 MHz 2MB L2 cache
    • Профил
Re: BASH въпрос
« Отговор #4 -: Dec 02, 2010, 12:56 »
... да изпълни else при зададен "1"
А ако е зададен различен от "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 ) не просто ти изпълнява командата, а я изпълнява и ти дава низ със стандартния изход от нея:
Код
GeSHi (Bash):
  1. mara@BlackPearl:~$ n=$(echo xxxx)
  2. mara@BlackPearl:~$ echo $n
  3. xxxx
  4. mara@BlackPearl:~$
T.е. това, което би трябвало прави echo "Избрахте "1" Системата ще се рестартира! $( reboot )" е reboot и когато той завърши да сложи стандартния изход от него в този низ и чак тогава да ти го echo-не на ст. изход...
Код
GeSHi (Bash):
  1. mara@BlackPearl:~$ echo "Избрахте "1" Системата ще се рестартира! $( echo xxxx )"
  2. Избрахте 1 Системата ще се рестартира! xxxx
  3. mara@BlackPearl:~$
Нямам идея това ли е търсения от теб ефект...

Може да разкажеш отначало докрай какво искаш да постигнеш, за да има по-правилно насочена помощ.

ПС. С това "избрахте", "напиша" все ми се струва, че искаш интерактивен скрипт, т.е. че имаш питане "Въведи" и искаш да обработиш отговора от него. Така ли е?

Да правилно ме разбираш трябва да се направи потребителски избор и той да изпълни според избора. И както съм казал ползвам bourne shell (bash) #!/bin/bash
Активен

Не е важно да си добър, важно е да си най добрия!!!

http://www.calculate-linux.ru/
http://www.agilialinux.ru/

bop_bop_mara

  • Напреднали
  • *****
  • Публикации: 2433
  • Distribution: Debian Testing
  • Window Manager: LXDE
  • Cute and cuddly
    • Профил
Re: BASH въпрос
« Отговор #5 -: Dec 02, 2010, 13:01 »
Ами тогава защо по дяволите сравняваш $1 с 1??? $1 ти е 1вия аргумент от командния ред, т.е. като пуснеш скрипта с /path/to/my/script aaa bb c, $1 ти е aaa. Ако го пуснеш без аргументи $1 ти е "". Съвсем нормално е ВИНАГИ да ти се изпълнява else-а...

Код
GeSHi (Bash):
  1. echo "Enter value"
  2. read answer
  3. if [ "$answer" = 1 ]
  4. then
  5. echo "rebooting"
  6. /sbin/reboot
  7. else
  8. echo "halting"
  9. /sbin/halt
  10. fi
  11.  
Активен

ROKO__

  • Напреднали
  • *****
  • Публикации: 1531
  • Distribution: Calculate Linux Workstation amd64
  • Window Manager: GNOME 2.30
  • AMD Athlon64 4000+ Dual Core 2100 MHz 2MB L2 cache
    • Профил
Re: BASH въпрос
« Отговор #6 -: Dec 02, 2010, 13:03 »
http://www.extremebg.co.cc/files/test2.bash
Активен

Не е важно да си добър, важно е да си най добрия!!!

http://www.calculate-linux.ru/
http://www.agilialinux.ru/

bop_bop_mara

  • Напреднали
  • *****
  • Публикации: 2433
  • Distribution: Debian Testing
  • Window Manager: LXDE
  • Cute and cuddly
    • Профил
Re: BASH въпрос
« Отговор #7 -: Dec 02, 2010, 13:07 »
http://www.extremebg.co.cc/files/test2.bash
Какво за това?

Код
GeSHi (Bash):
  1. mara@BlackPearl:~$ ./test2.bash
  2. ./test2.bash: line 3: 1=1: command not found
  3.  
  4. Избрахте различно от 1 Системата ще се изключи!
  5. mara@BlackPearl:~$
Активен

ROKO__

  • Напреднали
  • *****
  • Публикации: 1531
  • Distribution: Calculate Linux Workstation amd64
  • Window Manager: GNOME 2.30
  • AMD Athlon64 4000+ Dual Core 2100 MHz 2MB L2 cache
    • Профил
Re: BASH въпрос
« Отговор #8 -: Dec 02, 2010, 13:09 »
хм ^^ нещо да не е от версиите на bash
Активен

Не е важно да си добър, важно е да си най добрия!!!

http://www.calculate-linux.ru/
http://www.agilialinux.ru/

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: BASH въпрос
« Отговор #9 -: Dec 02, 2010, 13:10 »
хм ^^ нещо да не е от версиите на bash

Сигурно.... Може да е от задклавиатурното нещо...

ROKO__, к'во е това на третия ред:
Код:
1="1"
???
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

ROKO__

  • Напреднали
  • *****
  • Публикации: 1531
  • Distribution: Calculate Linux Workstation amd64
  • Window Manager: GNOME 2.30
  • AMD Athlon64 4000+ Dual Core 2100 MHz 2MB L2 cache
    • Профил
Re: BASH въпрос
« Отговор #10 -: Dec 02, 2010, 13:11 »
Стана номера, но странно защо по пример от bash documentation се изпълнява само else (малко не помня как се пише и се консултирам със документацията)
Активен

Не е важно да си добър, важно е да си най добрия!!!

http://www.calculate-linux.ru/
http://www.agilialinux.ru/

bop_bop_mara

  • Напреднали
  • *****
  • Публикации: 2433
  • Distribution: Debian Testing
  • Window Manager: LXDE
  • Cute and cuddly
    • Профил
Re: BASH въпрос
« Отговор #11 -: Dec 02, 2010, 13:13 »
Стана номера, но странно защо по пример от bash documentation се изпълнява само else (малко не помня как се пише и се консултирам със документацията)
Дай да го видим тоз пример тогава. И дай да видим как стана номера, че да разберем какво искаше :)

И, между другото, ако искаш да сложиш стойността на 1вия команден аргумент да е 1, това се прави със set...
Активен

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: BASH въпрос
« Отговор #12 -: Dec 02, 2010, 13:14 »
http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-6.html
Код
GeSHi (Bash):
  1. #!/bin/bash
  2.            if [ "foo" = "foo" ]; then
  3.               echo expression evaluated as true
  4.            else
  5.               echo expression evaluated as false
  6.            fi
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

ROKO__

  • Напреднали
  • *****
  • Публикации: 1531
  • Distribution: Calculate Linux Workstation amd64
  • Window Manager: GNOME 2.30
  • AMD Athlon64 4000+ Dual Core 2100 MHz 2MB L2 cache
    • Профил
Re: BASH въпрос
« Отговор #13 -: Dec 02, 2010, 13:14 »
хм ^^ нещо да не е от версиите на bash

Сигурно.... Може да е от задклавиатурното нещо...

ROKO__, к'во е това на третия ред:
Код:
1="1"
???

Уж променлива :) за да може после да пиша просто $1
Активен

Не е важно да си добър, важно е да си най добрия!!!

http://www.calculate-linux.ru/
http://www.agilialinux.ru/

ROKO__

  • Напреднали
  • *****
  • Публикации: 1531
  • Distribution: Calculate Linux Workstation amd64
  • Window Manager: GNOME 2.30
  • AMD Athlon64 4000+ Dual Core 2100 MHz 2MB L2 cache
    • Профил
Re: BASH въпрос
« Отговор #14 -: Dec 02, 2010, 13:16 »
Стана номера, но странно защо по пример от bash documentation се изпълнява само else (малко не помня как се пише и се консултирам със документацията)
Дай да го видим тоз пример тогава. И дай да видим как стана номера, че да разберем какво искаше :)

И, между другото, ако искаш да сложиш стойността на 1вия команден аргумент да е 1, това се прави със set...

Ам правя си подготовка за една предстояща работа иначе скрипта който ще видите няма да ви хареса особено :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 смятах че ще ми е удобен за работа но уви
« Последна редакция: Dec 02, 2010, 13:18 от ROKO__ »
Активен

Не е важно да си добър, важно е да си най добрия!!!

http://www.calculate-linux.ru/
http://www.agilialinux.ru/

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
BASH: Как да поддържам една програма работеща
Общ форум
Regia 1 9252 Последна публикация Feb 16, 2005, 08:51
от
bash
Настройка на програми
tuxi 7 4767 Последна публикация Jun 11, 2005, 19:12
от tuxi
Моля за малко помощ за BASH
Настройка на програми
bonbon 3 3538 Последна публикация Dec 04, 2005, 16:37
от bonbon
BASH
Общ форум
Dean79 3 3679 Последна публикация Jan 13, 2006, 00:24
от Dean79
Bash присвояване на стойност от файл
Общ форум
Pulear 6 4295 Последна публикация May 21, 2006, 17:20
от Pulear