shell

shell.1.9 bash 算术运算

 

加法、减法、乘法、除法(取商值)、某数值的多少次方、取模运算(除法,取余数);
+ , – , * , / , ** , % ;

1、算术运算格式
1.1    let   VAR=算术运算表达式
1.2   VAR=$[算术运算表达式]
1.3   VAR=$((算术运算表达式))
1.4   VAR=$(expr $ARG1 $OP $ARG2)

NOTE:乘法符号在有些场景中需要使用转义符号;

2、增强型赋值

2.1 变量做某种算术运算后,回存至此变量中
let i=$i+#      相当于如下表达式;
let i+=#

上面是加法运行,其他运算法则如下表示:
let i=$i+#      —->      let i+=#
let i=$i-#      —->       let i-=#
let i=$i*#      —->      let i*=#
let i=$i/#      —->      let i/=#
let i=$i%#     —->     let i%=#

特殊应用:自增、自减
自增:
VAR=$[$VAR+1]
let   VAR+=1
let   VAR++

自减:
VAR=$[$VAR-1]
let   VAR-=1
let   VAR–

举例如下:

1.1举例如下:
[root@localhost tmp]# declare -i num1=8
[root@localhost tmp]# declare -i num2=5
[root@localhost tmp]# 
[root@localhost tmp]# echo "$num1+$num2"
8+5
[root@localhost tmp]# let sum=$num1+$num2
[root@localhost tmp]# 
[root@localhost tmp]# echo $sum
13
[root@localhost tmp]# let var=$num1-$num2 
[root@localhost tmp]# echo $var
3
[root@localhost tmp]# let var=$num1*$num2 
[root@localhost tmp]# echo $var
40
[root@localhost tmp]# let var=$num1/$num2   除法,取商值;
[root@localhost tmp]# echo $var
1
[root@localhost tmp]# let var=$num1**$num2  8的5次方,8^5;
[root@localhost tmp]# echo $var
32768
[root@localhost tmp]# let var=$num1%$num2   除法,取模运算,取余数;
[root@localhost tmp]# echo $var
3
[root@localhost tmp]# 

======================

1.2&1.3举例如下:
[root@localhost tmp]# 
[root@localhost tmp]# echo "$[$num1*$num2]"
40
[root@localhost tmp]# echo "$(($num1*$num2))"
40
[root@localhost tmp]# 

==================

1.4举例如下:
[root@localhost tmp]# 
[root@localhost tmp]# VAR=$(expr $num1 - $num2)
[root@localhost tmp]# echo $VAR
3
[root@localhost tmp]#

[root@localhost tmp]# 
[root@localhost tmp]# VAR=$(expr $num1 * $num2)
expr: syntax error
[root@localhost tmp]# VAR=$(expr $num1 \* $num2)    乘法符号要转义;
[root@localhost tmp]# echo $VAR
40
[root@localhost tmp]# 

===========================

shell脚本:
添加3个用户,求此3个用户的UID之和.

脚本1:

[root@localhost tmp]# 
[root@localhost tmp]# more adduid.sh 
#!/bin/bash
useradd user1
useradd user2
useradd user3

echo 
echo "useradd user1,user2,user3 compled."
echo

user1id=`grep user1 /etc/passwd | cut -d':' -f3` 
user2id=`grep user2 /etc/passwd | cut -d':' -f3`
user3id=`grep user3 /etc/passwd | cut -d':' -f3`

echo
echo -e "user1id is $user1id;\nuser2id is $user2id;\nuser3id is $user3id."
echo

echo "sum=user1id+user2id+user3id:"
let sum=$user1id+$user2id+$user3id
echo "sum=$sum."
[root@localhost tmp]# 
[root@localhost tmp]# ./adduid.sh 

useradd user1,user2,user3 compled.


user1id is 3008;
user2id is 3009;
user3id is 3010.

sum=user1id+user2id+user3id:
sum=9027.
[root@localhost tmp]#

脚本2:

#!/bin/bash
#
id user4 &> /dev/null || useradd user4
id user5 &> /dev/null || useradd user5
id user6 &> /dev/null || useradd user6

echo
echo "useradd user4/user5/user6 is complished."
echo
user4_id=$(id -u user4)
user5_id=$(id -u user5)
user6_id=$(id -u user6)

echo "user4 id is : $user4_id"
echo "user5 id is : $user5_id"
echo "user6 id is : $user6_id"

id_sum=$[$user4_id+$user5_id+$user6_id]

echo
echo "the id sum : $id_sum."

 

计算/etc/passwd文件中的第10个用户和第20个用户的ID号之和;

#!/bin/bash
#
user1_id=$(head -10 /etc/passwd | tail -1 | cut -d: -f3)
user1_id=$(head -20 /etc/passwd | tail -1 | cut -d: -f3)

echo "user1_id is $user1_id.\nuser2_id is $user2_id."
echo

user_sum=$[$user1_id+$user2_id]
echo "user_sum is : $user_sum."

 

计算/etc/rc.d/init.d/functions 和 /etc/inittab文件的空白行行数之和;

#!/bin/bash
#
lin_num1=$(grep "^[[:space:]]*$" /etc/rc.d/init.d/functions | wc -l)
lin_num2=$(grep "^[[:space:]]*$" /etc/inittab | wc -l)

lin_num_sum=$[$lin_num1+$lin_num2]

echo "lin_num_sum is $lin_num_sum."

 

Leave a Reply

Your email address will not be published. Required fields are marked *