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"
    
    * * * 胖并快乐着的死肥宅 * * *
  • 相关阅读:
    win7,win8,win8.1修复IE浏览器的建议
    推荐给.net程序员的学习网站
    OLTP与OLAP
    profiler列名的具体意义
    sp_reset_connection
    IDENTITY
    【读书笔记】Android Handler和Looper流程
    Android视频/音频缓存框架AndroidVideoCache
    Android KeyStore格式转换工具
    使用Android Studio开发NDK
  • 原文地址:https://www.cnblogs.com/bpzblog/p/14536784.html
Copyright © 2011-2022 走看看