Nowe posty

Autor Wątek: script bash problem z if () fi  (Przeczytany 4284 razy)

sp1lop

  • Gość
script bash problem z if () fi
« dnia: 2007-01-01, 16:04:09 »
Witam prosze o podpowiedz.
Napisałem dla swoich potrzeb skrypt bash, z którym mam problem chodzi mi o ustawienie aby po zgodniości warunku if <-> fi system nie sprawdzał dalszych warunków (if - fi) tylko przeszedł orazu na konic skryptu i wykonał w nim polecenia tam zawarte:

#!/bin/bash
cd /home/ARCHIWUM.log
#
PATH=/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/home
#
MIES=`date -I +%m`
SMIE=`date -I +%b`
ROK=`date -I +%Y`
#
echo " "
echo "Dane startowe dla obcm"
echo "MIES=$MIES, ROK=$ROK"
echo "==========================================="
echo " Dane dekodowane dla obcm"

# petla zmiany nazwy miesiaca
if [[ $MIES = "01" ]]; then
    MIES="12"
    ROK="2006"
echo "MIES=$MIES, ROK=$ROK"
echo "mkdir /home/ARCHIWUM.log/obcm/Archiwum/Rok-$ROK/$MIES.$ROK "
fi

if [[ $MIES = "02" ]]; then
    MIES="01"
echo "MIES=$MIES, ROK=$ROK"
echo "mkdir /home/ARCHIWUM.log/obcm/Archiwum/Rok-$ROK "
echo "mkdir /home/ARCHIWUM.log/obcm/Archiwum/Rok-$ROK/$MIES.$ROK "
fi

if [[ $MIES = "03" ]]; then
    MIES="02"
echo "MIES=$MIES, ROK=$ROK"
echo "mkdir /home/ARCHIWUM.log/obcm/Archiwum/Rok-$ROK/$MIES.$ROK "
fi

if [[ $MIES = "04" ]]; then
    MIES="03"
echo "MIES=$MIES, ROK=$ROK"
echo "mkdir /home/ARCHIWUM.log/obcm/Archiwum/Rok-$ROK/$MIES.$ROK "
fi

if [[ $MIES = "05" ]]; then
    MIES="04"
echo "MIES=$MIES, SMIE=$SMIE, ROK=$ROK"
echo "mkdir /home/ARCHIWUM.log/obcm/Archiwum/Rok-$ROK/$MIES.$ROK "
fi

if [[ $MIES = "06" ]]; then
    MIES="05"
echo "MIES=$MIES, ROK=$ROK"
echo "mkdir /home/ARCHIWUM.log/obcm/Archiwum/Rok-$ROK/$MIES.$ROK "
fi

if [[ $MIES = "07" ]]; then
    MIES="06"
echo "MIES=$MIES, ROK=$ROK"
echo "mkdir /home/ARCHIWUM.log/obcm/Archiwum/Rok-$ROK/$MIES.$ROK "
fi

if [[ $MIES = "08" ]]; then
    MIES="07"
echo "MIES=$MIES, ROK=$ROK"
echo "mkdir /home/ARCHIWUM.log/obcm/Archiwum/Rok-$ROK/$MIES.$ROK "
fi

if [[ $MIES = "09" ]]; then
    MIES="08"
echo "MIES=$MIES, ROK=$ROK"
echo "mkdir /home/ARCHIWUM.log/obcm/Archiwum/Rok-$ROK/$MIES.$ROK "
fi

if [[ $MIES = "10" ]]; then
    MIES="09"
echo "MIES=$MIES, ROK=$ROK"
echo "mkdir /home/ARCHIWUM.log/obcm/Archiwum/Rok-$ROK/$MIES.$ROK "
fi

if [[ $MIES = "11" ]]; then
    MIES="10"
echo "MIES=$MIES, ROK=$ROK"
echo "mkdir /home/ARCHIWUM.log/obcm/Archiwum/Rok-$ROK/$MIES.$ROK "
fi

if [[ $MIES = "12" ]]; then
    MIES="11"
echo "MIES=$MIES, ROK=$ROK"
echo "mkdir /home/ARCHIWUM.log/obcm/Archiwum/Rok-$ROK/$MIES.$ROK "
fi

sleep 5
# DO WYKONANIA końcowe opcje
echo "cp -f /hamradio/obcm/log/log*$MIES.bcm /home/ARCHIWUM.log/obcm/Archiwum "
echo "gzip /hamradio/obcm/log/log*$MIES*.bcm "
echo "mv -f /hamradio/obcm/log/*.gz /home/ARCHIWUM.log/obcm/Archiwum/Rok-$ROK/$MIES.$ROK "
#End skrypt

Dziekuje za podpowiedz.

chmooreck

  • Gość
script bash problem z if () fi
« Odpowiedź #1 dnia: 2007-01-01, 19:43:33 »
sugestia 1: zainteresuj się poleceniem case

sugestia 2: być może wystarczyłoby MIES = (MIES + 10) % 12 + 1

sp1lop

  • Gość
script bash problem z if () fi
« Odpowiedź #2 dnia: 2007-01-02, 12:31:54 »
2007-01-01 19:43:33 chmooreck napisał:

> sugestia 1: zainteresuj się poleceniem case
 >
 > sugestia 2: być może wystarczyłoby MIES = (MIES + 10) % 12 + 1
 >

Nie działa błąd dla sugestii 2 chyba, że coś źle wpisałem:

./test: line 22: fg: no job control
a linia 22 to:   MIES=(MIES + 10) % 12 + 1

# petla zmiany nazwy miesiaca
if [[ $MIES = "01" ]]; then
    MIES=(MIES + 10) % 12 + 1
#    MIES="12"
    ROK="2006"
echo "MIES=$MIES, ROK=$ROK, MIESIAC=$MIESIAC"

A z sugestią 1:  case to już gorzej musiałbym się nauczyć.

xavery

  • Gość
script bash problem z if () fi
« Odpowiedź #3 dnia: 2007-01-02, 12:42:40 »
> # petla zmiany nazwy miesiaca
 > if [[ $MIES = "01" ]]; then
 >     MIES=(MIES + 10) % 12 + 1

Takie rzeczy musisz wyliczyc np w ten sposob:

MIES=$(((MIES + 10) % 12 + 1))

Albo inaczej za pomoca narzedzi expr lub let.

 > A z sugestią 1:  case to już gorzej musiałbym się nauczyć.

No to sugestia #3: uzyj konstrukcji if; elif; fi dziala właściwie tak samo jak case ale moze byc dla niektórych ludzi bardziej intuicyjna

chmooreck

  • Gość
script bash problem z if () fi
« Odpowiedź #4 dnia: 2007-01-02, 13:51:33 »
2007-01-02 12:31:54 sp1lop napisał:

 > Nie działa błąd dla sugestii 2 chyba, że coś źle wpisałem:

podałem tylko algorytm, nie implementację...

 > A z sugestią 1:  case to już gorzej musiałbym się nauczyć.

to nie takie trudne i w dodatku nie boli ;-)
czyżby ci się nie chciało ? (jeśli tak, to dlaczego mi się ma chcieć ci pomagać ? )


sp1lop

  • Gość
script bash problem z if () fi
« Odpowiedź #5 dnia: 2007-01-03, 00:48:01 »
2007-01-01 16:04:09 sp1lop napisał:

> Witam prosze o podpowiedz.
 > Napisałem dla swoich potrzeb skrypt bash, z którym mam problem chodzi mi o ustawienie aby po
 > zgodniości warunku if <-> fi system nie sprawdzał dalszych warunków (if - fi) tylko
 > przeszedł orazu na konic skryptu i wykonał w nim polecenia tam zawarte:
 >
 > #!/bin/bash
 > cd /home/ARCHIWUM.log
 
[wycięte]
 
 > # petla zmiany nazwy miesiaca
 > if [[ $MIES = "01" ]]; then
 >     MIES="12"
 >     ROK="2006"
 > echo "MIES=$MIES, ROK=$ROK"

[wyciete]

 > sleep 5
 > # DO WYKONANIA końcowe opcje
 > echo "cp -f /hamradio/obcm/log/log*$MIES.bcm /home/ARCHIWUM.log/obcm/Archiwum "
 > echo "gzip /hamradio/obcm/log/log*$MIES*.bcm "
 > echo "mv -f /hamradio/obcm/log/*.gz /home/ARCHIWUM.log/obcm/Archiwum/Rok-$ROK/$MIES.$ROK
 > "
 > #End skrypt

Dziękuje za podpowiedzi ale problem rozwiązałem w troche inny sposób
zrobiłem tak:

if [[ $SMIE = "Jan" ]]; then
    SLOWNIEMIE="Dec"
    MIESIAC="12"
    ROK=`expr $ROK - 1`

I już mam po problemie, jeszcze raz dziekuje za podpowiedzi, dały mi
troche do myślenia, ale moje 65 lat to juz mózg nie pracuje tak jak kiedyś..

Pozdrawiam i Wszystkiego Najlepszego w Nowym Roku 2007

.