Portál AbcLinuxu, 8. listopadu 2025 15:19
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:
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
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ě ?
Podle * je to špatně .
a skoro totez http://www.abclinuxu.cz/blog/MaSo/2009/4/vypocet-velikonocni-nedele-v-bashi funguje
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))
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 ?
Tak si tam zkuste dosadit konkrétní čísla a uvidíte.
Hint: (a+b)*c != a+b*c == a+(b*c)
takle rozumim ze a+b to cele * c je jine nez b*c to cele +a
ale se zapisu mi to takto neprijde
Takze nejdrive nasobit a vysledky pak scitat , to s te tim chtel rict ?.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.