一、
let与(()) 在shell编程中是可以互换的
,
它们
让
我们可以像C语言那样写程序对于
变量
运算
赋值
。
在循环语句中控制变量变化非常有用;
注
:
1
、使用
(())
时,运算符两边需要有空格;
2
、
(())算数表达式的值在if和while判断时不用在前面加“$”;在echo输出值时需要加”$”
[root@zq-crmtest-20423tmp]# echo $((c = a + b
+ 1
))
输出
4
3
、
let
和
(())
都只能对整数进行运算赋值
;
4
、使用
let
或
(())
赋值时,也可以使用
expr+
老板键代替;
(
如下,二者等价
)
letllines=$llines+$fileLines
llines=`expr $llines+ $fileLines`
实例:
[root@zq-crmtest-20423tmp]# a=1
[root@zq-crmtest-20423tmp]# b=2
[root@zq-crmtest-20423tmp]# let c=a+b
[root@zq-crmtest-20423tmp]# echo $c
输出
3
[root@zq-crmtest-20423tmp]# let a=1*111
[root@zq-crmtest-20423tmp]# echo $a
输出
111
[root@zq-crmtest-20423tmp]# ((c = a + b))
[root@zq-crmtest-20423tmp]# echo $c
输出
3
$ x=12
$ let “x<10”
$ echo $?
1
$ (( x > 10 ))
$ echo $?
0
$if ((x > 10 ))
>
then echo x greater
>
else echo x not greater
>
fi
二、
shell能够识别的表达式如下所示:
操作符 描述
- 减去
! 逻辑相反
* / % 乘,除,余数
+ – 加,减
<= >= < > 关系比较
== != 等于不等于
= 赋值
括号能够被用作改变表达式中计算的顺序
。
当使用逻辑和关系操作符,(!,<=,>=,<,>,++,~=),的时候,shell会返回一个代码变量,
$
?会反映结果是真还是假
;
再一次说明,必须使用双引号来防止shell将大于和小于运算符当作I/O重定向。
一、
先说[]和test,两者是一样的,在命令行里test expr
1
和[ expr
1
]的效果相同。
他们
的三个基本
作用是判断文件、判断字符串、判断整数
。支持使用与或非将表达式连接起来。要注意的有:
1.test
和
[]
中可用的比较运算符只有==和!=,两者都是用于字符串比较的,不可用于整数比较,整数比较只能使用-eq, -gt这种形式。
2.论是字符串比较还是整数比较都千万不要使用大于号小于号。当然,如果你实在想用也是可以的,对于字符串比较可以使用尖括号的转义形式,如果比较”ab”和”bc”:[ ab \< bc ],结果为真,也就是返回状态为0
。
3. test
和
[]
中
的逻辑运算与或非只能使用
-a
、
-o
、
!
实例:
if [ $a==”abc” ] ;then
…
fi
if test $var1 =”1″-a $var2 = “2” ; then
echo “equal”
f
i
if
[
$var1= “1”-a $var2 = “2”
]
; then
echo “equal”
fi
二、
[[ ]]是内置在shell中的一个命令,它就比刚才说的test强大的多了。简直强大的令人发指!
1.
支持字符串的模式匹配
(使用=~操作符时甚至支持shell的正则表达 式)。
逻辑组合可以不使用test的-a,-o而使用&&,||这样更亲切的形式
(针对c、Java程序员)。
2
.字符串比较时可以把右边的作为一个
模式
(
这是右边的字符串不加双引号的情况下。如果右边的字符串加了双引号,则认为是一个文本字符串。
),而不仅仅是一个字符串,比如[[ hello == hell? ]],结果为真。
注
:
使用[]和[[]]的时候不要吝啬空格,每一项两边都要有空格
。
实例:
[[ $a == z* ]] # 如果$a以”z”开头(模式匹配)那么将为true
[[$a == “z*” ]]
#如果$a等于z*(字符匹配),那么结果为true
[ $a == “z*” ]
和
[ $a == z* ]
#
效果一样,
如果$a等于z*(字符匹配),那么结果为true
!=
不等于,如:
if [ “$a” != “$b” ]
这个操作符将在
[[]]
结构中使用模式匹配
.
<
小于
,
在
ASCII
字母顺序下
.
如
:
if [[ “$a” < “$b” ]]
if [ “$a” \< “$b” ]
注
:
在
[]
结构中
“<”
需要被转义
.
-z
字符串为
“null”.
就是长度为
0.
-n
字符串不为
“null”
注
:
使用
-n
在
[]
结构中测试必须要用
“”
把变量引起来
.
使用一个未被
“”
的字符串来使用
! -z