Математические операции в shell-скриптах: Фибоначчи, двоичная арифметика и преобразования чисел.

В этой статье мы познакомимся с рядом более сложных математических операций, которые можно реализовать с помощью Bash-скриптов. Вы научитесь генерировать ряд Фибоначчи, выполнять перевод чисел между различными системами счисления (десятичной, двоичной, восьмеричной и шестнадцатеричной) и использовать числовые сравнения в условных конструкциях.




Генерация чисел Фибоначчи в Bash

Числа Фибоначчи — это последовательность, где каждое число является суммой двух предыдущих. Начинается она с 0 и 1:

Пример ряда:
0, 1, 1, 2, 3, 5, 8, 13...

📜 Скрипт: Fibonacci.sh

Bash
#!/bin/bash
echo "Сколько чисел ряда Фибоначчи вы хотите получить?" 
read total 
x=0 
y=1 
i=2 
echo "Ряд Фибоначчи до $total членов:" 
echo "$x" 
echo "$y" 
while [ $i -lt $total ] 
do 
    i=`expr $i + 1` 
    z=`expr $x + $y` 
    echo "$z" 
    x=$y 
    y=$z 
done

Блок-схема Fibonacci.sh

Пример запуска:

Bash
chmod +x Fibonacci.sh
./Fibonacci.sh

Вывод:

Пример работы скрипта

Перевод десятичного числа в двоичное.

Компьютеры работают с двоичной системой счисления, и перевод чисел из привычной десятичной формы в двоичную может быть полезен во множестве задач.

📜 Скрипт: Decimal2Binary.sh

Bash
#!/bin/bash

for ((i=32;i>=0;i--)); do 
    r=$((2**$i)) 
    Probablity+=($r)
done 

[[ $# -eq 0 ]] && echo -e "Decimal\t\tBinary"

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 "0"
        else
            printf "1"; s=1
            input_int=$((input_int - n))
        fi
    done
    echo -e
done

Пример перевода числа 1121 в двоичную систему (10001100001)

Пример запуска:

Bash
chmod +x Decimal2Binary.sh
./Decimal2Binary.sh 1121

Вывод:

💡 Совет: можно использовать встроенную утилиту bc для однострочного перевода:

Bash
echo "obase=2; 121" | bc

Результат:

Перевод двоичного числа в десятичное

📜 Скрипт: Binary2Decimal.sh

Bash
#!/bin/bash
echo "Введите двоичное число:"
read Binary

if [ $Binary -eq 0 ]; then
    echo "Введите корректное значение"
else
    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"
fi

Пример перевода из двоичного в десятичное

Пример запуска:

Bash
chmod +x Binary2Decimal.sh
./Binary2Decimal.sh

Вывод:

💡 Аналогично можно использовать bc:

Bash
echo "ibase=2; 11010101" | bc

Преобразования между другими системами счисления

С помощью bc можно легко конвертировать числа между любыми системами:

КонвертацияКоманда
Десятичное → Восьмеричноеecho "obase=8; 100"
Десятичное → Шестнадцатеричноеecho "obase=16; 255"
Восьмеричное → Десятичноеecho "ibase=8; 144"
Шестнадцатеричное → Десятичноеecho "ibase=16; FF"
Двоичное → Восьмеричноеecho "ibase=2; obase=8; 101011"

Заключение

В этой статье мы на практике рассмотрели, как с помощью Shell-скриптов выполнять базовые математические операции, работать с последовательностями Фибоначчи, а также переводить числа между различными системами счисления — от двоичной до шестнадцатеричной.

Подобные скрипты полезны не только при обучении, но и в реальных автоматизациях, когда нужно производить простые вычисления прямо в командной строке без использования сторонних языков программирования. Особенно удобно использовать команду bc как универсальный калькулятор внутри скриптов для точных преобразований между системами счисления.

Было ли это полезно?

0 / 0

Добавить комментарий 0