Linux за българи: Форуми

Linux секция за начинаещи => Настройка на програми => Темата е започната от: tony1975 в Sep 03, 2007, 14:39



Титла: Bash
Публикувано от: tony1975 в Sep 03, 2007, 14:39
Здравейте на всички! В момента уча писане на скриптове на bash и зациклих на едно място и не мога да разбера грешката, която излиза дали е от грешен синтаксис или от нещо друго. Нещата са следните: имаме файл logfile.test, с редове с най-различна текстова информация. В този файл трябва да се преброят редовете, в които има fff и zzz, но не само едно от двете. Скрипта, който съм написал е:
#!/bin/bash
CNT='grep -fixed-strings -count "fff*zzz" logfile.test'
printf "There are %d pairs "fff" along with "zzz" .\n" $CNT

При стартиране ми дава грешка "Error on line 3: invalid number". Пробвах вместо ' да сложа ` и ", но мямаше ефект. Някой има ли идея къде съм сбъркал?
P.S. Използвам едно ръководство по bash-скриптиране на SAMS.





Титла: Bash
Публикувано от: VladSun в Sep 03, 2007, 14:51
1. не си "ескейпнал" кавичките в printf около fff и zzz
2. няма такива опции за grep - с две тирета са ;)
3. сложи `` около $CNT


Титла: Bash
Публикувано от: tony1975 в Sep 03, 2007, 15:03
Мерси Vladsun, но нищо не стана. А и опциите за grep са с -, а не с --.


Титла: Bash
Публикувано от: VladSun в Sep 03, 2007, 15:11
Цитат

man grep
...
-c, --count
...
-F, --fixed-strings

Печеля! :)

Какво означава "нищо не стана"?!? Не мога да ти помогна ако ми даваш подобни описания на проблемните си ;)
Искам - твоя код, данни и параметри, с които проваш, получен резултат, какво не ти харесва в получения резултат и т.н. ;)


Титла: Bash
Публикувано от: tony1975 в Sep 03, 2007, 15:20
Нещата са такива, каквито вече ги описах. В примера всичко е дадено, както го описах. Прави ми впечатление, че ако сложа ' целия ред е в един цвят, а ако поставя скоби - всички думи се оцветяват с различен цвят, което ме навежда на мисълта, че нещо не е наред с '.

Описание на файла logfile.test:

fff, fdsfdfdsdfsf, zzz
fff, asdffdsdsdf, ddd
sss, adsdasdas, zzz
fff, sdffdsfdffs, zzz

Идеята е да се намери колко (като цяло число) са редовете, на които има fff и zzz.

А грешката, която дава BASH-а е:

./test: line 5: printf: grep -count -fixed-strings "fff*zzz" logfile.test: invalid number
There are 0 fff along with zzz





Титла: Bash
Публикувано от: VladSun в Sep 03, 2007, 15:21
Забрави кода :)

ПП: И моя грешка - няма нужда от ескейпване на кавичките в printf





Титла: Bash
Публикувано от: tony1975 в Sep 03, 2007, 15:23
#!/bin/bash
CNT='grep -fixed-strings -count "fff*zzz" logfile.test'
printf "There are %d pairs fff along with zzz .\n" $CNT

Това е код-а :)


Титла: Bash
Публикувано от: VladSun в Sep 03, 2007, 15:32
Е ... показах ти няколко грешки, а ти изобщо не си ги оправил ;)

Щом ще учиш bash copy-paste примери не давам ;)
А и защо не ползваш -P опцията, вместо -F ...


Титла: Bash
Публикувано от: tony1975 в Sep 03, 2007, 15:36
VladSun, пробвах по всевъзможни начини - не става и не става.


Титла: Bash
Публикувано от: VladSun в Sep 03, 2007, 15:38
Командата за grep не се изпълнява никъде - използвай `` ...