(())、let、expr、bc等计算命令的使用语法和应用技巧

[oldboy@student ~]$  cat for1.sh
 #!/bin/sh
 j=0
 for((i=0; i<=100; i++))
 do
     ((j=j+i))
 done
 echo $j
写成一行的命令行写法:
 
for((i=0; i<=100; i++));do ((j=j+i));done;echo $j


expr的效率低于(()),计算1加到100就有明显感觉。


③.使用seq命令加for循环语法及let命令计算式脚本
[oldboy@student ~]$  cat for3.sh
 #!/bin/bash
 sum=0
 i=1
 for i in `seq 100`
 do
    let sum=sum+i
 done
 
echo $sum



#!/bin/bash

let a=5+4 b=9-3

echo $a $b



#!/bin/bash

let "t1 = ((a = 5 + 3, b = 7 - 1, c = 15 - 4))"

echo "t1 = $t1, a = $a, b = $b"



let 为内建的整数运算

let 命令not found的时候,sudo dpkg-reconfigure dash


提示:seq命令的语法:
1.生成序列[1…LAST]
 seq LAST
例:seq 5 表示序列为 1 2 3 4 5
 [oldboy@student ~]$  seq 5
 1
 2
 3
 4
 5
2. 生成序列[FIRST…LAST],步长为1
 seq FIRST LAST
例:seq 2 5表示序列为  2 3 4 5
 [oldboy@student ~]$  seq 2 5
 2
 3
 4
 
5

3.生成序列[FIRST…LAST],步长为INCREMENT
 seq FIRST INCREMENT LAST
例:seq 2 2 5表示序列为  2 4
 [oldboy@student ~]$  seq 2 2 5
 2
 4
qustdjx@qustdjx-K42JZ:~/test$ seq 2 3 5
 2
 5

④.seq、tr、sed、bc联手完成计算的方法
[oldboy@student ~]$  seq 100 | tr '\n' '+'|sed 's#\+$#\n#g'|bc
 5050
老男孩提示:
1)注意bc命令的计算用法。
2)注意seq、tr、sed 3个命令的用法。
3) 命令解释说明:
1.seq 100         ==>竖排打印1...100个数字。
2.tr '\n' '+'     ==>把1...100个数字的结尾换行标签全部换成加号,即得1+2+3...+100+。
3.sed 's#\+$#\n#g'==>拼接的字符串表达式结尾加号替换为换行(回车)符。
4.bc    ==>交给bc计算
qustdjx@qustdjx-K42JZ:~/test$ echo '4+8' |bc
 12


⑤.(())的其它写法
[oldboy@student ~]$  cat for4.sh
 #!/bin/bash
 sum=0
 for((i=1;i<=100;i++))
 do
         sum=$((i+sum))
 done
 echo $sum
 [oldboy@student ~]$  cat for5.sh
 sum=0
 for((i=1;i<=100;i++))
 do
         sum=$((i+$sum))
 done
 echo $sum
提示:以上两结果都是对的

⑥.使用until语句及(())计算
[oldboy@student ~]$  cat until-1.sh
 #!/bin/sh
 i=1
 until ((i >100 ))
 do
   ((j=j+i))
   ((i++))
 done
 echo $j

⑦.使用while循环语句计算
[oldboy@A ~]$ cat while-1.sh
 #!/bin/sh
 i=1
 while ((i <=100 ))
 do
  ((j=j+i))
  ((i++))
 done
 echo $j
 --------------
 [oldboy@student ~]$  cat while-3.sh
 #!/bin/sh
 i=1
 while [ $i -le 100 ] #same as while [[ $i -le 100 ]] or while [[ $i -le 100 ]]
 do
   let j=j+i
   i=`expr $i + 1`    #same as ((i++)) or  let i=i+1
 done
 echo $j



⑧.使用数学公式直接计算※※※※※
[oldboy@student ~]$  cat gongshi.sh
 #!/bin/sh
 i=100
 echo $((i*(i+1)/2))
 ---------
 [oldboy@student ~]$  cat gongshi-2.sh
 #!/bin/sh
 i=100
 ((sum=i*(i+1)/2))
 echo $sum
 ---------
 [oldboy@student ~]$  echo $((100*(100+1)/2))
 5050

3)在计算时,(())计算式比let,expr等更有效率。
-------------------------------------------------
⑨.拼接字符串计算表达式后结合bc求和计算方法
[oldboy@student ~]$  cat chars.sh
 #!/bin/sh
 chars=0
 for ((i=1; $i<=100; i++ ));do
 chars="$chars+$i"
 done
 echo $chars|bc
 -------------------------------------------------
⑩.使用seq和awk实现
[oldboy@student ~]$  seq 100 |awk '{total+=$1} END {print total}'
 5050
 [oldboy@student ~]$  seq 100 |awk '{total=total+$1} END {print total}'
 5050
 -------------------------------------------------
①①.{}数字列表结合tr、bc方法
[oldboy@student ~]$  echo {1..100}|tr " " "+"|bc
 5050

老男孩提示:
1){ }序列的用法
[oldboy@student ~]$  echo {1..10}
 1 2 3 4 5 6 7 8 9 10
 [oldboy@student ~]$  echo {a..z}
 a b c d e f g h i j k l m n o p q r s t u v w x y z

2)seq默认情况只能是竖立排序列(以\n为分隔符号)
[oldboy@student ~]$  seq 3
 1
 2
 3
加个-s分隔符参数看看:
[oldboy@student ~]$  seq -s " " 3
 1 2 3
提示:seq仅支持打印数字序列,不支持字符等。

①②.{}数字列表结合awk方法
[oldboy@student ~]$ echo {1..100}|tr " " "\n"|awk '{total+=$1} END {print total}'
 5050
 -------------------------------------------------
①③.{}数字列表for循环及计算命令方法
[root@student scripts]# cat for6.sh
 #!/bin/sh
 sum=0
 for num in `echo {1..100}`
 do
     sum=`expr $sum + $num`
 done
 echo $sum
 -------------------------------------------------
①⑤.seq结合bc较少字符计算方法(压轴了,最少字符实现方法)
[oldboy@student ~]$ seq -s + 100|bc
 5050
 [oldboy@student ~]$ seq -s "+" 100|bc
 5050



你可能感兴趣的:(bc,expr,(()),let)