Matemaatiliste avaldiste arvutamine shelliskripti keeles - V osa
Te, inimesed, tunneksite end mugavalt, mõistaksite Shell-skripte ja kirjutaksite neid ladusalt, vastavalt teie vajadustele. See on selle õpetussarja viimane postitus, kus viime läbi veidi keerukaid matemaatilisi toiminguid, kasutades skriptikeelt. Shell Scripting seeria viimased neli artiklit, mis on kronoloogiliselt.
- Mõistke põhilisi Linuxi šelli skriptikeele näpunäiteid - I osa
- 5 Shelli skripti Linuxi algajatele, et õppida Shelli programmeerimist - II osa
- Purjetamine läbi Linuxi BASH-skriptide maailma - III osa
- Linuxi kesta programmeerimise matemaatiline aspekt - IV osa
Alustame Fibonacci seeriast
Numbrite muster, kus iga number on kahe eelneva arvu summa. Seeria on 0, 1, 1, 2, 3, 5, 8 ... ... Definitsiooni järgi on Fibonccai järjestuse kaks esimest numbrit 0 ja 1.
#!/bin/bash echo "How many numbers do you want of Fibonacci series ?" read total x=0 y=1 i=2 echo "Fibonacci Series up to $total terms :: " echo "$x" echo "$y" while [ $i -lt $total ] do i=`expr $i + 1 ` z=`expr $x + $y ` echo "$z" x=$y y=$z done
chmod 755 Fibonacci.sh ./Fibonacci.sh How many numbers do you want of Fibonacci series ? 10 Fibonacci Series up to 10 terms :: 0 1 1 2 3 5 8 13 21 34
Teile on tuttav asjaolu, et arvuti saab aru ainult binaarses vormingus, st '0' ja '1' ning enamik meist on nautinud kümnendkoha teisendamist binaarseks. Kuidas oleks selle keeruka toimingu jaoks lihtsa skripti kirjutamine.
#!/bin/bash for ((i=32;i>=0;i--)); do r=$(( 2**$i)) Probablity+=( $r ) done [[ $# -eq 0 ]] &echo -en "Decimal\t\tBinary\n" for input_int in [email ; do s=0 test ${#input_int} -gt 11 &printf "%-10s\t" "$input_int" for n in ${Probablity[@]}; do if [[ $input_int -lt ${n} ]]; then [[ $s = 1 ]] && printf "%d" 0 else printf "%d" 1 ; s=1 input_int=$(( $input_int - ${n} )) fi done echo -e done
chmod 755 Decimal2Binary.sh ./Decimal2Binary.sh 1121 Decimal Binary 1121 10001100001
Märkus: ülaltoodud skript aktsepteerib sisendit käitusajal, mis on ilmselgelt abivahend.
Hästi sisseehitatud käsk bc saab teisendada kümnendkoha binaarseks ühe rea skriptis. Jookse oma terminalis.
echo "obase=2; NUM" | bc
Asendage „NUM“ numbriga, mille soovite teisendada kümnendkohast binaarseks. Näiteks,
echo "obase=2; 121" | bc 1111001
Järgmisena kirjutame skripti, mis toimib ülaltoodud skripti vastas, binaarväärtuste teisendamine kümnendarvuks.
#!/bin/bash echo "Enter a number :" read Binary if [ $Binary -eq 0 ] then echo "Enter a valid number " else while [ $Binary -ne 0 ] do Bnumber=$Binary Decimal=0 power=1 while [ $Binary -ne 0 ] do rem=$(expr $Binary % 10 ) Decimal=$((Decimal+(rem*power))) power=$((power*2)) Binary=$(expr $Binary / 10) done echo " $Decimal" done fi
chmod 755 Binary2Decimal.sh ./Binary2Decimal.sh Enter a number : 11 3
Märkus: ülaltoodud funktsiooni saab terminalis täita käsuga ‘bc’ as.
echo "ibase=2; BINARY" | bc
Asendage “BINARY” kahendarvuga, st
echo "ibase=2; 11010101" | bc 213
Samamoodi võite ise kirjutada teisenduse kaheksandast, kuueteistkümnendkohast kümnendkohani ja vastupidi. Ülaltoodud tulemuse täitmine terminalis, kasutades käsku ‘bc’, on.
echo "obase=8; Decimal" | bc
echo "obase=16; Decimal" | bc
echo "ibase=8; Octal" | bc
echo "ibase=16; Hexadecimal" | bc
echo "ibase=2;obase=8 Binary" | bc
Mõned shelliskriptide keeles koos kirjeldusega kasutatavad levinumad numbrilised testid on.
Test : INTEGER1 -eq INTEGER2 Meaning: INTEGER1 is equal to INTEGER2
Test : INTEGER1 -ge INTEGER2 Meaning: INTEGER1 is greater than or equal to INTEGER2
Test: INTEGER1 -gt INTEGER2 Meaning: INTEGER1 is greater than INTEGER2
Test:INTEGER1 -le INTEGER2 Meaning: INTEGER1 is less than or equal to INTEGER2
Test: INTEGER1 -lt INTEGER2 Meaning: INTEGER1 is less than INTEGER2
Test: INTEGER1 -ne INTEGER2 Meaning: INTEGER1 is not equal to INTEGER2
See on kõik selle artikli ja artikliseeria puhul. See on Shelli skriptide seeria viimane artikkel ja see ei tähenda, et ühtegi artiklit skriptikeele kohta siin enam pole, see tähendab ainult seda, et shelliskriptide õpetus on läbi ja alati, kui leiame huvitava teema, mida tasub teada, või päringu teilt, inimesed, meil on hea meel jätkata sarja siit.
Olge terve, häälestatud ja Tecmintiga ühendatud. Üsna varsti tulen uue huvitava teemaga, teile inimestele meeldib lugeda. Jagage oma väärtuslikke mõtteid jaotises Kommentaarid.