转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/shell/764.html
对于Shell书写和概念上一篇已经有所介绍,那么本篇继续学习Shell编程一些语法知识;
首先介绍Shell中的流程控制,例如判断语句等等…
if语句:
首先了解几个知识:
[ -f “somefile” ] :判断是否是一个文件
[ -x “/bin/ls” ] :判断/bin/ls是否存在并有可执行权限
[ -n “$var” ] :判断$var变量是否有值
[ “$a” = “$b” ] :判断$a和$b是否相等
示例代码:
1
2
3
4
5
6
7
8
9
10
11
|
#!/bin/sh
varOne
=
1
varTwo
=
2
varThree
=
3
if
[
"$varOne"
=
"$varTwo"
]
;
then
echo
"varTwo:$varTwo"
elif
[
"$varOne"
=
"$varThree"
]
;
then
echo
"varThree:$varThree"
else
echo
"varOne:$varOne"
fi
|
务必注意,[]比较的时候其括号前后的空格别忘了! = 等号前后也要有空格也要注意;
&& 和 || 操作符:
示例代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#!/bin/sh
varOne
=
1
varTwo
=
2
varThree
=
3
if
[
"$varOne"
=
"$varThree"
]
||
[
"$varOne"
=
"$varTwo"
]
;
then
echo
"|| 进入"
else
echo
"No || 进入"
fi
if
[
"$varOne"
=
"$varOne"
]
&
amp
;
&
amp
;
[
"$varOne"
=
"$varTwo"
]
;
then
echo
"&& 进入"
else
echo
"No && 进入"
fi
|
case 语句:
须知:
case表达式可以用来匹配一个给定的字符串,而不是数字(可别和C语言里的switch…case混淆)。
示例代码:
1
2
3
4
5
6
7
8
9
10
11
12
|
#!/bin/sh
ftype
=
`
file
"$1"
`
# Note ' and ` is different
case
"$ftype"
in
"$1: Zip archive"
*
)
unzip
"$1"
;
;
"$1: gzip compressed"
*
)
gunzip
"$1"
;
;
"$1: bzip2 compressed"
*
)
bunzip2
"$1"
;
;
*
)
echo
"File $1 can not be uncompressed with smartzip"
;
;
esac
|
特殊变量$1,该变量包含有传递给该脚本的第一个参数值,也就是说,$1 就是字符串 articles.zip。
select 语句:
select表达式是bash的一种扩展应用,擅长于交互式场合。用户可以从一组不同的值中进行选择:
1
2
3
4
|
select
var
in
.
.
.
;
do
break
;
done
.
.
.
.
now
$
var
can
be
used
.
.
.
.
|
示例代码:
1
2
3
4
5
6
7
|
#!/bin/sh
echo
"What is your favourite OS?"
select
var
in
"Linux"
"Gnu Hurd"
"Free BSD"
"Other"
;
do
break
;
done
echo
"You have selected $var"
|
如果 以上脚本运行出现 select :NOT FOUND 将 #!/bin/sh 改为 #!/bin/bash 该脚本的运行结果如下:
1
2
3
4
5
6
7
|
What
is
your
favourite
OS
?
1
)
Linux
2
)
Gnu
Hurd
3
)
Free
BSD
4
)
Other
#? 1
You
have
selected
Linux
|
while/for 循环:
示例代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#!/bin/sh
varOne
=
1
varTwo
=
1
# while
while
[
"$varOne"
=
"$varOne"
]
;
do
echo
"while Done"
break
done
# for
for
varStr
in
H
I
M
I
;
do
echo
"varStr is $varStr"
done
|
输出:
1
2
3
4
5
6
|
while
Done
varStr
is
H
varStr
is
I
varStr
is
M
varStr
is
I
localhost
:
Desktop
Himi
$
|
select 语句:
须知:select表达式是bash的一种扩展应用,擅长于交互式场合。用户可以从一组不同的值中进行选择:
示例代码:
1
2
3
4
5
6
|
#!/bin/sh
echo
"What is your favourite?"
select
var
in
"iOS"
"Android"
"Himi"
"Other"
;
do
break
;
done
echo
"You have selected $var"
|
执行脚本后,等待用户输入,然后在终端输入你的选择,回车,如下显示:
1
2
3
4
5
6
7
8
|
What
is
your
favourite
?
1
)
iOS
2
)
Android
3
)
Himi
4
)
Other
#? 3
You
have
selected
Himi
localhost
:
Desktop
Himi
$
|
函数:
如果你写过比较复杂的脚本,就会发现可能在几个地方使用了相同的代码,这时如果用上函数,会方便很多。函数的大致样子如下:
1
2
3
4
5
6
|
functionname
(
)
{
# inside the body $1 is the first argument given to the function
# $2 the second ...
body
}
|
示例代码:
1
2
3
4
5
6
7
|
#!/bin/sh
himi
(
)
{
echo
"Function is ok"
exit
0
}
himi
|
脚本调试:
最简单的调试方法当然是使用echo命令。你可以在任何怀疑出错的地方用echo打印变量值,这也是大部分shell程序员花费80%的时间用于调试的原因。Shell脚本的好处在于无需重新编译,而插入一个echo命令也不需要多少时间。shell也有一个真正的调试模式,如果脚本”strangescript”出错,可以使用如下命令进行调试:
sh -x strangescript
上述命令会执行该脚本,同时显示所有变量的值。shell还有一个不执行脚本只检查语法的模式,命令如下:
sh -n your_script
OK,本章主要是为了熟悉一些控制语句和常用知识点,那么到这对于Shell编程基础学习认识就算告一段落,如有必要以后会继续深入学习;暂时足以;