Abstract : 

1)  Linux shell 中使用 let , [ ] ,(( )) 三种运算符操作 shell 变量进行简单的基本运算;
2)Linux shell 中使用 expr 与 bc 两个程序实现高级运算;


1, Linux shell 变量的基本运算


数值作为常规变量直接赋值给变量,并且以字符串形式保存。

1.1 let 命令可以用于直接执行基本操作:
        
当我使用 let 的时候,我们不使用 $ 符号引用变量。

  • no1=7;
  • no2=8;
  • echo "------------ let command -------------"
  • let no1++;
  • let no2--;
  • let no1+=3;
  • let no2-=5;
  • let result=no1+no2;
  • printf "let result=%d\n" $result;
  • Linux shell  整数运算 let [ ]  (( ))  expr以及 浮点数 bc用法(转)

    1.2 " [ ] "运算符跟 let 命令很相似:

    "[ ]" 运算符里面可以使用 $ 符号引用变量,同时支持变量名与运算符之间不带空格。

  • echo "----------------- [] operator ----------------"
  • printf "no1:%d no2:%d \n" $no1 $no2;
  • result1=$[ no1 + no2 ];
  • printf "result1 = %d \n" $result1;
  • result2=$[no1+no2 + 7];
  • printf "result2 = %d \n" $result2;
  • result3=$[ $no1+$no2+5 ];
  • printf "result3 = %d \n" $result3;
  • no2=$[ no2 + 1 ];
  • printf "no1 = %d no2 = %d \n" $no1 $no2;
  • Linux shell  整数运算 let [ ]  (( ))  expr以及 浮点数 bc用法(转)

    1.3 " (( )) " 运算符跟 " [ ] " 运算符一样:
    同样支持使用 $ 符号引用变量进行基本运算,同时支持变量名与运算符之间不带空格。
  • echo "----------------- (( )) operator --------------"
  • printf "no1: %d no2: %d \n" $no1 $no2;
  • result1=$(( no1 + no2 ));
  • printf "result1 = %d \n" $result1;
  • result2=$((no1+no2+3));
  • printf "result2 = %d \n" $result2;
  • result3=$(( $no1+$no2 + 5))
  • printf "result3 = %d \n" $result3;
  • Linux shell  整数运算 let [ ]  (( ))  expr以及 浮点数 bc用法(转)

    1.4 "expr" 命令同样可以用于变量的基本运算:
    "expr" 命令同样支持 $ 符号引用变量进行基本运算,但是变量与运算符之间必须使用空格作为分隔符;
    在使用 "expr" 命令对变量进行运算后,整个表达式必须使用 " · expression · " 的模式赋值给变量,即包含在 " ` " 符里面,
    并且等效于 " $( expression ) " 模式。

  • echo "---------------- expr command ---------------"
  • printf "no1: %d no2: %d \n" $no1 $no2;
  • result1=`expr 3 + 4`;
  • printf "result1 = %d \n" $result1;
  • result2=`expr $no1 + 4`;
  • printf "result2 = %d \n" $result2;
  • result3=`expr $no1 + $no2`;
  • printf "result3 = %d \n" $result3;
  • result4=`expr $no1+$no2`;
  • printf "result4 = %d \n" $result4;
  • result5=$(expr $no1 + 3);
  • printf "result5 = %d \n" $result5;
  • result6=$(expr $no1+4);
  • printf "result6 = %d \n" $result6;
  • result7=$(expr $no1+$no2);
  • printf "result7 = %d \n" $result7;
  • Linux shell  整数运算 let [ ]  (( ))  expr以及 浮点数 bc用法(转)
    由上图实验结果所示," expr " 命令的表达式中,变量与运算符之间必须使用空格作为分隔符,
    有一点我没搞明白的就是为什么42行的表达式已经错了,为什么在43行才报错。
    " expr " 还支持许多运算表达式,大家在终端打个 expr --help 命令看看吧,o(∩_∩)o 哈哈。。。

    上面所述的四种shell中执行变量运算的方式中不支持浮点运算!

    2, Linux shell 中使用 bc 命令实现高级数学运算:

    bc有三个参数,scale是运算精度,ibase指定输入变量的记数进制;obase指定输出变量的记数进制;
    bc 命令使用 标准输入 stdin 作为输入;
    bc 是一个支持精确的浮点运算的高级计算器;
    bc 拥有相当多的输入选项,并且支持数学函数调用;
    执行 bc --help 自行查看 bc 所支持的输入选项;

    2.1 bc 命令使用标准输入 stdin 作为输入,并且支持浮点运算:
  • echo "----------------- bc command ----------------"
  • echo "4 * 0.56" | bc;
  • no=48;
  • result1=`echo "$no * 1.5" | bc`;
  • echo "result1 = $result1";
  • Linux shell  整数运算 let [ ]  (( ))  expr以及 浮点数 bc用法(转)

    2.2 bc 命令支持运算精度设置:

    通过附加参数可以给 bc 指定运算精度;指定输入变量的记数进制;
    附加参数使用分号 " ; " 作为分隔符;

  • result2=`echo "scale=9;$no / 3;" | bc`;
  • echo "result2 = $result2";
  • Linux shell  整数运算 let [ ]  (( ))  expr以及 浮点数 bc用法(转)

    实验结果所示,使用分号 " ; " 加入附加参数 scale ,指定精度为 9 位小数;

    2.3 使用 bc 进行数值的记数进制间转换:

    通过 ibase=value 作为附加参数,指定输入变量的记数进制;
    通过 obase=value 作为附加参数,指定输出变量的记数进制;

  • no=100;
  • echo "echo \"obase=2;ibase=10;$no\" | bc = `echo "obase=2;ibase=10;$no" | bc`";
  • no=1000;
  • echo "echo \"scale=5;obase=10;ibase=2;$no/3\" | bc = `echo "scale=5;obase=10;ibase=2;$no/3" | bc`";
  • Linux shell  整数运算 let [ ]  (( ))  expr以及 浮点数 bc用法(转)

    2.4 使用 bc 调用数学公式进行高级数学运算:

    " sqrt(value) " 执行 value 的开方运算;
    " value^index " 执行 value 的幂运算;

  • echo "sqrt(100) = `echo "sqrt(100)" | bc`";
  • echo "sqrt(100) = $(echo "sqrt(100)" | bc)";
  • echo "10^3 = `echo "10^3" | bc`";
  • echo "10^3 = $(echo "10^3" | bc)";
  • Linux shell  整数运算 let [ ]  (( ))  expr以及 浮点数 bc用法(转)


    相关文章:

    • 2021-10-16
    • 2022-12-23
    • 2021-10-12
    • 2021-09-10
    • 2021-11-17
    • 2022-12-23
    • 2021-12-09
    • 2021-05-22
    猜你喜欢
    • 2022-01-17
    • 2022-01-07
    • 2022-12-23
    • 2021-11-30
    • 2021-10-18
    • 2022-12-23
    相关资源
    相似解决方案