新技术论坛
搜索
查看: 560|回复: 1
打印 上一主题 下一主题

shell教程之一:变量赋值和算法

[复制链接]
  • TA的每日心情

    2016-7-1 19:50
  • 签到天数: 81 天

    连续签到: 1 天

    [LV.6]常住居民II

    扫一扫,手机访问本帖
    楼主
    跳转到指定楼层
    发表于 2016-3-13 14:30:57 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

    Bash 支持使用整数的 shell 算法。您可以将一个表达式计算为算术值,并使用 let内建命令将它赋给一个变量。您可以明确将变量声明为整数变量,未来对它的赋值将会计算为整数表达式。 例子 1显示了两种方法的示例和一些细微区别。
    例子 1. 变量赋值和算法
    1.      cxz@a8z8.com:~$ x=3+4

    2.      cxz@a8z8.com:~$ let y=5*10

    3.      cxz@a8z8.com:~$ declare -i z=5*4/3

    4.      cxz@a8z8.com:~$ echo $x $y $z

    5.      3+4 50 6

    6.      cxz@a8z8.com:~$ # Use declare -p to show more information

    7.      cxz@a8z8.com:~$ declare -p x y z

    8.      declare -- x="3+4"

    9.      declare -- y="50"

    10.      declare -i z="6"
    复制代码

    请注意,只有变量 z被声明为整数。
    您可以在 shell 算法中使用大部分 C 或 C++ 算术运算符,包括逐位和逻辑运算符。您可以使用前和后增量运算符,以及常用的 C 或 C++ 幅值运算符,比如 +=、&&=和 |=。如果需要将运算分组,可以使用圆括号。如果愿意的话,可以使用 let和 declare在一行中为多个变量赋值。如果希望在一个算术表达式中使用一个变量值,则不需要在变量名前使用 $,但是,如果您愿意的话,也可以这么做。 例子 2给出了 bash 中的更多算法例子。
    例子 2. 更多算术赋值例子
    1.      cxz@a8z8.com:~$ declare -i p q r

    2.      cxz@a8z8.com:~$ let p=" x + 7 " q=" (y * 2**4) / 100 "

    3.      cxz@a8z8.com:~$ q=" 2**z - (50 /3 ) + 7%4 "

    4.      cxz@a8z8.com:~$ r=4

    5.      cxz@a8z8.com:~$ r+=" q + ( 17 > 4) "

    6.      cxz@a8z8.com:~$ echo $p $q $r

    7.      14 51 56

    8.      cxz@a8z8.com:~$ declare -p p q r

    9.      declare -i p="14"

    10.      declare -i q="51"

    11.      declare -i r="56"

    12.      cxz@a8z8.com:~$ let t=3 u=p+q

    13.      cxz@a8z8.com:~$ echo $t $u

    14.      3 65

    15.      cxz@a8z8.com:~$ declare -p t u

    16.      declare -- t="3"

    17.      declare -- u="65"
    复制代码

    请注意,=符号左边不能有空格,而且它的右边任何包含空格的内容都必须放在单引号或双引号中。您可以使用 (( ))结构来进行赋值,从而扩展这些规则。您不需要转义 ((和 ))之间的运算符。 例子 3显示了如果在错误的位置拥有空格会发生的情况,以及如何使用 (( ))来缓解该问题。
    例子 3. 算法、空格和 (( ))
    1. cxz@a8z8.com:~$ declare -i t

    2. cxz@a8z8.com:~$ t= 3**3 % 5

    3. 3**3: command not found

    4. cxz@a8z8.com:~$ t = 3**3 % 5

    5. t: command not found

    6. cxz@a8z8.com:~$ (( t = 3**3 % 5 ))

    7. cxz@a8z8.com:~$ echo $t

    8. 2

    9. cxz@a8z8.com:~$ # Logical expression using unescaped shell meta characters

    10. cxz@a8z8.com:~$ (( u = ( 3 > 5 ) || ( 4 < 6 ) ))

    11. cxz@a8z8.com:~$ echo $u

    12. 1
    复制代码




    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    手机版|Archiver|开发者俱乐部 ( ICP/ISP证:辽B-2-4-20110106号 IDC证:辽B-1-2-20070003号 )

    GMT+8, 2024-12-23 09:56 , Processed in 0.133777 second(s), 21 queries .

    X+ Open Developer Network (xodn.com)

    © 2009-2017 沈阳讯网网络科技有限公司

    快速回复 返回顶部 返回列表