linux shell 运算符 一览

来源:互联网 发布:精易api编程助手 编辑:程序博客网 时间:2024/05/16 02:44
Shell Operator

shell 和其他编程语言一样,具有多种操作符(赋值操作符、算术运算符、逻辑操作符、关系运算符、位运算符、条件操作符、逗号运算符)。这些操作符可以组成复杂的运算表达式。

赋值操作符

 操作符 描述
 = 初始化或者修改变量的值
 += 追加变量的值
示例 1
test.sh 文件的内容如下
string=hello
string+=" world"
echo $string

在命令提示符下输入 ./test.sh,执行结果如下:
hello world

算术操作符

 操作符 描述
 + 加法运算 - 减法运算 * 乘法运算 / 除法运算(小数点之后的部分被丢弃) % 取模数运算(取余数) ** 幂运算 += 加赋值运算 -= 减赋值运算 *= 乘赋值运算 /=
 除赋值运算 %=
 取模赋值运算 --
 自加运算(分为前缀和后缀形式) 注释 1
 ++
 自减运算(分为前缀和后缀形式) 注释 1
注释 1:shell 的自加、自减操作符在使用上和 c 语言一样。-- 或者 ++ 出现在变量前面是前缀形式,先运算后赋值;-- 或者 ++ 出现在变量后面是后缀形式,先赋值后运算。

shell 中的整型变量是 32 位有符号数,范围为 -2^31 ~ 2^32 -1。如果算术运算的结果超过这个范围将溢出。

示例 2
test.sh 文件的内容如下
let x=2
let y=3
let z=6
let m=$(((x**y+z)/2-1))*x%5
let z*=3
let n=x++
let k=++y

((x++))
((y++))

echo x=$x
echo y=$y
echo z=$z
echo m=$m
echo n=$n
echo k=$k

在命令提示符下输入 ./test.sh,执行结果如下:
x=4
y=5
z=18
m=2
n=2
k=4

在数字常量表达式中,使用 base#number 可以将一个数字从任何进制转换成十进制。

示例 3
test.sh 文件的内容如下
echo binary=$((2#110))
echo ternary=$((3#110))
echo octal=$((8#110))
echo decimal=$((10#110))
echo hexdecimal=$((16#110))

在命令提示符下输入 ./test.sh,执行结果如下:
binary=6
ternary=12
octal=72
decimal=110
hexdecimal=272

逻辑操作符

 操作符 描述 && 逻辑与运算 || 逻辑或运算 !
 逻辑非运算
1 expression1 && expression2,只有两个表达式的运算结果都为非 0 值,逻辑与运算的结果才为 1;否则为 0。
2 expression1 || expression2,只有两个表达式的运算结果都为 0 值,逻辑或运算的结果才为 0;否则为 1。
3 !expression,表达式为非 0 值,则逻辑非运算的结果为 0;否则为 1。
4 逻辑运算的结果只能是 1(true)或者 0(false)。
5 逻辑运算可以用于算术运算和字符串运算上下文。

示例 4
test.sh 文件的内容如下
echo 1\&\&2=$((1&&2))
echo 1\|\|0=$((1||0))
echo 2\&\&0=$((2&&0))
echo \!0=$((!0))
echo \!2=$((!2))

在命令提示符下输入 ./test.sh,执行结果如下:
1&&2=1
1||0=1
2&&0=0
!0=1
!2=0

示例 5
test.sh 文件的内容如下
x=2
y=3

if [ "$x" = 2 ] && [ "$y" = 3 ]
then
 
   echo x=$x and y=$y
else
    echo x\!=$x or y\!=$y
fi

在命令提示符下输入 ./test.sh,执行结果如下:
x=2 and y=3

关系运算符

 操作符 描述 -gt
 数值大于
 -lt
 数值小于
 -ge
 数值大于等于
 -le
 数值小于等于
 -eq
 数值等于
 -ne
 数值不等于
 >
 数值大于 注释 1
 <
 数值小于 注释 1 >=
 数值大于等于 注释 1 <=
 数值小于等于 注释 1 ==
 数值等于 注释 1 !=
 数值不等于 注释 1
注释 1:进行数值比较时需要使用双括号进行算术扩展 ((expression1 OP expression2))。

1 进行数值比较时,可以使用 [ expression1 OP expression2 ],OP 可以为 -gt、-lt、-ge、-le、-eq、-ne。也可以使用 ((expression1 OP expression2)),OP 可以为 >、<、>=、<=、==、!=。这几个关系运算符都是测试整数表达式 expression1 和 expression2 之间的大小关系。
2 >、<、==、!= 也可以进行字符串比较。
3 进行字符串比较时,== 可以使用 = 替代。
4 == 和 != 进行字符串比较时,可以使用 [ string1 OP string2 ] 或者 [[ string1 OP string2 ]] 的形式。
5 > 和 < 进行字符串比较时,需要使用 [[ string1 OP string2 ]] 或者 [ string1 \OP string2 ]。也就是使用 [] 时,> 和 < 需要使用反斜线转义。

示例 6
test.sh 文件的内容如下
let x=2**5
let y=3**2

if [ $x -ge $y ]
then
    echo max=$x
else
    echo max=$y
fi

if (($x == $y))
then
    echo $x equal $y
else
    echo $x not equal $y
fi

在命令提示符下输入 ./test.sh,执行结果如下:
max=32
32 not equal 9

示例 7
test.sh 文件的内容如下
string1=abc
string2=abd

if [ $string1 \> $string2 ]
then
    echo $string1 is greater $string2 with ASCII
else
    echo $string1 is not greater $string2 with ASCII
fi

if [[ $string1 > $string2 ]]
then
    echo $string1 is greater $string2 with ASCII
else
    echo $string1 is not greater $string2 with ASCII
fi

if [ $string1 == $string2 ]
then
    echo $string1 is equal $string2 with ASCII
else
    echo $string1 is not equal $string2 with ASCII
fi

if [[ $string1 = $string2 ]]
then
    echo $string1 is equal $string2 with ASCII
else
    echo $string1 is not equal $string2 with ASCII
fi

在命令提示符下输入 ./test.sh,执行结果如下:
abc is not greater abd with ASCII
abc is not greater abd with ASCII
abc is not equal abd with ASCII
abc is not equal abd with ASCII

位运算符

 操作符 描述 & 按位与运算 | 按位或运算 ^ 按位异或运算 ~ 按位取反运算 << 按位左移运算 >> 按位右移运算 &=
 按位与赋值运算 |=
 按位或赋值运算 ^=
 按位异或赋值运算 <<=
 按位左移赋值运算 >>=
 按位右移赋值运算
1 shell 的位操作符在使用上和 c 语言一样。位操作符在 shell script 中使用频率不是很高。

示例 8
test.sh 文件的内容如下
x=2
y=3
echo x\&y=$((x&y))
echo x\|y=$((x|y))
echo x\^y=$((x^y))
echo \~y=$((~y))
echo x\<\<y=$((x<<y))
echo x\>\>y=$((x>>1))
((x<<=2))
echo x=$x

在命令提示符下输入 ./test.sh,执行结果如下:
x&y=2
x|y=3
x^y=1
~y=-4
x<<y=16
x>>y=1
x=8

条件操作符

 操作符 描述 ? :
 if-then-else-fi 的操作符表达形式
 shell 的条件操作符在使用上和 c 语言一样。形式为 expression1 ? expression2 : expression3。如果表达式 expression1 为真,则条件表达式的值为表达式 expression2 的值;否则为 expression3 的值。
2 expression2 和 expression3 必须是整数算术表达式,不能是字符串。

示例 9
test.sh 文件的内容如下
let x=2**5
let y=3**2

if (($x >= $y))
then
    let max=$x
else
    let max=$y
fi

max1=$(($x>=$y?$x+$y:$x-$y))
echo max_number=$max
echo max_number=$max1

在命令提示符下输入 ./test.sh,执行结果如下:
max_number=32
max_number=41

逗号操作符

 操作符 描述 , 连接多个算术运算
 shell 的逗号操作符在使用上和 c 语言一样。多个算术运算都会被执行,但是只有最后一个算术运算的结果作为整个表达式的结果。
2 逗号操作符主要用于循环操作中。

示例 10
test.sh 文件的内容如下
x=2
y=3
z=$((x++, x+y--))
echo x=$x
echo y=$y
echo z=$z

在命令提示符下输入 ./test.sh,执行结果如下:
x=3
y=2
z=6
原创粉丝点击