首页 > Linux > Shell编程入门

Shell编程入门

一、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

2. 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

3. 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

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

4. for循环语句


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

例如:


#!/bin/sh
for var
	in `ls`
do
	echo $var
done

5. 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

6. 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

7. 函数


函数名()
{
	命令串
}

例如:


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

分享到:
作 者: BridgeLi,http://www.bridgeli.cn/
原文链接:https://www.bridgeli.cn/archives/163
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。
分类: Linux 标签: , ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.