Portál AbcLinuxu, 9. května 2025 00:25
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 FunctionTo 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 Ifsprá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; fiNN
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.