1.运算方式及运算符号
运算符号 | 意义( * 表示常用) |
---|---|
+,- | 加法,减法 |
*,/,% | 乘法,除法,取余 |
** | 幂运算 |
++ , – | 自增加,自减少 |
<,<=,>,>= | 比较符号 |
= , += , -= , *= , /= , %= | 赋值运算 |
例如 a+=1 相当于 a=a+1
2.SHELL 中常用的运算命令
运算操作与运算命令 | 含义 |
---|---|
(()) | 用于整数运算 |
let | 用于整数运算,与 (()) 类似 |
expr | 用于整数运算,功能相对较多 |
bc | linux 下的计算器,适合整数及小数运算 |
$[] | 用户整数运算 |
例1:
(1)关于$[]的用法
[root@shell_example mnt]# echo $[1]
1
[root@shell_example mnt]# echo $[1+1]
2
[root@shell_example mnt]# echo $[2*3]
6
[root@shell_example mnt]# echo $[2**3]
8
[root@shell_example mnt]# echo $[2**4]
16
[root@shell_example mnt]# echo $[2**5]
32
(2)关于(())的用法
[root@shell_example mnt]# ((i=1+1))
[root@shell_example mnt]# echo $i
2
[root@shell_example mnt]# i=1+1
[root@shell_example mnt]# echo $i
1+1
(3)let的用法
[root@shell_example mnt]# let 1+1
[root@shell_example mnt]# echo $i
1+1
[root@shell_example mnt]# let i=1+1
[root@shell_example mnt]# echo $i
2
(4)expr
[root@shell_example mnt]# expr 1+1
1+1
[root@shell_example mnt]# expr 1 + 1
2
(5)bc,退出时ctrl+c
[root@shell_example mnt]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1+2
3
2*3
6
2*5
10
5/2
2
^C
(interrupt) Exiting bc.
例2:
(1)正序输出1-10(i++)
#!/bin/bash
for ((i=1;i<=10;i++))
do
echo $i
done
[root@shell_example mnt]# vim numtest.sh
[root@shell_example mnt]# sh numtest.sh
(2)倒序输出(i–)
#!/bin/bash
for ((i=10;i>0;i--))
do
echo $i
done
[root@shell_example mnt]# vim numtest.sh
[root@shell_example mnt]# sh numtest.sh
(3)+=(j+=i就是j=j+i)
#!/bin/bash
for ((i=10;i>0;i--))
do
((j+=i))
echo $j
done
[root@shell_example mnt]# vim numtest.sh
[root@shell_example mnt]# sh numtest.sh
(4)-=(j-=i就是j=j-i)
#!/bin/bash
for ((i=10;i>0;i--))
do
((j-=i))
echo $j
done
[root@shell_example mnt]# vim numtest.sh
[root@shell_example mnt]# sh numtest.sh
(5) *=(j*=i就表示j=j*i,这里j的初始值默认为0,所以所有的结果都为0)
#!/bin/bash
for ((i=10;i>0;i--))
do
((j*=i))
echo $j
done
(6)/=(j/=i就表示j=j/i)
#!/bin/bash
for ((i=10;i>0;i--))
do
((j/=i))
echo $j
done
(7)%=(j%=i就表示j=j%i)
#!/bin/bash
j=100
for ((i=10;i>0;i--))
do
((j%=i))
echo $j
done
例3:练习: 用运算和shell语句写出一个一份10秒的倒计时脚本
==方法一:分别输入分和秒
#!/bin/bash
read -p "please input min:" m
read -p "please input sec:" s
for ((time=m*60+s;time>0;time--))
do
let s=time%60
let m=time/60
echo "After "$m"":"$s" is over
echo -ne "\r"
sleep 1
clear
done
方法二:输入总的秒数
#!/bin/bash
[ -z "$1" ] && {
echo error
exit
}
for ((TIME=$1;TIME>0;TIME--))
do
let SEC=TIME%60
let MIN=TIME/60
echo -n "After ${MIN}m:${SEC}s is end "
echo -ne "\r"
sleep 1
done
注意:
1.方法一中clear表示每次输出都会刷新一次界面,不加的话会把每一次的输出都列在一起
2.sleep 1表示每隔一秒输出一次
3.echo -ne "\r"表示换行,注释掉的话会将所有的输出放在一行
4.方法二中"After ${MIN}m:${SEC}s is end "的end后必须要有空格,否则会出现重复打印最后一个字符的情况,这里的空格是占位符的作用
例4:练习二:
用学习过的知识设计一个计算器:
请输入您要操作的第一个数字
请输入您要操作的第二个数字
请输入你要进行的运算
执行后返回运算后的结果
脚本如下:
#!/bin/bash
CAL()
{
echo "You can input + - * / % | exit"
read -p "Please input action: " ACTION
[ "$ACTION" = "exit" ]&&{
echo bye
exit 0
}
read -p "Please input first number: " FNUM
read -p "Please input second number: " SNUM
bc <<EOF
$FNUM $ACTION $SNUM
EOF
CAL
}
CAL
测试:
[root@shell_example mnt]# sh calculator.sh
You can input + - * / % | exit
Please input action: *
Please input first number: 2
Please input second number: 5
10
You can input + - * / % | exit
Please input action: +
Please input first number: 1
Please input second number: 1
2
You can input + - * / % | exit
Please input action: exit
bye
或者:
#!/bin/bash
while true
do
echo "You can input + - * / % | exit"
read -p "Please input action: " ACTION
[ "$ACTION" = "exit" ]&&{
echo bye
exit 0
}
read -p "Please input first number: " FNUM
read -p "Please input second number: " SNUM
bc <<EOF
$FNUM $ACTION $SNUM
EOF
done