← Back to team overview

sslug-teknik team mailing list archive

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