老男孩shell运维实战例题说明
背景知识:双中括号[[]]
①[[是 bash 程序语言的关键字。并不是一个命令,` ` 结构比[ ]结构更加通用。在[[和]]之间所有的字符都不会发生文件名扩展或者单词分割,但是会发生参数扩展和命令替换。
②支持字符串的模式匹配,使用=~操作符时甚至支持shell的正则表达式。字符串比较时可以把右边的作为一个模式,而不仅仅是一个字符串,比如[[ hello == hell? ]],结果为真。` ` 中匹配字符串或通配符,不需要引号。
③使用` `.``.``.` `条件判断结构,而不是[ ... ],能够防止脚本中的许多逻辑错误。比如,&&、||、<和> 操作符能够正常存在于` `条件判断结构中,但是如果出现在[ ]结构中的话,会报错。比如可以直接使用if [[ $a != 1 && $a != 2 ]], 如果不适用双括号, 则为if [ $a -ne 1] && [ $a != 2 ]或者if [ $a -ne 1 -a $a != 2 ]。
④bash把双中括号中的表达式看作一个单独的元素,并返回一个退出状态码。
例子:
-
12345678910
if
($i<
5
)
if
[ $i
-
lt
5
]
if
[ $a
-
ne
1
-
a $a !
=
2
]
if
[ $a
-
ne
1
] && [ $a !
=
2
]
if
[[ $a !
=
1
&& $a !
=
2
]]
for
i
in
$(seq
0
4
);do echo $i;done
for
i
in
`seq
0
4
`;do echo $i;done
for
((i
=
0
;i<
5
;i
+
+
));do echo $i;done
for
i
in
{
0.
.
4
};do echo $i;done
老男孩书中例题如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#!/bin/sh
cat <<END
1.panxiaoting
2.gongli
3.fanbingbing
END
read
-
p
"Which do you like?,Pls input the num:"
a
[
"$a"
=
"1"
] && {
echo
"I guess,you like panxiaoting"
exit
1
}
[
"$a"
=
"2"
] && {
echo
"I guess,you like gongli"
exit
1
}
[
"$a"
=
"3"
] && {
echo
"I guess,you like fangbingbing"
exit
1
}
[[ !
"$a"
=
~ [
1
-
3
] ]] && {
###支持字符串的模式匹配,使用=~操作符时甚至支持shell的正则表达式
echo
"I guess,you are not man."
}
|
说明:
本文转自品鉴初心51CTO博客,原文链接:http://blog.51cto.com/wutengfei/1976683,如需转载请自行联系原作者