zoukankan      html  css  js  c++  java
  • shell括号和linux算术运算

    一、小括号()

    1、 单小括号()

    a).命令组

    (a=0;touch a.txt)

    小括号中的内容会开启一个子shell独立运行;括号中以分号连接,最后一个命令不需要;各命令和括号无空格

    b).命令替换$()

          等于``

    c).用于初始化数组。

    [root@drbd-s scripts]# y=(a b c d)   

    [root@drbd-s scripts]# echo ${y[3]}

    d

    [root@drbd-s scripts]# echo ${y[*]}  #获取所有数组

    a b c d

    2、 双小括号((  ))   加上$做算术运算

    1. 省去$符号的算数运算,比较  + - 

    for((i=0;i<5;i++))

    [root@drbd-s scripts]# for ((i=0;i<5;i++));do echo $i;done

    if (($i<5))

    a=5; ((a++)) 可将 $a 重定义为6

    括号内支持多个表达式用逗号分开。

    b.) 跨进制运算

    二进制、八进制、十六进制运算时,输出结果全都自动转化成了十进制。如:echo $((16#5f)) 结果为95 (16进位转十进制)

    二、中括号

    1、单中括号[ ]  加上$做算术运算

    字符串比较——==和!=

    整数比较——不等于:-gt:大于;-lt :小于;-eq:等于;-ne

    数组索引——array[0]

    2.双中括号[[]]

    • 字符串比较——可以把右边的作为一个模式,而不仅仅是一个字符串[[ hello == hell? ]],结果为真。[[ ]] 中匹配字符串或通配符,不需要引号。

    逻辑运算符——防止脚本许多逻辑错误,比如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错。比如可以直接使用if [[ $a != 1 && $a != 2 ]], 如果不适用双括号, 则为if [ $a -ne 1] && [ $a != 2 ]或者if [ $a -ne 1 -a $a != 2 ]。

    三、大括号{}

    创建匿名函数——不会新开进程,括号内变量余下仍可使用。括号内的命令间用分号隔开,最后一个也必须有分号。{}的第一个命令和左括号之间必须要有一个空格。

    [root@drbd-s scripts]# { p=q;}

    [root@drbd-s scripts]# echo $p

    四、符号$后的括号

    (1)${a} 变量a的值, 在不引起歧义的情况下可以省略大括号。

    ${ } 用来作变量替换。

    一般情况下,$var 与 ${var} 并没有啥不一样。

    但是用 ${ } 会比较精确的界定变量名称的范围,比方说:

    $ A=B

    $ echo $AB

    原本是打算先将 $A 的结果替换出来,然后再补一个 B 字母于其后,

    但在命令行上,真正的结果却是只会提换变量名称为 AB 的值出来…

    若使用 ${ } 就没问题了:

    $ echo ${A}B

    BB

    (2)$(cmd) 命令替换,和`cmd`效果相同,结果为shell命令cmd的输,过某些Shell版本不支持$()形式的命令替换, 如tcsh。

    (3)$((expression)) 和`exprexpression`效果相同, 计算数学表达式exp的数值, 其中exp只要符合C语言的运算规则即可, 甚至三目运算符和逻辑表达式都可以计算。

    linux shell 算术运算

    1:使用 expr 外部程式

    加法 r=`expr 4 + 5`

    echo $r

    注意! '4' '+' '5' 这三者之间要有空白

    r=`expr 4 * 5` #错误

    乘法 r=`expr 4 * 5`

    带括号的

    expr ( 5 - 3 ) * 3 + 1

    2:使用 $(( ))

    r=$(( 4 + 5 ))

    echo $r

    3:使用 $[ ]

    r=$[ 4 + 5 ]

    echo $r

    乘法

    r=`expr 4 * 5`

    r=$(( 4 * 5 ))

    r=$[ 4 * 5 ]

    echo $r

    除法

    r=`expr 40 / 5`

    r=$(( 40 / 5 ))

    r=$[ 40 / 5 ]

    echo $r

    减法

    r=`expr 40 - 5`

    r=$(( 40 - 5 ))

    r=$[ 40 - 5 ]

    echo $r

    求余数

    r=$[ 100 % 43 ]   列子::7%3 余数为1

    echo $r

    乘幂 (如 2 的 3 次方)

    r=$(( 2 ** 3 ))

    r=$[ 2 ** 3 ]

    echo $r

    注:expr 沒有乘幂

    4:使用let 命令

    加法:

    n=10

    let n=n+1

    echo $n #n=11

    # let I_D="$I_D"+"$II_D"

    乘法:

    let m=n*10

    echo $m

    除法:

    let r=m/10

    echo $r

    求余数:

    let r=m%7

    echo $r

    乘冪:

    let r=m**2

    echo $r

    虽然Bash shell 有四种算术运算方法,但并不是每一种都是跨平台的,建议使用expr。

    另外,我们在 script 中经常有加1操作,以下四法皆可:

    m=$[ m + 1]

    m=`expr $m + 1`

    m=$(($m + 1))

    let m=m+1

    另外,还可以使用bc

    m=`echo "( $a - 1 )*$b +1" |bc`

    5.bc命令

    [root@drbd-s scripts]# echo 59*3 |bc

    177

    [root@drbd-s scripts]# echo 59/3 |bc

    19

    [root@drbd-s scripts]# echo "59/3" |bc

    19

  • 相关阅读:
    python模块导入
    linux总结shell
    linux和shell关系
    gdb调试工具
    C语言.c和.h
    CSS cursor 属性
    html dom SetInterVal()
    css hover伪类选择器与JQuery hover()方法
    CSS 清除浮动 clear 属性
    block,inline和inline-block概念和区别
  • 原文地址:https://www.cnblogs.com/chuangcc/p/10521313.html
Copyright © 2011-2022 走看看