Elmagyarázná valaki, hogy ezek mit csinálnak? (Shell script-Bash)
echo -n "Adj meg egy szamot:"
read N
if [ $N -lt 10 ]
then
echo "Ez egyjegyu"
exit
fi
sum=0
while [ $N -gt 0 ]
do
modn=`expr $N \% 10`
sum=`expr $sum + $modn`
N=`expr $N \/ 10`
done
A while kezdetétől nem tudom mik a lépések.
összben tudom, hogy szummáz, de mi a "modn", a "-gt 0", $N\%
N=`expr $N \/ 10`
itt pl. mi a "\/ 10" ?
N=`expr $N \/ 10`
itt pl. mi a "\/ 10" ?
Osztás 10-el, az osztás jel (/) meg escape-elve van.
Ez a számjegyek összegét tárolja el a $sum változóban.
Nem tudom mennyire vagy otthon a programozásban, úgyhogy lehet hogy olyasmit is írok ami felesleges.
A "while" egy ciklust indít, ami addig fut amíg a "while" parancs utáni []-ben megadott feltétel igaz.
Az fontosabb számokat összehasonlító operátorok:
-gt (greater than) >
-lt (less than) <
-ge (greater then or equal) >=
-le (less than or equal) <=
-eq (equal) ==
-ne (not equal) !=
Itt a feltétel hogy (($N > 0)) azaz addig fut amíg az N változó nagyobb mint 0.
A "do" a ciklus kezdetét jelzi, a "done" a ciklus végét.
Ezután értékadások következnek:
modn=`expr $N \% 10`
A `` közti parancs lefut és a visszatérési értéke kerül a modn-be.
Fontos hogy a `` (AltGr+7) egy külső programot indít és annak a kimenetét adja vissza.
Az expr program az átadott matematikai kifejezést (expression) értelemezi és számolja ki majd a kimenetében visszaadja az eredményt. A kifejezés "N % 10" vagy más szóval N mod10 (osztásmaradék). A "\" karakterrel tudod megmondani a shell-nek hogy az azt követő karakter nem bír spciális jelentéssel, a string része. Ezek az un. escape karakterek. Pl. ha dollárjelet akarsz írni \$ kell írnod különben azt hiszi hogy a $ nem egy karakter hanem egy kiírandó változó kezdete. A modn-be az N 10-zel való osztásának maradékát rakjuk, tehát az utolsó számjegyét.
sum=`expr $sum + $modn`
Az expr parancs itt összeadja a két változót, azaz az összeghez hozzáadja mindig a szám utolsó jegyét.
N=`expr $N \/ 10`
Az N számot frissíti, az új szám a "N / 10" osztás eredménye. (Itt is a speciális karakter elé \ jel kerül, jelezve hogy hogy a / nem bír különleges jelentéssel, vagy a string része amit az expr parancs paraméterül kap. A $ nem kap \-t, hiszen speciális jelentése az azt követő változó kiírása.)
Tehát ha a számunk 123-volt, akkor a sum változóba sorban 3+2+1=6 kerül majd kilép a ciklusból.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!