shell运算符
基础符号
+:加
-:减
*:乘
/:除
%:取余
++:自增
–:自减
**:幂运算
取余数用法
echo $((RANDOM%20))
自增用法
for((i=1;i<=10;i++));do
echo zls
done
逻辑符号
# 基础逻辑符号
&&:且,前面的命令执行成功后,再执行后面的命令,前面的不成功,则后面的也不执行
||:或,前面的命令执行不成功,才能执行后面的命令,前面的成功,则后面的不执行
!:非,取反
符号 | 作用 |
---|---|
+、- | 加号,减号,一般用于整型、浮点型等类型的运算,其他语言中也可以做字符串的拼 接 |
*、/、% | 乘号、除号、取余,一般用于运算 |
** | 幂运算 |
++、– | 自增、自减,可前置也可后置,默认步长为1 |
&&、||、! | 与、或、非 |
<、<=、>= 、> | 小于、小于等于、大于等于、大于 |
==、!=、= | 等于,可用于数字和字符串、不等于、赋值 |
<<、>> | 向左位移、向右位移 |
~、|、&、^ | 取反、按位或、按位与、按位异或 |
+=、-=、*=、/=、 %= | 赋值运算:a+=1 即 a=a+1 … 依次类推 |
运算方式
方法一:(())
[root@m01 scripts]# for((i=1;i<=10;i++));do echo zls;done
[root@m01 scripts]# echo $((1+1))
2
[root@m01 scripts]# echo $((2.5+0.5))
[root@m01 scripts]# echo $((1/3))
0
## 注意:不能运算浮点型
方法二:let
[root@m01 scripts]# let a=1+1
[root@m01 scripts]# echo $a
2
[root@m01 scripts]# a=3
[root@m01 scripts]# b=4
[root@m01 scripts]# let c=$a+$b
[root@m01 scripts]# echo $c
7
## 注意:不能运算浮点型
方法三: expr
[root@m01 scripts]# expr 2+2
2+2
[root@m01 scripts]# expr 2 + 2
4
[root@m01 scripts]# expr 1 + 1
2
[root@m01 scripts]# expr 1 + 2
3
[root@m01 scripts]# expr 1 \* 2
2
[root@m01 scripts]# expr 4 \* 2
8
#!/bin/bash
# File Name: __expr.sh__
# Version: __v1.1__
# Author: __DriverZeng__
# Mail: __133411023@qq.com__
# Blog: __https://blog.driverzeng.com__
# DateTime: __2021-09-07 12:24__
number=$1
expr $1 + 1 &>/dev/null
[ $? -eq 0 ] && echo '成功' || echo '请输入数字'
## 注意:不能运算浮点型
方法四:bc
[root@m01 scripts]# yum install -y bc
[root@m01 scripts]# echo 1 + 1 |bc
2
[root@m01 scripts]# 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+1
2
2*4
8
2**10
(standard_in) 6: syntax error
2^10
1024
26%5
1
[root@m01 scripts]# echo 2*5|bc
10
## 支持浮点型计算
## 进制转换
[root@m01 scripts]# echo 'obase=2;10'
obase=2;10
[root@m01 scripts]# echo 'obase=2;10'|bc
1010
[root@m01 scripts]# echo 'obase=2;996'|bc
1111100100
[root@m01 scripts]# echo 'obase=16;996'|bc
3E4
[root@m01 scripts]# echo 'obase=16;16'|bc
10
[root@m01 scripts]# echo 'obase=16;9'|bc
9
[root@m01 scripts]# echo 'obase=16;11'|bc
B
[root@m01 scripts]# echo 'obase=16;10'|bc
A
[root@m01 scripts]# echo 'obase=16;13'|bc
D
[root@m01 scripts]# echo 'obase=16;14'|bc
E
方法五:$[忘记它] 效果用方法一
方法6:awk
[root@m01 scripts]# awk 'BEGIN{print 1+2}'
3
[root@m01 scripts]# awk 'BEGIN{print 1+2 3+4}'
37
[root@m01 scripts]# awk 'BEGIN{print 1+2,3+4}'
3 7
[root@m01 scripts]# awk 'BEGIN{print 1+2,3+4,2.5*4}'
3 7 10
[root@m01 scripts]# awk 'BEGIN{print 1+2,3+4,2.5*4,1/3}'
3 7 10 0.333333
作业:计算器
既然我们已经学习了那么多的计算方法,接下来我们就用shell实现一个计算器吧。
需求:
1.脚本只能传递两个参数
2.只能传递数字
3.分别计算出,这两个数字的 和、差、商、积
4.打印出来结果
#第一步:使用read进行交互
read -p "请输入第一个数字: " x
read -p "请输入第二个数字:" y
#第二步:进行第一次判断,判断输入的值是否为空
# -n 判断 是否为非空
# -a 多重条件判断 与
if [ -n "$x" -a -n "$y" ]
then
#第三步:进行第二次判断,判断输入的值是否全是数字
##先定义test1和test2,这里我将x和y中所有数字都替换成空
test1=`echo "$x"|sed "s#^[0-9].*##g"`
test2=`echo "$y"|sed "s#^[0-9].*##g"`
## 第四步:进行第四次判断,如果test1和test2两个数字是否是数字,就可以判断x和y是否是数字
## -z表示如果后面的值为空,则执行后续的条件
if [ -z "$test1" -a -z "$test2" ]
then
echo '两个数字的和: '
awk "BEGIN{print ${x}+${y}}"
echo '两个数字的差: '
awk "BEGIN{print ${x}-${y}}"
echo '两个数字的积: '
awk "BEGIN{print ${x}*${y}}"
echo '两个数字的商: '
awk "BEGIN{print ${x}/${y}}"
else
echo "您输入的不是数字,重新执行脚本"
bash jisuanji.sh
fi
else
echo "您没有数字输入,请重新执行脚本"
bash jisuanji.sh
fi