Izračunavanje matematičnih izrazov v skriptnem jeziku Shell - V. del
Ljudje bi se počutili prijetno, če bi razumeli Shell-ove skripte in jih tekoče pisali, kot je treba. To je zadnja objava te vadnice, kjer bomo izvajali nekoliko zapletene matematične operacije s pomočjo skriptnega jezika. Zadnji štirje članki serije Shell Scripting, ki so kronološko.
- Razumevanje osnovnih nasvetov za skriptni jezik lupine Linux - I. del
- 5 skriptov lupine za začetnike Linuxa, ki se učijo programiranja lupine - II. del
- Jadranje po svetu Linux BASH skript - III. del
- Matematični vidik programiranja lupine Linuxa - IV. del
Začnimo s Fibonaccijevo serijo
Vzorec števil, pri čemer je vsako število vsota dveh predhodnih števil. Serija je 0, 1, 1, 2, 3, 5, 8 …… Po definiciji sta prvi dve številki v zaporedju Fibonccai 0 in 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
Poznate dejstvo, da računalnik razume samo v binarni obliki, to je '0' in '1' in večina nas je uživala pri učenju pretvorbe decimalnega v binarno. Kaj pa napisati preprost skript za to zapleteno operacijo.
#!/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
Opomba: Zgornji skript sprejema vnos med izvajanjem, kar očitno pomaga.
No, vgrajeni ukaz "bc" lahko pretvori decimalno v binarno v skriptu z eno vrstico. Zaženi na svojem terminalu.
echo "obase=2; NUM" | bc
Zamenjajte 'NUM' s številko, ki jo želite pretvoriti iz decimalne v binarno. Na primer
echo "obase=2; 121" | bc 1111001
Nato bomo napisali skript, ki deluje ravno nasprotno od zgornjega skripta, Pretvarjanje binarnih vrednosti v decimalke.
#!/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
Opomba: Zgornjo funkcijo lahko v terminalu izvedete z ukazom "bc" kot.
echo "ibase=2; BINARY" | bc
Zamenjajte "BINARY" z binarno številko, tj.
echo "ibase=2; 11010101" | bc 213
Podobno lahko sami zapišete pretvorbo iz osmiške, šestnajstiške v decimalno in obratno. Doseganje zgornjega rezultata v terminalu z uporabo ukaza 'bc' je.
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
Nekateri pogosti numerični testi, ki se uporabljajo v skriptnem jeziku lupine z opisom, so.
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
To je vse za ta članek in serijo člankov. To je zadnji članek Shell Script Series in to ne pomeni, da noben članek o skriptnem jeziku ne bo spet tukaj, pomeni samo, da je vadnica skriptov o lupini končana in kadar koli najdemo zanimivo temo, ki jo je vredno vedeti, ali poizvedbo vaših ljudi, z veseljem bomo nadaljevali serijo od tu.
Ostanite zdravi, nastavljeni in povezani s Tecmintom. Kmalu pridem z drugo zanimivo temo, ljudje boste radi brali. Delite svoje dragocene misli v oddelku za komentarje.