1.运算方式及运算符号及意义
2.SHELL中常用的运算命令
3.利用(())进行赋值运算
echo $((1+1))
westos=3
echo $((westos+=1))
for ((i=1;i<10;i++))
do
((j+=i))
echo $j
done
实验:
<1>“1+1”的五种运算命令
-1-使用$[]
[root@shenzhen mnt]# echo $[1+1]
-2-使用(())
[root@shenzhen mnt]# ((i=1+1))
[root@shenzhen mnt]# echo $i
-3-使用let
[root@shenzhen mnt]# let i=1+1
[root@shenzhen mnt]# echo $i
-4-使用expr
[root@shenzhen mnt]# expr 1 + 1
-5-使用bc
[root@shenzhen mnt]# bc
……
1+1
<2>幂的使用说明(**)
[root@shenzhen mnt]# echo $[2*3]
[root@shenzhen mnt]# echo $[2**3]
<3>正序输出1~10
[root@shenzhen mnt]# vim number.sh
[root@shenzhen mnt]# sh number.sh
脚本中的内容如下:
#!/bin/bash
for ((i=1;i<=10;i++))
do
echo $i
done
<4>倒序输出10~1
[root@shenzhen mnt]# vim number.sh
[root@shenzhen mnt]# sh number.sh
脚本中的内容如下:
#!/bin/bash
for ((i=10;i>0;i--))
do
echo $i
done
<5>使用“+=”的说明(j+=i相当于j=j+i)
[root@shenzhen mnt]# vim number.sh
[root@shenzhen mnt]# sh number.sh
脚本中的内容如下:
#!/bin/bash
for ((i=10;i>0;i--))
do
((j+=i))
echo $j ##(j=0+10=10,j1=j+9=19,j2=j1+8=27……)
done
<6>使用“-=”的说明(j-=i相当于j=j-i)
[root@shenzhen mnt]# vim number.sh
[root@shenzhen mnt]# sh number.sh
脚本中的内容如下:
#!/bin/bash
for ((i=10;i>0;i--))
do
((j-=i))
echo $j ##(j=0-10=-10,j1=j-9=-19,j2=j1-8=-27……)
done
<7>使用“=”的说明(j=i相当于j=j*i)
[root@shenzhen mnt]# vim number.sh
[root@shenzhen mnt]# sh number.sh
脚本中的内容如下:
#!/bin/bash
for ((i=10;i>0;i--))
do
((j*=i))
echo $j ##(j=0,零乘任意数都得零)
done
<8>使用“/=”的说明(j/=i相当于j=j/i)
[root@shenzhen mnt]# vim number.sh
[root@shenzhen mnt]# sh number.sh
[root@shenzhen mnt]# sh -x number.sh ##使用sh -x命令可以查看到执行脚本时的每一次运算过程
#!/bin/bash
j=99
for ((i=10;i>0;i--))
do
((j/=i)) ##当j=99时,(j=99/10=9,j1=j/9=1,j2=j2/8=0……)
echo $j
done
<9>使用“%=”的说明(j%=i相当于j=j%i)
[root@shenzhen mnt]# vim number.sh
[root@shenzhen mnt]# sh number.sh
[root@shenzhen mnt]# sh -x number.sh ##使用sh -x命令可以查看到执行脚本时的每一次运算过程
#!/bin/bash
j=99
for ((i=10;i>0;i--))
do
((j%=i)) ##当j=99时,(j=99%10=9,j1=j%9=0,j2=j2%8=0……)
echo $j
done
<10>设计一个1分10秒的倒计时
方法一:
[root@shenzhen mnt]# vim time.sh
[root@shenzhen mnt]# sh time.sh
please input min:1 ##输入1分钟
please input sec:10 ##输入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
显示的结果如下:
方法二:
[root@shenzhen mnt]# vim time.sh
[root@shenzhen mnt]# sh time.sh 1 10
脚本中的内容如下:
#!/bin/bash
second=$[$1*60+$2]
clear
for ((time=$second;time>0;time--))
do
min=$[time/60]
sec=$[time%60]
echo -n "After $min:$sec is end "
echo -ne "\r"
sleep 1
done
显示的结果如下:
注意:
1.在脚本echo -n "After
sec is end "中,必须在end其后加空格,因为其秒的位数有时是两位,有时是一位,如果不加空格则会影响输出的内容(即会输出is overr)
2.echo -ne "\r"表示覆盖之前的内容,如果将其注释,会出现以下结果:
3.sleep 1 表示每隔一秒覆盖一次之前的内容,如果将其注释,将不会输出任何内容,只会重新开启一个界面,原因是脚本中有clear
4.clear表示重新开启一个新的界面进行脚本中clear下的内容
<11>编写脚本
利用以上命令制作一个计算器要求如下:
执行Calculator.sh
请输入您要操作的数字:
请输入要操作的运算:
请输入要操作的第二个数字:
>>执行后显示操作后的数值<<
方法一(脚本中使用函数):
[root@shenzhen mnt]# vim test.sh
[root@shenzhen mnt]# sh test.sh
脚本中的内容如下:
#!/bin/bash
CAL()
{
echo "your can input +-/*%.... | exit"
read -p "input action: " ACTION
[ "$ACTION" = "exit" ]&&{
echo bye
exit 0
}
read -p "input first number: " FNUM
read -p "input second number: " SNUM
bc <<EOF
$FNUM $ACTION $SNUM
EOF
CAL
}
CAL
方法二(脚本中使用while):
[root@shenzhen mnt]# vim test.sh
[root@shenzhen mnt]# sh test.sh
脚本中的内容如下:
#!/bin/bash
while true
do
echo "your can input +-/*%.... | exit"
read -p "input action: " ACTION
[ "$ACTION" = "exit" ]&&{
echo bye
exit 0
}
read -p "input first number: " FNUM
read -p "input second number: " SNUM
bc <<EOF
$FNUM $ACTION $SNUM
EOF
done
注意:
while 1=1在这里不能使用