一、Shell入门

我们先看一个小例子,永恒的经典:Hello World


#!/bin/sh  
var="Hello World!"  
echo $var

保存,文件名为:hello
我们发现文件的第一行虽是一个注释,但是说明了文件的执行是由/bin/sh来执行,所以我们这么来执行这个文件:


/bin/sh hello

就可以看到结果了,但我们知道在Linux下,一个文件是否可以执行是由文件属性来决定的,那么我们是否可以给他加上可执行权限,来执行这个文件呢?
先执行如下命令:


chmod u+x hello

然后我们在直接敲命令:hello,看到什么现象?
所以一个文件被执行有这两个途径

二、Shell语法入门

  1. 输入/输出内部命令

①. echo 输出命令
②. read 输入命令

例如:


#!/bin/sh  
echo Name:  
read NAME  
echo Phone:  
read PHONE  
echo SNAME,SPHONE > contact.txt
  1. if条件语句

在看if条件语句之前,我们先看一下:测试命令执行结果,在Linux下正确的命令执行结果为0,否则为其他值,我们可以用:


echo $?

来看上一个命令的执行结果,懂了这些之后,我们在看那些常见语法


if 条件测试命令串  
then  
条件为真时执行的命令  
else  
条件为假时执行的命令  
fi

注:if和then必须是两行,如果放一行,请在then前加“;”

例如:


#!/bin/sh
echo Input file name:
read NAME
if [ -d $NAME ]
then
  echo Dir
else
  echo Not Dir
fi
  1. case条件语句

case 条件测试命令串 in  
表达式1)  
分支1执行的命令  
;;  
表达式2)  
分支2执行的命令  
;;  
*)  
其他命令  
;;  
esac

例如:


#!/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

注:本文件第四行第四个字符为~上的那个点,不是单引号!

  1. for循环语句

for 变量名  
[in 数值列表]  
do  
循环执行的命令串  
done

例如:


#!/bin/sh  
for var  
in \`ls\`  
do  
echo $var  
done
  1. while循环语句

while 循环条件命令串  
do  
循环命令串  
done

例如:


#!/bin/sh  
VAR=1  
while [ $VAR -le 9 ]  
do  
RESULT=\`expr $VAR * $VAR\`  
echo $VAR*$VAR=$RESULT  
VAR=\`expr $VAR + 1\`  
done
  1. until 循环语句

until 循环条件命令串  
do  
循环命令串  
done

例如:


#!/bin/sh  
VAR=1  
until [ $VAR -gt 9 ]  
do  
RESULT=\`expr $VAR * $VAR\`  
echo $VAR*$VAR=$RESULT  
VAR=\`expr $VAR + 1\`  
done
  1. 函数

函数名()  
{  
命令串  
}

例如:


power()  
{  
VAR=1  
until [ $VAR -gt 9 ]  
do  
RESULT=\`expr $VAR * $VAR\`  
echo $VAR*$VAR=$RESULT  
VAR=\`expr $VAR + 1\`  
done  
}  
echo Power:  
power

这是一个无参函数,下面我们看看有参函数


#!/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 程序名,这个比较简单就不多说了,感兴趣的可以自己试一下。