PDA

Visualizza la versione completa : [bash] esercizio getopts


esoni
09-04-2011, 09:43
salve ragazzi sono alle prese nel capire il getopts che mi servirÓ in un progetto all uni...
per capirlo ho preparato un esercizio semplice
devo scrivere uno script conta
./conta [ -i inizio] [ -e fine ] log1 ... logN
dove log1 ...log n sono file .
lo script se invocato
./conta file 1 ... file n conta il numero complessivo di righe di tutti i file
se invocato con ./conta -i babbo file1 .... file n conta il numero complessivo delle righe che iniziano per babbo
se invocato con ./conta -e leonardo file1....filen conta il numero complessivo delle righe che finiscono per leonardo
se invocato con entrambi gli argomenti conta il numero complessivo delle riche che iniziano con una cerrta parola e finiscono con certa parola esempio:
FILE1 CONTENUTO:
ciao sono dario come stai
tutto bene ....come stai ?
ciao bene te stai?
ciao a letto

FILE2 CONTENUTO:
ciao
stai
come stai
ciao sono mario come stai


se invoco ./conta -i ciao -e stai file1 file 2
mi deve restituire 3

(il difficile Ŕ che l ordine dei parametri iniziali Ŕ irrelevane ovvero,
./conta -i ciao -e stai file1 file 2 Ŕ = ./conta -e stai -i ciao file1 file 2
ed Ŕ proprio questo che mi complica le idee... please help me

bubi1
11-04-2011, 16:24
prova cosi':
#!/bin/bash
while getopts "i:e:" o
do
case $o in
i ) i=$OPTARG;;
e ) e=$OPTARG;;
esac
done
shift $(($OPTIND - 1))
if [ $# -le 0 ]; then
echo "devi specificare almeno un file"
exit
fi
for f in $*;do
if [ ! -f $f ]; then
echo "$f non esiste"
exit
fi
done
if [ ! -n "$i" ] && [ ! -n "$e" ]; then
echo "devi specificare -i o -e"
exit
fi
grep -h "^$i.*$e$" $* |wc -l

Loading