sslug-teknik team mailing list archive
-
sslug-teknik team
-
Mailing list archive
-
Message #65730
Re: BASH hjælp...
On Mon, Aug 04, 2003 at 13:09:16 +0200, Thomas Rokamp wrote:
> Hejsa!
>
> Jeg har kastet mig ud i noget bash-scripting, og er nu rendt ind i et par
> problemer...
>
> 1:
> Jeg vil gerne læse en configurationsfil i stil med
> ---
> # Kommentar
> conf1=noget
> conf2=noget andet
> ---
overvej evt. at kombinere med awk.
eller se på afsnittet "Parameter Expansion" i bash(1) manualen
det kan sikkert gøres uden awk.
f.eks. ${vline%%#*} vil returnere en tom streng hvis linie starter med "#"
så du kan brgygge noget sammen i stil med:
line="${line%%#*}"
if [ ! -z "${line}" ] ; then
var="${line%%=*}"
val="${line##*=}"
case $var in
conf1) ... ;;
conf2) ... ;;
*) ;; # default action
esac
fi
>
> Jeg kan fint læse filen ind med en for løkke og awk:
> for $line in awk '{print $1}' < data/submit.txt
> do
> echo $line
> done
>
> Men jeg vil gerne kunne skille linjer begyndende med "#" ud (kommentarer) og
> også gerne blanke linjer.
> Det ville også være rart med disse "[***]" for at kunne sektionsopdele.
>
> Noget kommando der kan hjælpe her?
hvis du bruger AWK, så kan du lave mere avanceret strengmanipulationer,
problemer er dog at overføre data til shellscriptet.
Dette kan evt. gøres med at gemme resultat fra awk som
et temporær shellscript som så efterfølgende udføres fra shellscriptet:
gawk -f mitprogram.awk < data/submit.txt > /tmp/temptemp.sh
source /tmp/temptemp.sh
>
> 2:
> Jeg har behov for at dele en streng op i mindre bidder.
> Ex:
>
> streng=test1|test2|test3|test4
>
> Ønsket er et output i stil med
> test1
> test2
> test3
> test4
brug parameter expansion i stil med ovenfor.
vals="${line##*=}"
while [ ! -z "$vals" ] ; do
echo "${vals%%|*}"
oldval="${vals#*|}"
if [ "$oldval" = "$vals" ] ; then
vals="";
else
vals="$oldval"
fi
done
--
mvh Frank Damgaard |
References