Bashscript geeft geen goede output

Pagina: 1
Acties:

  • Speedener
  • Registratie: September 2000
  • Laatst online: 03-02 11:42
Ik probeer een sh scriptje te schrijven dat het aantal spammailtjes wat binnenkomt per dag te telt.

Ik ben nu al een tijdje aan het hannissen met een script wat eigenlijk heel makkelijk zou moeten zijn.

Mijn script ziet er als volgt uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/sh
#
# countspam.sh
#
# Variables
# ---------
DATE=`/bin/date +'%b %d'`
#
echo $DATE # Output: Aug 20
/usr/bin/cat /var/log/amavisd | grep '$DATE'  | grep 'Passed SPAM, \[' | wc -l
/usr/bin/cat /var/log/amavisd | grep 'Aug 20' | grep 'Passed SPAM, \[' | wc -l
#
# End of File

De output van het script is:
code:
1
2
3
4
# ./countspam.sh
Aug 20
0
310


Zoals je ziet is de output van de regel waar ik $DATE gebruik: 0

Terwijl die regel als het geparsed is exact gelijk is als de 'static' regel.
Dat heb ik gecontroleerd door:
code:
1
echo "/usr/bin/cat /var/log/amavisd | grep '$DATE'  | grep 'Passed SPAM, \[' | wc -l"

Output:
code:
1
/usr/bin/cat /var/log/amavisd | grep 'Aug 20' | grep 'Passed SPAM, \[' | wc -l


Wat zie ik over het hoofd? :?

  • _JGC_
  • Registratie: Juli 2000
  • Laatst online: 23:43
code:
1
2
3
4
5
6
7
$var=10
echo "${var}"
echo '${var}'

geeft als output:
10
${var}


Let op enkele en dubbele quotes ;)

  • Speedener
  • Registratie: September 2000
  • Laatst online: 03-02 11:42
Oja net als bij PHP dus. Maar hoe kan ik dan wel enkele quotes gebruiken. Dubbele quotes werken namelijk niet bij grep.

  • stfn345
  • Registratie: Januari 2000
  • Laatst online: 05-02 10:55
escapen..

  • Speedener
  • Registratie: September 2000
  • Laatst online: 03-02 11:42
Daar was ik al mee begonnen maar daar komt niet het goede resultaat uit.

Input:
code:
1
/usr/bin/cat /var/log/amavisd | grep \'$DATE\' | grep 'Passed SPAM, \[' | wc -l

Output:
code:
1
grep: 20': No such file or directory


Ook dit werkt niet:
Input:
code:
1
/usr/bin/cat /var/log/amavisd | grep '"$DATE"' | grep 'Passed SPAM, \[' | wc -l

Ouput:
code:
1
0


Ik ben beetje de weg kwijt 8)7

[ Voor 7% gewijzigd door Speedener op 20-08-2006 12:57 ]


  • Sjonny
  • Registratie: Maart 2001
  • Laatst online: 29-01 22:23

Sjonny

Fratser

wat zegt _JGC_ nou? let op je single en enkele quotes!

DATE="Aug 20"
grep "$DATE" /file

alles wat tussen single quotes staat wordt letterlijk opgevat, tussen dubbele wordt geparsed, maar als 1 enkel argument aan grep gegeven.

The problem is in the part of your brain that handles intelligence.


  • Speedener
  • Registratie: September 2000
  • Laatst online: 03-02 11:42
Bedankt, ik dacht veels te moeilijk.

code:
1
/usr/bin/cat /var/log/amavisd | grep "$DATE"  | grep 'Passed SPAM, \[' | wc -l
Pagina: 1