シェルスクリプト言語での数式の計算 - パート V
あなたは、 快適にシェル スクリプトを理解し、必要に応じて流暢に書くことができるでしょう。これはこのチュートリアル シリーズの最後の投稿で、スクリプト言語を使用して少し複雑な数学的操作を実行します。時系列に沿ったシェルスクリプトシリーズの最後の 4 つの記事です。
- 基本的な Linux シェル スクリプト言語のヒントを理解する – パート I
- Linux 初心者がシェル プログラミングを学ぶための 5 つのシェル スクリプト – パート II
- Linux BASH スクリプトの世界を航海する – パート III
- Linux シェル プログラミングの数学的側面 – パート IV
フィボナッチ数列から始めましょう
各数値が先行する 2 つの数値の合計である数値のパターン。シリーズは 0、 1、 1、 2、 3、 です。 >5、8…… 定義上、フィボンカイ数列の最初の 2 つの数値は 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
フィボナッチ.shをダウンロード
コンピュータはバイナリ形式、つまり '0' と '1' でのみ理解できるという事実はよく知られており、私たちのほとんどは 0 と '1 の変換を楽しんで学習しています。 > 10 進数から2 進数へ。この複雑な操作のための簡単なスクリプトを作成してみてはいかがでしょうか。
スクリプト 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」コマンドを使用すると、1 行のスクリプトで10 進数を2 進数に変換できます。ターミナルで実行してください。
[root@tecmint ~]# echo "obase=2; NUM" | bc
「NUM」 を10 進数から2 進数に変換する数値に置き換えます。例えば、
[root@tecmint ~]# echo "obase=2; 121" | bc
1111001
次に、上記のスクリプトの真逆の機能、 つまりバイナリ値を10 進数に変換するスクリプトを作成します。
スクリプト 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」 を 2 進数に置き換えます。つまり、
[root@tecmint ~]# echo "ibase=2; 11010101" | bc
213
Binary2Decimal.sh をダウンロード
同様に、8 進数、16 進数から10 進数への変換、またはその逆の変換を自分で記述することができます。ターミナルで「bc」コマンドを使用して上記の結果を実現します。
10進数から8進数へ
[root@tecmint ~]# echo "obase=8; Decimal" | bc
10進数から16進数へ
[root@tecmint ~]# echo "obase=16; Decimal" | bc
8 進数から 10 進数へ
[root@tecmint ~]# echo "ibase=8; Octal" | bc
16 進数から 10 進数へ
[root@tecmint ~]# echo "ibase=16; Hexadecimal" | bc
2進数から8進数へ
[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
この記事とこのシリーズの記事はここまでです。これはシェル スクリプト シリーズの最後の記事です。これは、スクリプト言語に関する記事が再びここに登場しないという意味ではありません。シェル スクリプトのチュートリアルが終了し、知っておく価値のある興味深いトピックを見つけたときにいつでも使えることを意味するだけです。または皆さんからの質問があれば、ここからシリーズを続けていきたいと思います。
健康を保ち、調子を整え、Tecmint とつながってください。すぐに別の興味深いトピックを紹介する予定です。皆さんもぜひ読んでください。貴重なご意見をコメント セクションで共有してください。