Vyhledávání na webu

Výpočet matematických výrazů ve skriptovacím jazyce Shell – část V


Vy, lidé, byste se cítili pohodlně, rozuměli Shell skriptům a psali je plynule, podle vašich potřeb. Toto je poslední příspěvek této série tutoriálů, kde budeme provádět trochu složité Matematické operace pomocí skriptovacího jazyka. Poslední čtyři články ze série Shell Scripting, které jsou chronologicky.

  1. Pochopte základní tipy pro skriptovací jazyk Linux Shell – část I
  2. 5 skriptů Shell pro nováčky v Linuxu, aby se naučili programování Shell – část II
  3. Plavba světem Linuxu BASH Scripting – část III
  4. Matematický aspekt programování Linux Shell – část IV

Začněme sérií Fibonacci

Vzor čísel, kde každé číslo je součtem dvou předcházejících čísel. Série je 0,1, 1, 2, 3, 5, 8…… Podle definice jsou první dvě čísla v posloupnosti Fibonccai 0 a 1.

Skript 1: Fibonacci.sh
#!/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
Ukázkový výstup
[root@tecmint ~]# chmod 755 Fibonacci.sh
[root@tecmint ~]# ./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

Stáhněte si Fibonacci.sh

Jste obeznámeni se skutečností, že počítač rozumí pouze v binárním formátu, tj. '0' a '1' a většina z nás se ráda naučila převod DesetinnéBinární. Co takhle napsat jednoduchý skript pro tuto složitou operaci.

Skript 2: Decimal2Binary.sh
#!/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 $@; 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
Ukázkový výstup
[root@tecmint ~]# chmod 755 Decimal2Binary.sh
[root@tecmint ~]# ./Decimal2Binary.sh 1121

Decimal		Binary 
1121      	10001100001

Poznámka: Výše uvedený skript přijímá vstup za běhu, což je samozřejmě pomůcka.

Stáhněte si Decimal2Binary.sh

Vestavěný příkaz „bc“ dokáže převést desítkové na binární ve skriptu s jedním řádkem. Utíkej, u svého terminálu.

[root@tecmint ~]# echo "obase=2; NUM" | bc

Nahraďte „NUM“ číslem, které chcete převést z desítkového na binární. Například,

[root@tecmint ~]# echo "obase=2; 121" | bc 

1111001

Dále budeme psát skript, který funguje přesně opačně než výše uvedený skript, Převod binárních hodnot na desítkové.

Skript 3: Binary2Decimal.sh
#!/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
Ukázkový výstup
[root@tecmint ~]# chmod 755 Binary2Decimal.sh
[root@tecmint ~]# ./Binary2Decimal.sh

Enter a number : 
11 
3

Poznámka: Výše uvedenou funkci lze provést v terminálu pomocí příkazu „bc“ jako.

[root@tecmint ~]# echo "ibase=2; BINARY" | bc

Nahraďte „BINARY“ binárním číslem, tj.

[root@tecmint ~]# echo "ibase=2; 11010101" | bc 

213

Stáhněte si Binary2Decimal.sh

Podobně můžete sami napsat převod z osmičkové, šestnáctkové do desítkové a naopak. Dosažení výše uvedeného výsledku v terminálu pomocí příkazu „bc“ je.

Desetinné až osmičkové
[root@tecmint ~]# echo "obase=8; Decimal" | bc
Desetinné až šestnáctkové
[root@tecmint ~]# echo "obase=16; Decimal" | bc
Osmičková až desetinná
[root@tecmint ~]# echo "ibase=8; Octal" | bc
Hexadecimální až desetinné
[root@tecmint ~]# echo "ibase=16; Hexadecimal" | bc
Binární až osmičkové
[root@tecmint ~]# echo "ibase=2;obase=8 Binary" | bc

Některé z testů Common Numeric používaných ve skriptovacím jazyce shellu s popisem jsou.

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 pro tento článek a sérii článků vše. Toto je poslední článek Shell Script Series a neznamená to, že zde znovu nebude žádný článek o skriptovacím jazyce, znamená to pouze, že kurz skriptování shellu skončil a kdykoli najdeme zajímavé téma, které stojí za to znát. nebo dotaz od vás, rádi budeme pokračovat v seriálu odtud.

Zůstaňte zdraví, naladěni a připojeni k Tecmint. Velmi brzy přijdu s dalším zajímavým tématem, které si lidé rádi přečtou. Podělte se o své cenné myšlenky v sekci komentářů.