← Back to team overview

sslug-teknik team mailing list archive

Shell-magi

 

Jeg har et problem med at et shell-script ikke afslutter når det skal.
 
Hvis der i nedenstående uddrag opstår en fejl skal scriptet afslutte men
det gør det ikke. Linien med echo til sidst bliver afviklet lige meget
hvad.
---
if dd if=/dev/scd0 of=/dev/null bs=1 count=1 ; then
  ./cd-info | {
    while read line
    do
      count=$[$count + 1]
      case $count in
        2) CD_HOST="$line";;
        3) CD_DATE=`echo "${line}"  | cut -d'.' -f1`;;
      esac
    done
 
    if [ "$CD_HOST" != "$HOSTNAME" ] || [ "$CD_DATE" != "$CD"  ]; then
      error_mail "FEJL" "$SUBJECT" "$MAILTO"
      exit 1
    fi
  }
fi
echo "Der tages backup $CD, $CD_DATE"
---
 
Problemet jeg er løbet ind i er nok det der er omtalt i E4 i bash faq.
 
Mit problem er bare, hvordan kommer jeg uden om denne ”feature”?
 
Det er meningen at backuppen ikke skal køre hvis der opstår en fejl.
 
Det var også svært at sikre at CD_HOST etc. blev gemt når man forlod
løkken, men det sikrede { } rundt om while-løkken. Hvordan man løser det
her ved jeg virkeligt ikke.
 
Håber der sidder en script-haj der har prøvet noget lign og løst det.
Prøvede at sætte ”backup = ./cd-info….” og så teste på backup. Men den
ser ud til ikke at være sat.
 
Hilsen
 
Jan Andersen

Follow ups