您的位置:首页 > 其它

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

2013-09-05 19:10 561 查看
思路集锦:

①.C语言型for循环结构及(())计算式shell脚本



[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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: