zoukankan      html  css  js  c++  java
  • Shell脚本编程基础之shell脚本算术运算

    算术运算

    加减乘除,指数运算,取模等等

    利用$RANDOM生成1-100的随机数

    任意一个随机正整数除以100的余数都是介于0-99之间,再加上1,就是1-100之间的随机数

    [23:11:31 root@C8-3-55 ~]#echo $((RANDOM%100+1))
    50
    [23:16:50 root@C8-3-55 ~]#echo $((RANDOM%100+1))
    40
    [23:16:53 root@C8-3-55 ~]#echo $((RANDOM%100+1))
    20
    [23:16:54 root@C8-3-55 ~]#echo $((RANDOM%100+1))
    3
    [23:16:55 root@C8-3-55 ~]#echo $((RANDOM%100+1))
    24
    

    利用$RANDOM生成随机颜色文本

    [23:44:10 root@C8-3-55 ~]#COLOR=$[RANDOM%7+31];echo -e "E[${COLOR};1m${COLOR}E[0m"
    32
    [23:44:32 root@C8-3-55 ~]#COLOR=$[RANDOM%7+31];echo -e "E[${COLOR};1m${COLOR}E[0m"
    35
    [23:44:34 root@C8-3-55 ~]#COLOR=$[RANDOM%7+31];echo -e "E[${COLOR};1m${COLOR}E[0m"
    31
    [23:44:35 root@C8-3-55 ~]#COLOR=$[RANDOM%7+31];echo -e "E[${COLOR};1m${COLOR}E[0m"
    36
    [23:44:36 root@C8-3-55 ~]#COLOR=$[RANDOM%7+31];echo -e "E[${COLOR};1m${COLOR}E[0m"
    35
    [23:44:37 root@C8-3-55 ~]#COLOR=$[RANDOM%7+31];echo -e "E[${COLOR};1m${COLOR}E[0m"
    32
    

    增强的算术运算let

    [23:44:40 root@C8-3-55 ~]#help let
    let: let 参数 [参数 ...]
        估值算术表达式。
    
        将每个 ARG 参赛作为算术表达式来估值。估值的计算以定宽的整
        数完成,不带溢出检测,不过除 0 是被置陷阱的并且会报一个错
        误。下列操作符被按照相同的算术优先级组合。列表的顺序按照
        优先级从高至低。
    
    
            id++, id--      变量后置加,后置减
            ++id, --id      变量前置加,前置减
            -, +            一元减法,一元加法
            !, ~            逻辑和位取反
            **              指数
            *, /, %         乘法,除法,取余数
            +, -            增加,减少
            <<, >>          向左和向右按位移位
            <=, >=, <, >    比较
            ==, !=          等于,不等于
            &               按位与
            ^               按位异或
            |               按位或
            &&              逻辑与
            ||              逻辑或
            expr ? expr : expr
                            条件操作符
            =, *=, /=, %=,
            +=, -=, <<=, >>=,
            &=, ^=, |=      赋值
    
        Shell 变量允许作为操作数。表达式中的变量的名称会被取代以值
        (强制转换为定宽的整数)。表达式中的变量不需要打开整数属性。
    
        操作符按照优先级进行估值。括号中的子表达式将被先估值,并可取代上述表达式规则。
    
        退出状态:
        如果最后一个 ARG 参数估值为 0,则 let 返回 1; 否则 let 返回 0。
    

    let运算之i++和++i

    • 加号在后,先赋值完了再加
    • 加号在线,先加完了再说
    [23:46:29 root@C8-3-55 ~]#unset j;i=1;let j=i++;echo i=$i j=$j
    i=2 j=1
    [23:51:49 root@C8-3-55 ~]#let j=i++;echo i=$i j=$j
    i=3 j=2
    [23:51:58 root@C8-3-55 ~]#let j=i++;echo i=$i j=$j
    i=4 j=3
    [23:52:00 root@C8-3-55 ~]#let j=i++;echo i=$i j=$j
    i=5 j=4
    [23:52:00 root@C8-3-55 ~]#let j=i++;echo i=$i j=$j
    i=6 j=5
    [23:52:01 root@C8-3-55 ~]#let j=i++;echo i=$i j=$j
    i=7 j=6
    
    [23:52:02 root@C8-3-55 ~]#unset j;i=1;let j=++i;echo i=$i j=$j
    i=2 j=2
    [23:52:27 root@C8-3-55 ~]#let j=++i;echo i=$i j=$j
    i=3 j=3
    [23:52:37 root@C8-3-55 ~]#let j=++i;echo i=$i j=$j
    i=4 j=4
    [23:52:38 root@C8-3-55 ~]#let j=++i;echo i=$i j=$j
    i=5 j=5
    [23:52:38 root@C8-3-55 ~]#let j=++i;echo i=$i j=$j
    i=6 j=6
    [23:52:39 root@C8-3-55 ~]#let j=++i;echo i=$i j=$j
    i=7 j=7
    

    外部运算命令expr

    [01:36:44 root@C8-3-55 ~]#type expr
    expr 是 /usr/bin/expr
    [02:42:06 root@C8-3-55 ~]#expr --help
    用法:expr 表达式
     或:expr 选项
    
          --help            显示此帮助信息并退出
          --version         显示版本信息并退出
    
    将表达式的值列印到标准输出,分隔符下面的空行可提升算式优先级。
    可用的表达式有:
    
      ARG1 | ARG2       若ARG1 的值不为0 或者为空,则返回ARG1,否则返回ARG2
    
      ARG1 & ARG2       若两边的值都不为0 或为空,则返回ARG1,否则返回 0
    
      ARG1 < ARG2       ARG1 小于ARG2
      ARG1 <= ARG2      ARG1 小于或等于ARG2
      ARG1 = ARG2       ARG1 等于ARG2
      ARG1 != ARG2      ARG1 不等于ARG2
      ARG1 >= ARG2      ARG1 大于或等于ARG2
      ARG1 > ARG2       ARG1 大于ARG2
    
      ARG1 + ARG2       计算 ARG1 与ARG2 相加之和
      ARG1 - ARG2       计算 ARG1 与ARG2 相减之差
    
      ARG1 * ARG2       计算 ARG1 与ARG2 相乘之积
      ARG1 / ARG2       计算 ARG1 与ARG2 相除之商
      ARG1 % ARG2       计算 ARG1 与ARG2 相除之余数
    
      字符串 : 表达式               定位字符串中匹配表达式的模式
    
      match 字符串 表达式           等于"字符串 :表达式"
      substr 字符串 偏移量 长度     替换字符串的子串,偏移的数值从 1 起计
      index 字符串 字符             在字符串中发现字符的地方建立下标,或者标0
      length 字符串                 字符串的长度
      + TOKEN                    interpret TOKEN as a string, even if it is a
                                   keyword like 'match' or an operator like '/'
    
      ( EXPRESSION )             value of EXPRESSION
    
    请注意有许多运算操作符都可能需要由 shell 先实施转义。
    如果参与运算的 ARG 自变量都是数字,比较符就会被视作数学符号,否则就是多义的。
    模式匹配会返回""和""之间被匹配的子字符串或空(null);如果未使用""和"",
    则会返回匹配字符数量或是 0。
    
    若表达式的值既不是空也不是 0,退出状态值为 0;若表达式的值为空或为 0,
    退出状态值为 1。如果表达式的句法无效,则会在出错时返回退出状态值 3。
    

    利用shell计算鸡兔同笼

    上三十五头,下九十四足,求鸡兔各多少只。

    [02:42:15 root@C8-3-55 ~]#vim cr_v1.0.sh
    
    [02:54:52 root@C8-3-55 ~]#bash cr_v1.0.sh 35 94
    Rabbit:12
    Chook:23
    [02:55:05 root@C8-3-55 ~]#cat cr_v1.0.sh
    #!/bin/bash
    HEAD=$1
    FOOT=$2
    R=$[(FOOT-2*HEAD)/2]
    C=$[HEAD-R]
    echo "Rabbit:$R"
    echo "Chook:$C"
    
    * * * 胖并快乐着的死肥宅 * * *
  • 相关阅读:
    Hanoi塔
    采药
    进制转换(大数)
    Load Balancing with NGINX 负载均衡算法
    upstream模块实现反向代理的功能
    epoll
    在nginx启动后,如果我们要操作nginx,要怎么做呢 别增加无谓的上下文切换 异步非阻塞的方式来处理请求 worker的个数为cpu的核数 红黑树
    粘性会话 session affinity sticky session requests from the same client to be passed to the same server in a group of servers
    负载均衡 4层协议 7层协议
    A Secure Cookie Protocol 安全cookie协议 配置服务器Cookie
  • 原文地址:https://www.cnblogs.com/bpzblog/p/14536784.html
Copyright © 2011-2022 走看看