一、shell中进行算术运算,一般常用方法如下:
1、算术扩展 $(())
[root@lovelace 51cto]# a=2;b=5 [root@lovelace 51cto]# c=$(($a+$b));echo $c 7
2、使用外部程序expr expr 算术式
#定义两个变量 [root@lovelace 51cto]# m=10;n=5 #使用expr进行算术运算的时候,变量和运算符之间要有空格 [root@lovelace 51cto]# x=`expr $m + $n`;echo $x 15 #变量和运算符之间没有空格的情况 [root@lovelace 51cto]# m=10;n=5 [root@lovelace 51cto]# x=`expr $m+$n`;echo $x 10+5
expr 运算表达式 表达式中个操作数级运算符之间要有空格,而且要使用命令引用
c=`expr $a + $b`
3、使用$[] $[算术式]
c=$[$a+$b]
#定义两个变量 [root@lovelace 51cto]# m=23;n=15 #使用$[$a+$b]来进行算术运算 [root@lovelace 51cto]# echo x=$[$m+$n] x=38
4、使用内置命令declare declare -i 变量=算术式
#定义一个整数变量 [root@lovelace 51cto]# declare -i i=14 #进行算术运算 [root@lovelace 51cto]# declare -i sum=sum+$i;echo $sum 14
5、使用内置命令 let let 算术式
a=3;b=6
let c=$a+$b
[root@lovelace 51cto]# x=4;y=8 [root@lovelace 51cto]# let c=$x+$y [root@lovelace 51cto]# echo $c 12
let数学运算符
let I=$[$I+1]
let SUM=$[$SUM+$I]
let sum+=$I
let I+=1 相当于let I++
二、如何生成列表:
1、整数列表
{1..100} 生存1到100的列表
#生成1到10的列表 [root@lovelace 51cto]# echo {1..10} 1 2 3 4 5 6 7 8 9 10
2、seq (这里我们只是探讨生成列表,至于该命令的其他功能,请google之)
seq 10 1到10
seq 5 10 5到10
seq 5 10 2 返回列表为6 8 10
[root@lovelace 51cto]# seq 10 1 2 3 4 5 6 7 8 9 10
3、`ls /etc`
[root@lovelace tmp]# ls /tmp/userdata/ user1 user14 user19 user23 user28 user32 user37 user41 user46 user50 user10 user15 user2 user24 user29 user33 user38 user42 user47 user6 user11 user16 user20 user25 user3 user34 user39 user43 user48 user7 user12 user17 user21 user26 user30 user35 user4 user44 user49 user8 user13 user18 user22 user27 user31 user36 user40 user45 user5 user9
三、算术运算扩展:
+=
sum=$(($sum+$x))
let sum+=x
#定义两个变量 [root@lovelace 51cto]# sum=10;x=3 #使用算术运算符进行计算 [root@lovelace 51cto]# sum=$(($sum+$x));echo $sum 13 #等同于下面的算术运算符 [root@lovelace 51cto]# sum=10;x=3 [root@lovelace 51cto]# let sum+=x;echo $sum 13
-=
sum=$(($sum-$x))
let sum-=x
#定义两个变量 [root@lovelace 51cto]# sum=10;x=3 #运算两个变量只差,等同于下面的运算 [root@lovelace 51cto]# sum=$(($sum-$x));echo $sum 7 #定义两个变量 [root@lovelace 51cto]# sum=10;x=3 #计算两个变量之差 [root@lovelace 51cto]# let sum-=x;echo $sum 7
%=
sum=$(($sum%$x))
let sum%=x
#定义两个变量 [root@lovelace 51cto]# sum=10;x=3 #对两个变量求摸,也就是取余的意思,等同于下面的运算 [root@lovelace 51cto]# sum=$(($sum%$x));echo $sum 1 #定义两个变量 [root@lovelace 51cto]# sum=10;x=3 #对两个变量求摸,也就是取余的意思 [root@lovelace 51cto]# let sum%=x;echo $sum 1
/=
sum=$(($sum/$x))
let sum/=x
#定义两个变量 [root@lovelace 51cto]# sum=10;x=3 #对变量进行除法运算 [root@lovelace 51cto]# sum=$(($sum/$x));echo $sum 3 #定义两个变量 [root@lovelace 51cto]# sum=10;x=3 #对变量进行除法运算 [root@lovelace 51cto]# let sum/=x;echo $sum 3
*=
sum=$(($sum*$x))
let sum*=x
#定义两个变量 [root@lovelace 51cto]# sum=10;x=3 #对变量进行乘运算 [root@lovelace 51cto]# sum=$(($sum*$x));echo $sum 30 #定义两个变量 [root@lovelace 51cto]# sum=10;x=3 #对变量进行乘运算 [root@lovelace 51cto]# let sum*=x;echo $sum 30
总结:此小结对shell中算术运算和列表生成进行了简单的介绍,在shell编程中这也算必不可少的一部分,尤其是列表生成。
脚本示例(分行打印出/etc/passwd中lovelace用户的信息,如果该用户不存在,则新建该账户并设置密码):
#!/bin/bash #Verson:0.1 #Auther:lovelace #Pragram:This pragram is check mark user exists or not #jugement the user exists or not userid=`id lovelace`&>/dev/null #if user not exists,useradd it if [ "$?" -ne 0 ];then echo "Without this user in the system.I will useradd it" useradd lovelace echo "lovelace" | passwd --stdin mark&>/dev/null fi #extract the line for this user user=`cat /etc/passwd | grep '^lovelace\>'` IFS=":" i=1 for x in $user;do echo "The $i field is:$x" i=$(($i+1)) done
执行结果:
[root@lovelace 51cto]# ./info.sh The 1 field is:lovelace The 2 field is:x The 3 field is:1011 The 4 field is:1011 The 5 field is: The 6 field is:/home/lovelace The 7 field is:/bin/bash