シェルスクリプト言語での数式の計算-パートV


あなたの人々は、あなたの必要に応じて、シェルスクリプトを理解し、それらを流暢に書くことで、快適に感じるでしょう。これは、このチュートリアルシリーズの最後の投稿であり、スクリプト言語を使用して少し複雑な数学演算を実行します。時系列であるシェルスクリプトシリーズの最後の4つの記事。

  1. Understand Basic Linux Shell Scripting Language Tips – Part I
  2. 5 Shell Scripts for Linux Newbies to Learn Shell Programming – Part II
  3. Sailing Through The World of Linux BASH Scripting – Part III
  4. Mathematical Aspect of Linux Shell Programming – Part IV

フィボナッチ数列から始めましょう

各数値が先行する2つの数値の合計である数値のパターン。級数は0、1、1、2、3、5、8……定義上、Fibonccaiシーケンスの最初の2つの数字は0と1です。

#!/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
[[email protected] ~]# chmod 755 Fibonacci.sh
[[email protected] ~]# ./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

あなたはコンピュータがバイナリ形式、つまり「0」と「1」でしか理解できないという事実に精通しており、私たちのほとんどは10進数から2進数への変換を学ぶことを楽しんでいます。この複雑な操作のための簡単なスクリプトを書いてみませんか。

#!/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 [email protected]; 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
[[email protected] ~]# chmod 755 Decimal2Binary.sh
[[email protected] ~]# ./Decimal2Binary.sh 1121

Decimal		Binary 
1121      	10001100001

注:上記のスクリプトは実行時に入力を受け入れますが、これは明らかに助けになります。

組み込みの「bc」コマンドは、1行のスクリプトで10進数を2進数に変換できます。ターミナルで実行します。

[[email protected] ~]# echo "obase=2; NUM" | bc

「NUM」を、10進数から2進数に変換する数値に置き換えます。例えば、

[[email protected] ~]# echo "obase=2; 121" | bc 

1111001

次に、上記のスクリプトとは正反対に機能するスクリプトを作成します。バイナリ値を10進数に変換します。

#!/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
[[email protected] ~]# chmod 755 Binary2Decimal.sh
[[email protected] ~]# ./Binary2Decimal.sh

Enter a number : 
11 
3

注:上記の機能は、ターミナルで「bc」コマンドを使用して実行できます。

[[email protected] ~]# echo "ibase=2; BINARY" | bc

「BINARY」を2進数に置き換えます。つまり、

[[email protected] ~]# echo "ibase=2; 11010101" | bc 

213

同様に、8進数、16進数から10進数、またはその逆への変換を自分で書くことができます。上記の結果を「bc」コマンドを使用してターミナルで実行するのはです。

[[email protected] ~]# echo "obase=8; Decimal" | bc
[[email protected] ~]# echo "obase=16; Decimal" | bc
[[email protected] ~]# echo "ibase=8; Octal" | bc
[[email protected] ~]# echo "ibase=16; Hexadecimal" | bc
[[email protected] ~]# 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に接続します。すぐに私は別の興味深いトピックを取り上げます、あなたの人々は読むのが大好きです。コメントセクションであなたの貴重な考えを共有してください。