本帖最后由 kashu 于 2013-7-1 14:09 编辑
[Bash shell] 纯文本查看 复制代码 一、shell中进行算术运算,一般常用方法如下:
1、算术扩展 $(())
[iyunv@lovelace iyunv]# a=2;b=5
[iyunv@lovelace iyunv]# c=$(($a+$b));echo $c
7
2、使用外部程序expr expr 算术式
#定义两个变量
[iyunv@lovelace iyunv]# m=10;n=5
#使用expr进行算术运算的时候,变量和运算符之间要有空格
[iyunv@lovelace iyunv]# x=`expr $m + $n`;echo $x
15
#变量和运算符之间没有空格的情况
[iyunv@lovelace iyunv]# m=10;n=5
[iyunv@lovelace iyunv]# x=`expr $m+$n`;echo $x
10+5
expr 运算表达式 表达式中个操作数级运算符之间要有空格,而且要使用命令引用
c=`expr $a + $b`
3、使用$[] $[算术式]
c=$[$a+$b]
#定义两个变量
[iyunv@lovelace iyunv]# m=23;n=15
#使用$[$a+$b]来进行算术运算
[iyunv@lovelace iyunv]# echo x=$[$m+$n]
x=38
4、使用内置命令declare declare -i 变量=算术式
#定义一个整数变量
[iyunv@lovelace iyunv]# declare -i i=14
#进行算术运算
[iyunv@lovelace iyunv]# declare -i sum=sum+$i;echo $sum
14
5、使用内置命令 let let 算术式
a=3;b=6
let c=$a+$b
[iyunv@lovelace iyunv]# x=4;y=8
[iyunv@lovelace iyunv]# let c=$x+$y
[iyunv@lovelace iyunv]# 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的列表
[iyunv@lovelace iyunv]# 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
[iyunv@lovelace iyunv]# seq 10
3、`ls /etc`
[iyunv@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
#定义两个变量
[iyunv@lovelace iyunv]# sum=10;x=3
#使用算术运算符进行计算
[iyunv@lovelace iyunv]# sum=$(($sum+$x));echo $sum
13
#等同于下面的算术运算符
[iyunv@lovelace iyunv]# sum=10;x=3
[iyunv@lovelace iyunv]# let sum+=x;echo $sum
13
-=
sum=$(($sum-$x))
let sum-=x
#定义两个变量
[iyunv@lovelace iyunv]# sum=10;x=3
#运算两个变量只差,等同于下面的运算
[iyunv@lovelace iyunv]# sum=$(($sum-$x));echo $sum
7
#定义两个变量
[iyunv@lovelace iyunv]# sum=10;x=3
#计算两个变量之差
[iyunv@lovelace iyunv]# let sum-=x;echo $sum
7
%=
sum=$(($sum%$x))
let sum%=x
#定义两个变量
[iyunv@lovelace iyunv]# sum=10;x=3
#对两个变量求摸,也就是取余的意思,等同于下面的运算
[iyunv@lovelace iyunv]# sum=$(($sum%$x));echo $sum
1
#定义两个变量
[iyunv@lovelace iyunv]# sum=10;x=3
#对两个变量求摸,也就是取余的意思
[iyunv@lovelace iyunv]# let sum%=x;echo $sum
1
/=
sum=$(($sum/$x))
let sum/=x
#定义两个变量
[iyunv@lovelace iyunv]# sum=10;x=3
#对变量进行除法运算
[iyunv@lovelace iyunv]# sum=$(($sum/$x));echo $sum
3
#定义两个变量
[iyunv@lovelace iyunv]# sum=10;x=3
#对变量进行除法运算
[iyunv@lovelace iyunv]# let sum/=x;echo $sum
3
*=
sum=$(($sum*$x))
let sum*=x
#定义两个变量
[iyunv@lovelace iyunv]# sum=10;x=3
#对变量进行乘运算
[iyunv@lovelace iyunv]# sum=$(($sum*$x));echo $sum
30
#定义两个变量
[iyunv@lovelace iyunv]# sum=10;x=3
#对变量进行乘运算
[iyunv@lovelace iyunv]# 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
执行结果:
[iyunv@lovelace iyunv]# ./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 |