目录
一、操作符 Operators
1.赋值 Assignment
1.1 = 等号 Equal
1.1.1 变量赋值 Variable Assignment
[root@server1 ~]# a=28
[root@server1 ~]# echo $a
28
1.1.2 字符串比较操作 String comparison operator
a. if [ “$string1” = “$string2” ]
b. if [ “X$string1” = “X$string2” ]
then
command
fi
2.算术操作符 Arithmetic Operators
+ | 加法计算 | Plus |
- | 减法计算 | Minus |
* | 乘法计算 | Multiplication |
/ | 除法计算 | Division |
** | 幂运算 | Exponentiation |
% | 模运算,求余运算 | 返回一次除法运算的余数modulo |
+= | 加等于 | 把变量的值增加一个常量然后再把结果赋给变量 |
-= | 减等于 | 把变量的值减去一个常量然后再把结果赋给变量 |
*= | 乘等于 | 先把变量的值乘以一个常量的值,然后再把结果赋给变量 |
/= | 除等于 | 先把变量的值除以一个常量的值,然后再把结果赋给变量 |
%= | 取模等于 | 先对变量进行模运算,然后把结果赋给变量 |
例:计算两个数的最大公约数Greatest Common Divisor
#!/bin/bash
#采用辗转相除法,求两个数的最大公约数
ARGS=2
E_BADARGS=65
if [ $# -ne "$ARGS" ]
then
echo "Usage: `basename $0` first-number second-number"
exit $E_BADARGS
fi
gcd ()
{
dividend=$1
divisor=$2
remainder=1
until [ "$remainder" -eq 0 ]
do
let "remainder = $dividend % $divisor"
dividend=$divisor
divisor=$remainder
done
}
gcd $1 $2
echo ; echo "($1,$2)=$dividend";echo
exit 0
[root@server1 ~]# ./ji.sh 22 12
(22,12)=2
#!/bin/bash
#算术操作符的练习,用十种不同的方法
n=0; echo -n "$n"
#1:let
let "n = $n+1" # let "n = n+1" 也可以
echo -n "$n"
#2:变量扩展
: $(( n = $n +1 )) #注意首行的冒号
echo -n "$n"
#3:双圆括号,赋值操作
(( n = n+1 )) # 与方法2不同的
echo -n "$n"
#4:变量重新赋值
n=$(($n+1))
echo -n "$n"
#5;与2类似
: $[n = $n + 1] #注意首行的冒号
echo -n "$n"
#6:与4类似
n=$[$n +1]
echo -n "$n"
#7:let自加
let "n++" # let "++n" 也可以
echo -n "$n"
#8:整数扩展 自加
((n++)) # ((++n)) 也可以
echo -n "$n"
#9:变量扩展 自加
: $((n++)) #$((++n)) 也可以
echo -n "$n"
#10:与9类似
: $[n++] #$[++n] 也可以
echo -n "$n"
echo
exit 0
浮点数:bash默认处理不了
[root@server1 ~]# let "a = 1.1 + 2.2" ;echo $a
-bash: let: a = 1.1 + 2.2: 语法错误: 无效的算术运算符 (错误符号是 ".1 + 2.2")
28
[root@server1 ~]# echo "a = 1.1 + 2.2" | bc
3.3
3.位操作符 Bitwise Operators
<< | 左一位(每次左移但相对于乘以2) |
<<= | 左移-赋值 |
>> | 右移-赋值(每次右移都将除以2) |
>>= | 右移-赋值(与<<=正好相反) |
& | 按位与 |
&= | 按位与-赋值 |
| | 按位或 |
| = | 按位或-赋值 |
~ | 按位反 |
! | 按位非 |
^ | 按位异或XOR |
^= | 按位异或-赋值 |
4.逻辑操作符 Logical (Boolean) Operators
4.1 ! 非
if [ ! -f $FILENAME ] ; then
…
4.2 && 于
4.2.1 if [ $condition1 ] && [ $confition2 ]
4.2.2 if [ [ $condition1 && $confition2 ] ]
4.3 | | 或
4.3.1 if [ $condition1 ] || [ $confition2 ]
4.3.2 if [ [ $condition1 || $confition2 ] ]
5.杂项操作符 Miscellaneous Operators
5.1 , 逗号操作符可以连接两个或多个算术运算
5.2所有的操作都会被运行,但是只会返回最后操作的结果
#!/bin/bash
let "t1 = ((5+3,7-1,15-4))"
echo "t1 = $t1"
let "t2 = ((a=9,15/3))"
echo "t2=$t2 a=$a"
5.3常用于for循环中
#/bin/bash
#使用类似c语言的“逗号操作符”,来同时增加两个变量的值
for (( a=1, b=1; a <= LIMIT ; a++, b++)) #用逗号同时进行两条操作
do
echo -n "$a-$b"
done
二、操作优先级 Operator Precedence
基本原则
如果优先级相同那么从左到右
先乘除后加减
例:操作符优先级
a. “看山发“ :先看轮廓,后看细节
1.while [ -n “$remaining” -a “$retry” -gt 0 ] ; do
2. if [ -f /etc/sysconfig/i180 -a -z “${NOLOVALE:-} : ] : then
b.最佳策略:增加一些方括号,方便阅读
1. if [ “$v1” -gt “$v2” -o “$v1” -lt “$v2” -a -e “$filename” ]
2.if [[ “$v1” -gt “$v2” ]] || [[ “$v1” -lt “$v2” ]] && [[ -e “$filename” ]
三、数字常量 Numerical Constants
3.1 默认情况下,数字是10进制数
let "dec = 32"
3.2 8进制:以0开头
let “oct = 032”
3.3 16进制:以0x开头
let “hex = 0x32”
3.4其他进制:BASE:NUMBER
let “bin = 2#111100111001101”
let “bin = 32#77”