• Linux中的算术运算


    快捷查看指令 ctrl+f 进行搜索会直接定位到需要的知识点和命令讲解(如有不正确的地方欢迎各位小伙伴在评论区提意见,博主会及时修改)

    算术运算

    算数运算符
    + - 加法减法
    * / % 乘法 取商 取模(取余)  例如:5除以2 商是2 余数()是 1 5/2-----2 5%2-----1
    ** 幂运算 例如:5的2次方 5**2------25 5的3次方 5**3------125
    ++ -- 操作数自身增加或者减少1 例如: a++ ++a
    && || ! 逻辑与 逻辑或 取反
    < > <= >= == =(对于字符串也相当于比较) != 小于 大于 小于等于 大于等于 等于 不等于
    = += -= *= /= %= 赋值运算符 num=1 num+=1 num*=3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    算数运算指令
    (()) 	经常用于整数运算 效率很高
    let 	用于整数运算 等同于 (())
    expr 	可用于整数运算,还有其他额外功能
    bc [需要先安装] Linux下的一个计算器程序(适合整数以及小数运算)
    $[] 	用于整数运算
    
    • 1
    • 2
    • 3
    • 4
    • 5
    算数运算符与算数运算指令
    ((i=i+1)) 运算后赋值。将 i+1 的运算结果赋值给变量 i 若要打印 echo $((i=i+1))
    i=$((i+1)) 将表达式运算后的结果赋值给 i
    ((8>7&&5==5)) 可以进行比较操作 还可以加入逻辑与 逻辑或 经常用于条件判断
    echo $((2+1)) 打印输出运算表达式的结果 需要在 (())前添加 $
    
    • 1
    • 2
    • 3
    • 4
    • 5
    案例:
    ## 1.有关逻辑运算 真(1) 假(0)
    [root@bai ~]# echo $((8>7))
    1
    [root@bai ~]# echo $((6>7))
    0
    ## 2. 逻辑运算符的演示 && || !
    [root@bai ~]# echo $((6>7&&3>4))
    0
    [root@bai ~]# echo $((6>7||3<4))
    1
    [root@bai ~]# echo $((7>6&&5>4))
    1
    [root@bai ~]# echo $[!((id))] #i=1;a=2;b=3;d=4
    0
    ## 3.算数运算
    [root@bai ~]# echo $((3+4))  # 加法
    7
    [root@bai ~]# echo $((3-4))  # 减法
    -1
    [root@bai ~]# echo $((3*4))  # 乘法
    12
    [root@bai ~]# echo $((4/3))  # 取商(取整)
    1
    [root@bai ~]# echo $((4%3))  # 取模(取余)
    1
    ## 4. 幂运算
    [root@bai ~]# echo $((5**2))
    25
    [root@bai ~]# echo $((5**3))
    125
    ## 5. 给变量赋值
    [root@bai ~]# num=100
    [root@bai ~]# ((num=num*3))
    [root@bai ~]# echo $num
    300
    ## 6. 小数运算
    [root@bai ~]# ((c=1+100+2**3+1.2))
    -bash: ((: c=1+100+2**3+1.2: 语法错误: 无效的算术运算符 (错误符号是 ".2")
    注意:
    (()) 只能对整数进行运算 -----> 小数运算需要使用 bc
    ## 7.特殊符号运算
    ++ 变量自增1
    -- 变量自减1
    a++ 先对变量a操作,然后再让a自增1
    ++a 先让a自增1,然后再复制给
    [root@bai ~]# a=5
    [root@bai ~]# echo $((++a))
    6
    [root@bai ~]# echo $a
    6
    [root@bai ~]# b=5
    [root@baizhi ~]# echo $((b++))
    5
    [root@baizhi ~]# echo $b
    6
    [root@bai ~]# c=5
    [root@bai ~]# echo $((c--))
    5
    [root@bai ~]# echo $c
    4
    [root@bai ~]# d=5
    [root@bai ~]# echo $((--d))
    4
    [root@bai ~]# echo $d
    4
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    let的使用
    ## let 对变量的数值运算
    [root@bai ~]# num=5
    [root@bai ~]# let num=num+4
    [root@bai ~]# echo $num
    9
    [root@bai ~]# let num+=1.2
    -bash: let: num+=1.2: 语法错误: 无效的算术运算符 (错误符号是 ".2"
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    expr
    ## expr命令不太好用,基于空格传入参数 但是在shell中一些字符具备特殊含义
    [root@bai ~]# expr 5+3
    5+3
    [root@bai ~]# expr 5 + 3
    8
    [root@bai ~]# expr 5 * 3
    expr: 语法错误
    [root@bai ~]# expr 5 \* 3
    15
    [root@bai ~]# expr 5 \> 6
    0
    [root@bai ~]# expr 8 \> 6
    1
    ## 注意 : 数值与运算符号之间需要加空格 运算符很容易识别失败 需要转义
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    expr内置函数
    length函数
    ## 案例
    [root@bai ~]# expr length 123456789
    9
    [root@bai ~]# size="123456789"
    [root@bai ~]# expr length $size
    9
    [root@bai ~]# size="123456789 " 
    [root@bai ~]# expr length $size # 空格也算字符
    9
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    expr模式匹配
    expr指令支持模式匹配功能
    两个特殊符号
    : 冒号用于计算字符串的字符数量 gaosc 5个字符
    .* 任意的字符串重复0次或多次
    最后的模式 支持自定义
    ## 语法
    expr 字符串 ":" ".*"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    案例:
    ## 根据指定的字符获取 包括字符在内 字符及字符之前的 数量
    [root@bai ~]# expr test.jpg ":" ".*"
    8
    [root@bai ~]# expr test.jpg ":" ".*j"
    6
    [root@bai ~]# expr test.jpg ":" ".*p"
    7
    [root@bai ~]# expr yc.png ":" ".*\.png"
    6
    [root@bai ~]# expr yc.png ":" ".*\.jpg"
    0
    [root@bai ~]# expr yc.jptg ":" ".*\.jpg"
    0
    [root@bai ~]# expr yc.jpggggggggggggggggggg ":" ".*\.jpg"
    6
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    bc指令
    # 1. 安装 bc 软件
    yum -y install bc
    # 2.使用计算器
    bc
    
    • 1
    • 2
    • 3
    • 4
    bc命令结合管道符来计算
    案例1:
    [root@bai ~]# echo "4*4"
    4*4
    [root@bai ~]# echo "4*4" | bc
    16
    [root@bai ~]# echo "4.2*4" | bc
    16.8
    [root@bai ~]# num=5
    [root@bai ~]# echo $num*1.2 | bc
    6.0
    [root@bai ~]# result=`echo $num*1.2 | bc`
    [root@bai ~]# echo $result
    6.0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    案例2:
    ## 计算1~1000的和
    数学公式
    1+2+3+4+5+6+...+999+1000
    方法1:
    ## 1.先想办法获取这些操作数
    [root@bai ~]# echo {1..1000}
    ## 2.将数字之间的空格替换为 +
    [root@bai ~]# echo {1..1000} | tr " " "+"
    ## 3.将上一步处理以后的字符串交给 bc 进行运算
    [root@bai ~]# echo {1..1000} | tr " " "+" | bc
    500500
    方法2:
    [root@bai ~]# seq -s "+" 1000 | bc
    500500
    方法3:
    [root@bai ~]# echo $((`seq -s "+" 1000`))
    500500
    ###补充
    seq 数字 # 打印1 2 3 4 5 ... 数字 数字之间分隔符默认为换行
    seq -s 数字连接符 数字 # 指定连接符连接 1 2 3 4.... 数字
    ### 例如
    seq -s "+" 10
    输出 1+2+3+4+5+6+7+8+9+10
    方法4:
    [root@bai ~]# seq -s " + " 1000 | xargs expr
    500500
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    read指令
    可以在程序运行过程中,程序员输入数据
    
    • 1
    ## 从标准输入中读取数据并赋值给指定变量
    # 语法 read 变量名
    [root@bai ~]# read var
    123 # 借助键盘标注输入设备,录入数据以后 保存在 var变量中
    [root@bai ~]# echo $var
    123
    ## 从标准输入中输入多个值(用空格间隔),回车输入结束 第一个值给变量1 后续所有的值给变量2
    ## 语法 read 变量1 变量2
    [root@bai ~]# read first last
    123 456 789 000 111 222
    [root@bai ~]# echo $first
    123 # first保存第一个值
    [root@bai ~]# echo $last
    456 789 000 111 222 # 其余的值存入 last变量中
    [root@bai ~]# read a b c # a b两个变量中各存一个值 其余赋值给 c
    123 456 789 123
    [root@bai ~]# echo $a
    123
    [root@bai ~]# echo $b
    456
    [root@bai ~]# echo $c
    789 123
    
    ## 若read后未指定变量名,则数据赋值给变量 REPLY
    [root@bai ~]# read
    123
    [root@bai ~]# echo $REPLY
    123
    
    ## 把多个值存入一个变量中
    语法:
    read -a 变量
    [root@bai ~]# read -a array
    123 456 789 456 789 123 000
    [root@bai ~]# echo ${array[0]}
    123
    [root@bai ~]# echo ${array[6]}
    000
    [root@bai ~]# echo ${array[@]}
    123 456 789 456 789 123 000
    
    ## 限定输入读取的时长
    语法:
    	read -t 时间 变量
    ## 测试数据
    read.sh
    #!/bin/bash
    echo "请在五秒内完成密码录入并回车,请输入密码:"
    read -t 5 passwd ## 在5秒内完成信息录入并回车 否则数据不会保存
    echo "--------------------------"
    echo "您输入的密码为:"$passwd
    ## 操作界面
    [root@bai bai]# ./read.sh
    请在五秒内完成密码录入并回车,请输入密码:
    123456
    --------------------------
    您输入的密码为:123456
    
    ## 允许输入反斜杠
    语法:
    	read -r 变量名
    [root@bai bai]# read var
    123 \
    >
    [root@bai bai]# read -r var
    123 \ 123 \ 123
    
    
    ## 默认是 回车键代表结束输入
    read -d "符号" 变量名
    [root@bai bai]# read -d ":" var
    123 :[root@bai bai]# read -d ":" var
    123
    ## 此时回车结束符被 冒号 覆盖
    
    ## 从标准输入中读取两个字符 并存入变量 不需要按回车读取结束
    语法:
    read -n 2 变量名
    [root@bai bai]# read -n 2 var
    12
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
  • 相关阅读:
    Vue.js的单向数据流:让你的应用更清晰、更可控
    massCode设置中文
    virtualbox给CentOS7虚拟机磁盘扩容
    Ajax系列之文件上传图片即时预览
    [工具]工控机磁盘容量监控通知工具
    前端入门--JavaScript篇
    JavaScript 67 JavaScript HTML DOM 67.11 JavaScript HTML DOM 导航
    一篇打通线程 等待 && 中断
    Pytorch笔记之回归
    CocosCreator3.8研究笔记(十八)CocosCreator UI组件(二)
  • 原文地址:https://blog.csdn.net/weixin_52198548/article/details/134407687