陈斌彬的技术博客

Stay foolish,stay hungry

Bash - 操作符

一、赋值

1.变量赋值

= 通用赋值操作符,可用于算术和字符串赋值。

var=27
category=minerals  # 在"="之后是不允许出现空白字符的.

不要混淆 = 赋值操作符与 = 测试操作符。也正是因为这一点,在 bash 里面测试操作符也常写作==,但这可能在其它 shell 中是不允许的

#    = 在这里是测试操作符

if [ "$string1" = "$string2" ]
# if [ "X$string1" = "X$string2" ] 是一种更安全的做法,
# 这样可以防止两个变量中的一个为空所产生的错误.
# (字符"X"作为前缀在等式两边是可以相互抵消的.)
then
  command
fi

二、算术操作符

1.简单算术操作符

操作符 说明

+   加法计算
-   减法计算
*   乘法计算
/   除法计算
**  幂运算
%   模运算,或者是求余运算(返回一次除法运算的余数)

2.其他算术操作符

+= “加-等于”(把变量的值增加一个常量然后再把结果赋给变量)

let "var += 5" # var变量的值会在原来的基础上加5

-= “减-等于”(把变量的值减去一个常量然后再把结果赋给变量) *= “乘-等于”(先把变量的值乘以一个常量的值,然后再把结果赋给变量)

let "var *= 4" # var变量的结果将会在原来的基础上乘以4

/= “除-等于”(先把变量的值除以一个常量的值,然后再把结果赋给变量) %= “取模-等于”(先对变量进行模运算,即除以一个常量取模,然后把结果赋给变量)

3.使用算术操作符

$ vim test.sh

输入代码:

#!/bin/bash
# 使用10种不同的方法计数到11.输出结果均为12

n=1; echo -n "$n "

let "n = $n + 1"   # let "n = n + 1"  也可以.
echo -n "$n "


: $((n = $n + 1))
#  ":" 是必需的, 因为如果没有":"的话,
# Bash将会尝试把"$((n = $n + 1))"解释为一个命令.
echo -n "$n "

(( n = n + 1 ))
#  上边这句是一种更简单方法.
echo -n "$n "

n=$(($n + 1))
echo -n "$n "

: $[ n = $n + 1 ]
#  ":" 是必需的, 因为如果没有":"的话,
#+ Bash将会尝试把"$[ n = $n + 1 ]"解释为一个命令.
#  即使"n"被初始化为字符串, 这句也能够正常运行.
echo -n "$n "

n=$[ $n + 1 ]
#  即使"n"被初始化为字符串, 这句也能够正常运行.
#* 应该尽量避免使用这种类型的结构, 因为它已经被废弃了, 而且不具可移植性.
echo -n "$n "

# 现在来一个C风格的增量操作.

let "n++"          # let "++n"  也可以.
echo -n "$n "

(( n++ ))          # (( ++n )  也可以.
echo -n "$n "

: $(( n++ ))       # : $(( ++n )) 也可以.
echo -n "$n "

: $[ n++ ]         # : $[[ ++n ]] 也可以.
echo -n "$n "

echo

exit 0

程序截图:

img

运行代码:

$ bash test.sh

img

三、位操作符

1.简介

<< 左移一位(每次左移都相当于乘以2)

<<= “左移-赋值”

let "var <<= 2" #这句的结果就是变量var左移2位(就是乘以4)

\>> 右移一位(每次右移都将除以2)

\>>= “右移-赋值”(与<<=正好相反)

& 按位与

&= “按位与-赋值”

| 按位或

|= “按位或-赋值”

按位反

! 按位非

^ 按位异或 XOR

^= “按位异或-赋值”

四、逻辑操作符

1.简介

  • && 与(逻辑)
  • || 或(逻辑)

2.使用 && 和 || 进行混合条件测试

$ vim test.sh

输入代码:

#!/bin/bash

a=24
b=47

if [ "$a" -eq 24 ] && [ "$b" -eq 47 ]
then
 echo "Test #1 succeeds."
else
 echo "Test #1 fails."
fi


if [ "$a" -eq 98 ] || [ "$b" -eq 47 ]
then
 echo "Test #2 succeeds."
else
 echo "Test #2 fails."
fi


#  -a和-o选项提供了一种可选的混合条件测试的方法. -a 等于 && , -o 等于 ||

if [ "$a" -eq 24 -a "$b" -eq 47 ]
then
 echo "Test #3 succeeds."
else
 echo "Test #3 fails."
fi


if [ "$a" -eq 98 -o "$b" -eq 47 ]
then
 echo "Test #4 succeeds."
else
 echo "Test #4 fails."
fi


a=rhino
b=crocodile
if [ "$a" = rhino ] && [ "$b" = crocodile ]
then
 echo "Test #5 succeeds."
else
 echo "Test #5 fails."
fi

exit 0

程序截图:

img

运行代码:

$ bash test.sh

img

五、混杂的操作符

1.简介

, 逗号操作符

逗号操作符可以连接两个或多个算术运算。所有的操作都会被运行(可能会有负作用),但是只会返回最后操作的结果。

let "t1 = ((5 + 3, 7 - 1, 15 - 4))"
echo "t1 = $t1"               # t1 = 11

let "t2 = ((a = 9, 15 / 3))"  # 设置"a"并且计算"t2".
echo "t2 = $t2    a = $a"     # t2 = 5    a = 9

程序截图:

img

运行:

img