一、Shell入门
我们先看一个小例子,永恒的经典:Hello World
1
2
3
|
#!/bin/sh
var = "Hello World!"
echo $var
|
保存,文件名为:hello
我们发现文件的第一行虽是一个注释,但是说明了文件的执行是由/bin/sh来执行,所以我们这么来执行这个文件:
1
|
/bin/sh hello
|
就可以看到结果了,但我们知道在Linux下,一个文件是否可以执行是由文件属性来决定的,那么我们是否可以给他加上可执行权限,来执行这个文件呢?
先执行如下命令:
1
|
chmod u+x hello
|
然后我们在直接敲命令:hello,看到什么现象?
所以一个文件被执行有这两个途径
二、Shell语法入门
1. 输入/输出内部命令
①. echo 输出命令
②. read 输入命令
例如:
1
2
3
4
5
6
|
#!/bin/sh
echo Name:
read NAME
echo Phone:
read PHONE
echo SNAME,SPHONE > contact.txt
|
2. if条件语句
在看if条件语句之前,我们先看一下:测试命令执行结果,在Linux下正确的命令执行结果为0,否则为其他值,我们可以用:
1
|
echo $?
|
来看上一个命令的执行结果,懂了这些之后,我们在看那些常见语法
1
2
3
4
5
6
|
if 条件测试命令串
then
条件为真时执行的命令
else
条件为假时执行的命令
fi
|
注:if和then必须是两行,如果放一行,请在then前加“;”
例如:
1
2
3
4
5
6
7
8
9
|
#!/bin/sh
echo Input file name:
read NAME
if [ -d $NAME ]
then
echo Dir
else
echo Not Dir
fi
|
3. case条件语句
1
2
3
4
5
6
7
8
9
10
11
|
case 条件测试命令串 in
表达式1)
分支1执行的命令
;;
表达式2)
分支2执行的命令
;;
*)
其他命令
;;
esac
|
例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#!/bin/sh
echo Input file name:
read NAME
ft=`file "$NAME" `
case "$ft" in
"$NAME: ASCII" *)
echo \" $NAME \" is ASCII text
;;
"$NAME: directory" *)
echo \" $NAME \" is DIRECTORY
;;
*)
echo \" $NAME \" is OTHER FILE TYPE
;;
esac
|
注:本文件第四行第四个字符为~上的那个点,不是单引号!
4. for循环语句
1
2
3
4
5
|
for 变量名
[in 数值列表]
do
循环执行的命令串
done
|
例如:
1
2
3
4
5
6
|
#!/bin/sh
for var
in `ls`
do
echo $var
done
|
5. while循环语句
1
2
3
4
|
while 循环条件命令串
do
循环命令串
done
|
例如:
1
2
3
4
5
6
7
8
|
#!/bin/sh
VAR=1
while [ $VAR -le 9 ]
do
RESULT=`expr $VAR \* $VAR `
echo $VAR * $VAR = $RESULT
VAR=`expr $VAR + 1`
done
|
6. until 循环语句
1
2
3
4
|
until 循环条件命令串
do
循环命令串
done
|
例如:
1
2
3
4
5
6
7
8
|
#!/bin/sh
VAR=1
until [ $VAR -gt 9 ]
do
RESULT=`expr $VAR \* $VAR `
echo $VAR * $VAR = $RESULT
VAR=`expr $VAR + 1`
done
|
7. 函数
1
2
3
4
|
函数名()
{
命令串
}
|
例如:
1
2
3
4
5
6
7
8
9
10
11
12
|
power()
{
VAR=1
until [ $VAR -gt 9 ]
do
RESULT=`expr $VAR \* $VAR `
echo $VAR * $VAR = $RESULT
VAR=`expr $VAR + 1`
done
}
echo Power:
power
|
这是一个无参函数,下面我们看看有参函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#!/bin/sh
sum()
{
SUM1=0
while [ $# -ne 0 ]
do
SUM!=`expr $SUM1 + $1 `
shift
done
echo SUM: $SUM !
}
echo Please some number:
read NUM
sum $NUM
|
这是一个求和函数,保存为sum,这样我们可以执行sum 1 2 3 3 4 5,expr 为计算的意思,shift为移位,也就是把我们输入的1 2 3 4 5,依次变为第一个带入到本程序的第七行的“$1”
三、调试Shell程序
因为Shell都是通过vim编写,并没有像写Java那样的IDE,所以调试错误就很重要了,因为Shell的关键字都是小写,所以我们把一般变量都大写,这些都是一般错误,但有时候一个复杂的程序,我们怎么debug呢?这就需要我们调试跟踪,调试跟踪有两个参数:
1. -v选项
2. -x选项
例如:我们可以 /bin/sh -v 程序名或者 /bin/sh -x 程序名,这个比较简单就不多说了,感兴趣的可以自己试一下。