GNU/Linux >> Znalost Linux >  >> Linux

Bash Beginner Series #5:Použití aritmetických operátorů ve skriptování Bash

Pojďme udělat trochu Bash Math!

Při psaní bash skriptů se často přistihnete, že budete chtít zjistit výsledek aritmetického výpočtu, abyste určili zbývající místo na disku, velikosti souborů, data vypršení hesla, počet hostitelů, šířku pásma sítě atd.

V této kapitole série bash pro začátečníky se naučíte používat bash operátory k provádění různých aritmetických výpočtů.

Pro osvěžení paměti jsou zde aritmetické operátory v bash:

Operátor Popis
+ Dodatek
- Odčítání
* Násobení
/ Dělení celým číslem (bez desetinných čísel)
% Dělení modulu (poskytuje pouze zbytek)
** umocnění (x na mocninu y)

Provádění sčítání a odčítání ve skriptech bash

Vytvořme bash skript s názvem addition.sh to jednoduše přidá dvě velikosti souboru (v bajtech) a zobrazí výstup.

Už musíte být obeznámeni s argumenty v bash skriptech. Doufám, že také znáte příkazy cut a du.

Příkaz du vám udává velikost souboru podél . Výstup má velikost souboru i název souboru. Zde se příkaz vyjmout používá k extrahování prvního sloupce (tj. velikosti souboru) z výstupu. Výstup příkazu du je předán příkazu cut pomocí přesměrování potrubí.

Zde je skript:

#!/bin/bash

fs1=$(du -b $1 | cut -f1)
fs2=$(du -b $2 | cut -f1)

echo "File size of $1 is: $fs1"
echo "File size of $2 is: $fs2"

total=$(($fs1 + $fs2))

echo "Total size is: $total"

Všimněte si, že skriptu předáte dva názvy souborů jako argumenty. Například zde spustím skript a předám dva soubory /etc/passwd a /etc/group jako argumenty:

[email protected]:~/scripts$ ./addition.sh /etc/passwd /etc/group
File size of /etc/passwd is: 2795
File size of /etc/group is: 1065
Total size is: 3860

Nejdůležitější řádek v addition.sh skript je:

total=$(($fs1 + $fs2))

Kde jste pomocí operátoru + přidali dvě čísla $fs1 a $fs2. Všimněte si také, že pro vyhodnocení jakéhokoli aritmetického výrazu musíte mezi dvojité závorky uzavřít následovně:

$((arithmetic-expression))

Pro odečítání můžete také použít operátor mínus (-). Například hodnota dílčí proměnné v následujícím příkazu bude mít sedm:

sub=$((10-3))

Provádění násobení a dělení ve skriptech bash

Vytvořme bash skript s názvem giga2mega.sh který převede gigabajty (GB) na megabajty (MB):

#!/bin/bash

GIGA=$1
MEGA=$(($GIGA * 1024))

echo "$GIGA GB is equal to $MEGA MB"

Nyní spustíme skript, abychom zjistili, kolik megabajtů je ve čtyřech gigabajtech:

[email protected]:~/scripts$ ./giga2mega.sh 4
4 GB is equal to 4096 MB

Zde jsem pomocí operátoru násobení (*) vynásobil počet gigabajtů číslem 1024, abych získal ekvivalent megabajtů:

MEGA=$(($GIGA * 1024))

Do tohoto skriptu lze snadno přidat další funkce pro převod gigabajtů (GB) na kilobajty (KB):

KILO=$(($GIGA * 1024 * 1024))

Nechám vás převést gigabajty na bajty jako praktické cvičení!

K dělení dvou čísel můžete také použít operátor dělení (/). Například hodnota proměnné div v následujícím příkazu bude vyhodnocena jako pět:

div=$((20 / 4))

Všimněte si, že se jedná o celočíselné dělení, takže všechny zlomky jsou ztraceny. Pokud například vydělíte 5 2, dostanete 2, což je samozřejmě nesprávné:

[email protected]:~/scripts$ div=$((5 / 2))
[email protected]:~/scripts$ echo $div
2

Chcete-li získat desítkový výstup; můžete použít bc příkaz. Například pro dělení 5 krát 2 pomocí bc můžete použít následující příkaz:

echo "5/2" | bc -l
2.50000000000000000000

Všimněte si, že s bc můžete použít i jiné operátory příkaz vždy, když máte co do činění s desetinnými čísly:

Použití napájení a zbytku (modulo)

Vytvořme si výkonovou kalkulačku! Chystám se vytvořit skript s názvem power.sh která přijme dvě čísla a a b (jako argumenty) a zobrazí výsledek a povýšen na sílu b :

#!/bin/bash
a=$1
b=$2
result=$((a**b))
echo "$1^$2=$result"

Všimněte si, že k výpočtu výsledku a používám operátor umocňování (**). povýšen na sílu b .

Udělejme několik běhů skriptu, abychom se ujistili, že poskytuje správné odpovědi:

[email protected]:~/scripts$ ./power.sh 2 3
2^3=8
[email protected]:~/scripts$ ./power.sh 3 2
3^2=9
[email protected]:~/scripts$ ./power.sh 5 2
5^2=25
[email protected]:~/scripts$ ./power.sh 4 2
4^2=16

K výpočtu celočíselných zbytků můžete také použít operátor modulo (%). Například hodnota rem proměnná v následujícím příkazu se vyhodnotí jako 2:

rem=$((17%5))

Zbytek je zde 2, protože 5 přejde třikrát do 17 a zbývá dva!

Čas cvičení:Vytvořte bash skript převaděče stupňů

Pojďme tento tutoriál zakončit vytvořením skriptu s názvem c2f.sh to převede stupně Celsia na stupně Fahrenheita pomocí rovnice níže:

F = C x (9/5) + 32

Bude to pro vás dobré cvičení, abyste si vyzkoušeli nové věci, které jste se právě naučili v tomto bash tutoriálu.

Zde je řešení (může být několik způsobů, jak dosáhnout stejného výsledku):

#!/bin/bash

C=$1
F=$(echo "scale=2; $C * (9/5) + 32" | bc -l)

echo "$C degrees Celsius is equal to $F degrees Fahrenheit."

Použil jsem bc protože máme co do činění s desetinnými místy a také jsem použil "měřítko=2" k zobrazení výstupu na dvě desetinná místa.

Udělejme několik spuštění skriptu, abychom se ujistili, že vydává správné výsledky:

[email protected]:~/scripts$ ./c2f.sh 2
2 degrees Celsius is equal to 35.60 degrees Fahrenheit.
[email protected]:~/scripts$ ./c2f.sh -3
-3 degrees Celsius is equal to 26.60 degrees Fahrenheit.
[email protected]:~/scripts$ ./c2f.sh 27
27 degrees Celsius is equal to 80.60 degrees Fahrenheit.

Perfektní! Tím se dostáváme na konec tohoto tutoriálu. Procvičte si, co jste se naučili, stažením sady cvičení bash z této kapitoly.

Bash Kapitola 5 Cvičné otázkyProblémy a jejich řešení k procvičení toho, co jste se právě naučili v této kapitole Bash-Kapitola-5-Procvičení-otázek-Linux-Příručka.pdf32 KB

Doufám, že jste si užili trochu matematiky s bash a zůstaňte naladěni na další tutoriál ze série bash pro začátečníky, kde se naučíte manipulovat se strunami!


Linux
  1. Bash skriptování (I)

  2. Jak zapsat celé číslo do binárního souboru pomocí Bash?

  3. Přesměrovat veškerý výstup do souboru pomocí Bash na Linuxu?

  1. Použití příkazu Linux Basename ve skriptech Bash

  2. Bash Beginner Series #9:Použití funkcí v Bash

  3. Bash Beginner Series #8:Loops in Bash

  1. najít a zkopírovat soubor pomocí Bash

  2. Jak nahradit mezery v názvech souborů pomocí bash skriptu

  3. Získat mtime konkrétního souboru pomocí Bash?