Вычисление математических выражений на языке сценариев Shell. Часть V
Вы, люди, будете чувствовать себя комфортно, будете понимать сценарии оболочки и свободно писать их в соответствии с вашими потребностями. Это последняя статья в этой серии руководств, в которой мы будем выполнять довольно сложные Математические операции с использованием языка сценариев. Последние четыре статьи серии Shell Scripting в хронологическом порядке.
- Основные советы по языку сценариев оболочки Linux. Часть I.
- 5 сценариев оболочки для новичков в Linux для изучения программирования оболочки – часть II
- Путешествуя по миру сценариев BASH для Linux – часть III
- Математический аспект программирования оболочки Linux. Часть IV.
Начнем с ряда Фибоначчи.
Набор чисел, в котором каждое число представляет собой сумму двух предыдущих чисел. Серия: 0, 1, 1, 2, 3, . >5, 8…… По определению, первые два числа в последовательности Фибонкай равны 0 и 1.
Скрипт 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
Пример вывода
[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
Скачать Fibonacci.sh
Вы знакомы с тем фактом, что компьютер понимает только двоичный формат, т. е. «0» и «1», и большинству из нас понравилось изучать преобразование . От >десятичного до двоичного. Как насчет написания простого сценария для этой сложной операции.
Сценарий 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
Пример вывода
[root@tecmint ~]# chmod 755 Decimal2Binary.sh
[root@tecmint ~]# ./Decimal2Binary.sh 1121
Decimal Binary
1121 10001100001
Примечание. Приведенный выше сценарий принимает ввод во время выполнения, что, очевидно, помогает.
Скачать Decimal2Binary.sh
Ну, встроенная команда «bc» может преобразовать десятичный в двоичный в однострочном скрипте. Бегите на своем терминале.
[root@tecmint ~]# echo "obase=2; NUM" | bc
Замените «NUM» числом, которое вы хотите преобразовать из десятичного в двоичное. Например,
[root@tecmint ~]# echo "obase=2; 121" | bc
1111001
Далее мы напишем сценарий, который будет работать прямо противоположно приведенному выше сценарию: преобразование двоичных значений в десятичные.
Сценарий 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
Пример вывода
[root@tecmint ~]# chmod 755 Binary2Decimal.sh
[root@tecmint ~]# ./Binary2Decimal.sh
Enter a number :
11
3
Примечание. Вышеупомянутую функцию можно выполнить в терминале с помощью команды «bc».
[root@tecmint ~]# echo "ibase=2; BINARY" | bc
Замените «BINARY» на двоичное число, а именно:
[root@tecmint ~]# echo "ibase=2; 11010101" | bc
213
Скачать Binary2Decimal.sh
Аналогичным образом вы можете самостоятельно записать преобразование из восьмеричного, шестнадцатеричного в десятичное и наоборот. Достижение вышеуказанного результата в терминале с помощью команды «bc».
Десятичное число в восьмеричное
[root@tecmint ~]# echo "obase=8; Decimal" | bc
Десятичный в шестнадцатеричный
[root@tecmint ~]# echo "obase=16; Decimal" | bc
Восьмеричное в десятичное
[root@tecmint ~]# echo "ibase=8; Octal" | bc
Шестнадцатеричный формат в десятичный
[root@tecmint ~]# echo "ibase=16; Hexadecimal" | bc
Двоичный код в восьмеричный
[root@tecmint ~]# echo "ibase=2;obase=8 Binary" | bc
Некоторые из Общих числовых тестов, используемых в языке сценариев оболочки, с описанием.
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
Это все, что касается этой статьи и серии статей. Это последняя статья из Серии сценариев Shell, и это не означает, что здесь больше не будет статей о языке сценариев. Это лишь означает, что руководство по написанию сценариев оболочки окончено и всякий раз, когда мы находим интересную тему, которую стоит изучить. или ваш вопрос, мы будем рады продолжить серию отсюда.
Будьте здоровы, следите за обновлениями и подключайтесь к Tecmint. Очень скоро я расскажу еще одну интересную тему, которую вы с удовольствием прочтете. Поделитесь своими ценными мыслями в Разделе комментариев.