算术运算
算数表达式相关符号
+
- 加
-
- 减
*
- 乘
/
- 除
**
- 乘方
%
- 取余
++
- 自增,将变量的值加1
什么是i++,什么是++i
i++ 和 ++i 都是一元运算符,用于将变量 i 的值加1。
i++ 表示先取变量 i 的当前值,然后再将 i 的值加1,也就是说先使用变量的值再进行自增操作。例如:
i=5
echo $i # 输出 5
echo $((i++)) # 输出 5
echo $i # 输出 6++i 表示先将 i 的值加1,然后再取 i 的新值,也就是说先进行自增操作再使用变量的值。例如:
i=5
echo $i # 输出 5
echo $((++i)) # 输出 6
echo $i # 输出 6在 Shell 中,i++ 和 ++i 这两个运算符的作用与使用场景与其他编程语言中的用法是相同的。它们通常用于循环、条件判断等语句中,用来控制变量的值和执行流程。
i++和++i的区别
i++ 和 ++i 都是一元运算符,用于将变量 i 的值加1。它们的区别在于它们执行自增操作的时机不同。
i++ 是后置自增运算符,表示先使用变量的值,然后再将变量的值加1。例如,假设 i 的初始值为5,执行 j = i++,则 j 的值为5,而 i 的值变为6。
++i 是前置自增运算符,表示先将变量的值加1,然后再使用变量的新值。例如,假设 i 的初始值为5,执行 j = ++i,则 j 的值为6,而 i 的值也是6。
因此,i++ 和 ++i 的结果不同,尤其是在赋值语句中。在循环语句中,如果使用 i++,则循环会先执行循环体,然后再将 i 的值加1;而如果使用 ++i,则循环会先将 i 的值加1,然后再执行循环体。这些细微的差别可以根据具体的编程需要进行选择。
什么是一元运算
一元运算是指只需要一个操作数就能进行计算的运算。在计算机编程中,一元运算通常是通过一元运算符来实现的,一元运算符只作用于一个操作数。
在 Shell 编程中,常见的一元运算符有:
- 自增运算符 ++:用于将变量的值加1。
- 自减运算符 –:用于将变量的值减1。
- 取反运算符 !:用于对布尔值取反。
- 算术取反运算符 -:用于对数值进行取反。
- 位取反运算符 ~:用于对二进制数进行按位取反。
一元运算常常用在循环、条件语句、赋值语句等地方,用于对变量的值进行修改或处理。
–
- 自减,将变量的值减1
什么是i–,什么是–i
i-- 和 --i 都是一元运算符,用于将变量 i 的值减1。
i-- 表示先取变量 i 的当前值,然后再将 i 的值减1,也就是说先使用变量的值再进行自减操作。例如:
i=5
echo $i # 输出 5
echo $((i--)) # 输出 5
echo $i # 输出 4--i 表示先将 i 的值减1,然后再取 i 的新值,也就是说先进行自减操作再使用变量的值。例如:
i=5
echo $i # 输出 5
echo $((--i)) # 输出 4
echo $i # 输出 4在 Shell 中,i-- 和 --i 这两个运算符的作用与使用场景与其他编程语言中的用法是相同的。它们通常用于循环、条件判断等语句中,用来控制变量的值和执行流程。
与 i++ 和 ++i 相似,i-- 和 --i 也是有区别的,i-- 是后置自减运算符,表示先使用变量的值,然后再将变量的值减1;--i 是前置自减运算符,表示先将变量的值减1,然后再使用变量的新值。
i–和–i的区别
i-- 和 --i 都是一元运算符,用于将变量 i 的值减1。它们的区别在于它们执行自减操作的时机不同。
i-- 是后置自减运算符,表示先使用变量的值,然后再将变量的值减1。例如,假设 i 的初始值为5,执行 j = i--,则 j 的值为5,而 i 的值变为4。
--i 是前置自减运算符,表示先将变量的值减1,然后再使用变量的新值。例如,假设 i 的初始值为5,执行 j = --i,则 j 的值为4,而 i 的值也是4。
因此,与 i++ 和 ++i 相似,i-- 和 --i 也有区别,它们在赋值语句中会产生不同的结果。在循环语句中,如果使用 i--,则循环会先执行循环体,然后再将 i 的值减1;而如果使用 --i,则循环会先将 i 的值减1,然后再执行循环体。这些细微的差别可以根据具体的编程需要进行选择。
+=
在Shell编程中,+= 是一种赋值运算符,它可以用来给变量加上一个值,并将计算结果赋值给该变量。+= 的语法形式如下:
variable+=valuevariable表示要被加值的变量value表示要加上的值
例如,假设变量 num 的初始值为5,执行 num+=3 将会把3加到变量 num 的值上,得到8,相当于执行了 num=num+3,代码示例如下:
num=5
num+=3 # 等价于 num=num+3,即 num=5+3=8
echo $num # 输出 8+= 运算符可以用于各种数据类型的变量,包括整数、浮点数和字符串。例如:
## 对整数变量的使用
x=10
x+=5
echo $x # 输出 15
## 对浮点数变量的使用
y=3.14
y+=1.23
echo $y # 输出 4.37
## 对字符串变量的使用
str="hello"
str+=" world"
echo $str # 输出 "hello world"使用 += 运算符可以使代码更简洁、易读,并且减少代码量,因此在Shell编程中经常会使用该运算符。
-=
在Shell编程中,-= 是一种赋值运算符,它可以用来从变量中减去一个值,并将计算结果赋值给该变量。-= 的语法形式如下:
variable-=value其中 variable 表示要被减值的变量,value 表示要减去的值。
例如,假设变量 num 的初始值为10,执行 num-=3 将会从变量 num 的值中减去3,得到7,相当于执行了 num=num-3,代码示例如下:
num=10
num-=3 # 等价于 num=num-3,即 num=10-3=7
echo $num # 输出 7-= 运算符可以用于各种数据类型的变量,包括整数、浮点数和字符串。例如:
## 对整数变量的使用
x=10
x-=5
echo $x # 输出 5
## 对浮点数变量的使用
y=3.14
y-=1.23
echo $y # 输出 1.91
## 对字符串变量的使用
str="hello world"
str=${str%"world"} # 从字符串尾部删除 "world"
echo $str # 输出 "hello "使用 -= 运算符可以使代码更简洁、易读,并且减少代码量,因此在Shell编程中经常会使用该运算符。
*=
在Shell编程中,*= 是一种赋值运算符,它可以用来给变量乘以一个值,并将计算结果赋值给该变量。*= 的语法形式如下:
variable*=value其中 variable 表示要被乘的变量,value 表示要乘上的值。
例如,假设变量 num 的初始值为5,执行 num*=3 将会把3乘到变量 num 的值上,得到15,相当于执行了 num=num*3,代码示例如下:
num=5
num*=3 # 等价于 num=num*3,即 num=5*3=15
echo $num # 输出 15*= 运算符可以用于各种数据类型的变量,包括整数、浮点数和字符串。例如:
## 对整数变量的使用
x=10
x*=5
echo $x # 输出 50
## 对浮点数变量的使用
y=3.14
y*=1.23
echo $y # 输出 3.8642
## 对字符串变量的使用
str="hello"
str*="3" # 将字符串 "hello" 重复3次,得到 "hellohellohello"
echo $str # 输出 "hellohellohello"使用 *= 运算符可以使代码更简洁、易读,并且减少代码量,因此在Shell编程中经常会使用该运算符。
/=
在Shell编程中,/= 是一种赋值运算符,它可以用来给变量除以一个值,并将计算结果赋值给该变量。/= 的语法形式如下:
variable/=value其中 variable 表示要被除数的变量,value 表示要除以的值。
例如,假设变量 num 的初始值为10,执行 num/=2 将会把变量 num 的值除以2,得到5,相当于执行了 num=num/2,代码示例如下:
num=10
num/=2 # 等价于 num=num/2,即 num=10/2=5
echo $num # 输出 5需要注意的是,如果除数为0,则会产生错误。例如,执行以下代码会报错:
num=10
num/=0 # 除以0会产生错误/= 运算符可以用于各种数据类型的变量,包括整数、浮点数和字符串。例如:
## 对整数变量的使用
x=10
x/=2
echo $x # 输出 5
## 对浮点数变量的使用
y=3.14
y/=2
echo $y # 输出 1.57
## 对字符串变量的使用
str="hello"
str/=2 # 不能用于字符串
echo $str # 输出 "hello"使用 /= 运算符可以使代码更简洁、易读,并且减少代码量,因此在Shell编程中经常会使用该运算符。
%=
在Shell编程中,%= 是一种赋值运算符,它可以用来给变量取模(即求余数),并将计算结果赋值给该变量。%= 的语法形式如下:
variable%=value其中 variable 表示要被取模的变量,value 表示要取模的值。
例如,假设变量 num 的初始值为10,执行 num%=3 将会把变量 num 的值对3取模,得到1,相当于执行了 num=num%3,代码示例如下:
num=10
num%=3 # 等价于 num=num%3,即 num=10%3=1
echo $num # 输出 1%= 运算符只能用于整数变量,不能用于浮点数和字符串。例如:
## 对整数变量的使用
x=10
x%=3
echo $x # 输出 1
## 不能用于浮点数变量
y=3.14
y%=2 # 不能用于浮点数
echo $y # 输出 "3.14"
## 不能用于字符串变量
str="hello"
str%=2 # 不能用于字符串
echo $str # 输出 "hello"使用 %= 运算符可以使代码更简洁、易读,并且减少代码量,因此在Shell编程中经常会使用该运算符。
算数表达式语法
- expression 是算术表达式,可以使用算术运算符、括号、变量和常量等。
$((expression))
范例
- 注意:算数表达式中的变量需要使用$符号进行引用,例如$a表示变量a的值,而a表示字符串"a"。
## a=5
## b=3
## echo $((a + b))
8
## echo $((a * (b + 2)))
25$[expression]
范例
- 注意:算数表达式中的变量需要使用$符号进行引用,例如$a表示变量a的值,而a表示字符串"a"。
## a=5
## b=3
## echo $[a - b]
2let expression
let是 Shell 内置命令,也可以用来执行算术表达式。let命令可以让我们在不使用$符号的情况下使用算术表达式。
范例
- 在
let命令中,如果要使用变量,直接使用变量名即可,不需要在变量名前面添加 $ 符号。 - 在
let命令中,还可以使用变量名的简写形式,例如 let a++,表示将变量 a 的值加1。
## a=5
## b=3
## let c=a+b
## echo $c
8
## let "d=a*b"
## echo $d
15
## let "e=(a + b) * 2"
## echo $e
16((expression)
- ((expression) 和 let expression 等价
- 在
((expression))中,可以使用变量名的简写形式,例如 ((a++)) 表示将变量 a 的值加1。
算数表达式范例
生成范围随机数
$RANDOM 是 Bash Shell 中内置的随机数生成变量,用于生成 0 到 32767($((2**15-1)))之间的随机整数。
- 生成 0 - 32 之间下·的随机数
## echo $[RANDOM%33]
27- 随机字体颜色
## echo -e "\033[1;$[RANDOM%7+31]mhello\033[0m"这是一个 Bash Shell 命令,它用于在控制台上输出带有随机字体颜色的 “hello” 字符串。现在来详细解释一下每个部分的含义:
echo: 输出命令。-e: 激活转义字符的解析,使得输出中的转义字符可以正常工作。"\033[1;$[RANDOM%7+31]m": 这是控制输出颜色的ANSI转义序列,其中:\033是 ASCII 转义字符的八进制编码,用于指示后续字符序列是 ANSI 控制序列。[1;是控制文本样式的部分,这里的 “1” 表示粗体字体。$[RANDOM%7+31]是一个算术表达式,它将生成一个 31 到 37 之间的随机数。RANDOM是 Bash Shell 内置的随机数变量,%7将生成 0 到 6 之间的随机数,然后加上 31,得到 31 到 37 之间的随机数。m是 ANSI 控制序列的结束字符,表示样式控制部分的结束。
hello: 要输出的文本。\033[0m: 这是另一个 ANSI 控制序列,它将颜色和样式重置为默认值,以确保后续文本不受影响。
因此,该命令的目的是输出带有随机颜色和粗体字体的 “hello” 字符串,颜色为 31 到 37 之间的随机颜色。
以下是一个使用Bash Shell生成随机字体颜色,输出文字内容为"hello"的示例脚本:
#!/bin/bash
## 定义颜色数组
colors=('0;31' '0;32' '0;33' '0;34' '0;35' '0;36' '1;31' '1;32' '1;33' '1;34' '1;35' '1;36')
## 生成随机数
color=${colors[$RANDOM % ${#colors[@]}]}
## 输出带有随机字体颜色的"hello"字符串
echo -e "\033[${color}mhello\033[0m"该脚本将定义一个颜色数组,其中包含12种不同的ANSI颜色代码。然后,它将使用Bash内置的$RANDOM变量生成一个随机数,该随机数将用于从颜色数组中选择一个随机颜色代码。最后,它将输出带有所选随机颜色的"hello"字符串。
在该脚本中,\033[是一个ANSI转义序列,用于控制文本输出的颜色和样式。${color}将被替换为所选的随机颜色代码。\033[0m将重新设置颜色为默认值,以便后续文本不受影响。
11
Bash Shell提供了多种算术运算方式,包括整数算术运算、浮点数算术运算和位运算。下面分别介绍这些运算的详细用法。
- 整数算术运算
整数算术运算使用(( ))或$(( ))语法。其中(( ))用于在条件语句中进行整数比较和运算,而$(( ))用于在命令中进行整数运算。
下面是一些整数算术运算的示例:
## 在条件语句中进行比较
if ((a > b)); then
echo "a is greater than b"
fi
## 在命令中进行运算
c=$((a + b))
echo "c = $c"- 浮点数算术运算
Bash Shell不支持原生的浮点数算术运算,但可以通过bc命令实现浮点数的计算。bc命令是一个命令行下的计算器,可以执行任意精度的数字计算。
下面是一个浮点数算术运算的示例:
## 计算平方根
a=5
b=$(echo "scale=2;sqrt($a)" | bc)
echo "Square root of $a is $b"- 位运算
Bash Shell支持多种位运算操作,包括与、或、异或、左移和右移。位运算使用&、|、^、<<和>>等符号进行操作。
下面是一些位运算的示例:
## 与运算
a=5
b=6
c=$((a & b))
echo "a & b = $c"
## 或运算
c=$((a | b))
echo "a | b = $c"
## 异或运算
c=$((a ^ b))
echo "a ^ b = $c"
## 左移运算
c=$((a << 1))
echo "a << 1 = $c"
## 右移运算
c=$((b >> 1))
echo "b >> 1 = $c"总的来说,Bash Shell提供了丰富的算术运算方式,可以根据不同的需求进行选择和组合使用。