Portál AbcLinuxu, 9. května 2025 00:25

Dotaz: Bash IF

pepe_ avatar 16.4.2011 15:22 pepe_ | skóre: 48
Bash IF
Přečteno: 678×
Odpovědět | Admin

Snažim se přepsat script kterej je původně pro visualbasic do bashe

 

Original VB :

Public Function Velikonoce(rok as integer) As Date
    Dim a, b, c
    Dim m, n
    Dim d, e, U
    Dim V
    a = rok Mod 19
    b = rok Mod 4
    c = rok Mod 7
    m = 24
    n = 5
    d = (19 * a + m) Mod 30
    e = (n + 2 * b + 4 * c + 6 * d) Mod 7
    U = d + e - 9
    If U = 25 And d = 28 And e = 6 And a > 10 Then
        U = 18
        V = 4
    ElseIf U >= 1 And U <= 25 Then
        V = 4
    ElseIf U > 25 Then
        U = U - 7
        V = 4
    Else
        U = 22 + d + e
        V = 3
    End If
    Velikonoce = DateSerial(rok, V, U)    
 End Function
To co přepisuju :
rok=$1
a=$((rok%19))
b=$((rok%4))
c=$((rok%7))
m=24
n=5
da=$((19*a))
db=$((da+m))
d=$((db%30))
ea=$((n+2))
eb=$((ea*b))
ec=$((eb+4))
ed=$((ec*c))
ee=$((ed+6))
ef=$((ee*d))
e=$((ef%7))
ua=$((d+e))
U=$((ua-9))
nevim ale jak správně zadat podmínky IF
If U = 25 And d = 28 And e = 6 And a > 10 Then
        U = 18
        V = 4
    ElseIf U >= 1 And U <= 25 Then
        V = 4
    ElseIf U > 25 Then
        U = U - 7
        V = 4
    Else
        U = 22 + d + e
        V = 3
    End If
správně do bashe . Jak se dávají za sebe ? Děkuji

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

16.4.2011 16:33 NN
Rozbalit Rozbalit vše Re: Bash IF
Odpovědět | | Sbalit | Link | Blokovat | Admin
if [ $U -eq 25 -a $d -eq 28 -a $e -eq 6 -a $a -gt 10 ]; then
        U=18;
        V=4;
elif [ $U -ge 1 -a $U -le 25 ]; then
        V=4;
elif [ $V > 25 ]; then
                U=$(($U - 7));
                V=4;
else
        U=$((22 + $d + $e));
        V=3;
fi
NN
pepe_ avatar 16.4.2011 18:23 pepe_ | skóre: 48
Rozbalit Rozbalit vše Re: Bash IF
Odpovědět | | Sbalit | Link | Blokovat | Admin

Děkuju za ukázku IF , zde je script na výpočet velikonoc ale mam dojem že nepracuje dobře.

 

#!/bin/bash
rok=$1
if [ $rok -lt 1897 ] || [ $rok -gt 2039 ] ; then
echo "Zadejte rok  1897 - 2039 "
exit 0
fi
a=$((rok%19))
b=$((rok%4))
c=$((rok%7))
m=24
n=5
da=$((19*a))
db=$((da+m))
d=$((db%30))
ea=$((n+2))
eb=$((ea*b))
ec=$((eb+4))
ed=$((ec*c))
ee=$((ed+6))
ef=$((ee*d))
e=$((ef%7))
ua=$((d+e))
U=$((ua-9))
if [ $U -eq 25 -a $d -eq 28 -a $e -eq 6 -a $a -gt 10 ]; then
        U=18;
        V=4;
elif [ $U -ge 1 -a $U -le 25 ]; then
        V=4;
elif [ $V > 25 ]; then
                U=$(($U - 7));
                V=4;
else
        U=$((22 + $d + $e));
        V=3;
fi
echo "Velikonoce budou dne $U.$V $rok"

 

Vycházel sem ze stránek WIKI .

Kde se dá ověřit že to funguje správně ?

pepe_ avatar 16.4.2011 18:26 pepe_ | skóre: 48
Rozbalit Rozbalit vše Re: Bash IF

Podle * je to špatně .

17.4.2011 12:25 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Bash IF

Srovnejte

ea=$((n+2))
eb=$((ea*b))
ec=$((eb+4))
ed=$((ec*c))
ee=$((ed+6))
ef=$((ee*d))
e=$((ef%7))

vs.

e=$((($n+2*$b+4*$c+6*$d)%7))
pepe_ avatar 17.4.2011 15:58 pepe_ | skóre: 48
Rozbalit Rozbalit vše Re: Bash IF

no srovnavam ale nejak mi unika chyba , MNE TO PRIJDE STEJNE ALE JINAK ZAPSANE.

Asi sem slepej ale prijde mi to principialne identicke.

V cem je teda rozdil ?

17.4.2011 16:41 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Bash IF

Tak si tam zkuste dosadit konkrétní čísla a uvidíte.

Hint: (a+b)*c != a+b*c == a+(b*c)

pepe_ avatar 17.4.2011 17:11 pepe_ | skóre: 48
Rozbalit Rozbalit vše Re: Bash IF

takle rozumim ze a+b to cele * c je jine nez b*c to cele +a

ale se zapisu mi to takto neprijde

17.4.2011 17:21 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Bash IF
To je váš problém, že vám to nepřijde. Takhle to prostě je a učí se to už na prvním stupni základní školy.
pepe_ avatar 17.4.2011 17:28 pepe_ | skóre: 48
Rozbalit Rozbalit vše Re: Bash IF

Takze nejdrive nasobit a vysledky pak scitat , to s te tim chtel rict ?.

17.4.2011 17:30 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Bash IF
Samozřejmě. Stejně jako kdybyste to počítal ručně podle vzorečku. Nebo to prostě nechte spočítat bash, stejně jako autor původního skriptu.
pepe_ avatar 17.4.2011 17:31 pepe_ | skóre: 48
Rozbalit Rozbalit vše Re: Bash IF

Ono učit se a hledat chybu je užitečnější než použít cizí výtvor.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.