Linux系统应用 第八章 Shell编程入门

8.1Shell编程过程

在Linux中,Shell不但能与用户进行逐个命令交互执行,也可以通过脚本语言进行编程。通过对Shell进行编程,可使大量任务自动化,对于系统管理、系统维护方面特别有用。
复习与Shell相关的命令

1.现在无论使用哪种Linux操作系统,默认的Shell总是/bin/bash。
2.查看系统中SHELL变量的值:
echo $SHELL
3.查看系统内置了哪些Shell,有以下两种方法:
①cat /etc/shells
②chsh -list
还有一种为③vi /etc/shells

1.创建Shell程序
与MS-DOS系统中的批处理文件(.bat)类似, Linux中的脚本(Shell程序)是一个文本文件,包含各类Linux的Shell命令。通过脚本文件将这些命令汇集在一起,可连续执行shell命令。

在shell脚本的第一行中,必须写 #!/bin/bash
如果是用其他shell,在修改相应的shell路行 #!/bin/sh表示本脚本由/bin/路径的sh程序来解释
跟命令行下 ~ #/bin/sh Scriptname 效果相同
如果不写也可以,那就用你登陆的那个shell来解释执行. 可以不写,但最好还是写上去

举例:编写一个最简单的“Hello World!”程序。
步骤:
(1)创建一个用于保存文件的目录:mkdir /usr/program
(2)在program目录下新建一个文本程序first。
(3)打开first文件,输入Shell的脚本。

#!/bin/bash	该文件后面的代码将用/bin/bash来执行。这是一般Shell程序第1行中必须包含的内容。
var=“Hello World!”	为变量var定义了一个字符串值。
echo  $var	将变量var的值显示输出到终端。

2.设置执行权限
创建好first文件后,使用ls -l命令可以看到文件的所有者(这里是root )对该文件只有读和写的权限,没有执行权限。

执行chmod u+x /usr/program/first为脚本文件设置所有者的执行权限。当然,也可以执行chmod a+x /usr/program/first设置所有用户都可以运行该脚本程序。

注意:与DOS或Windows中的批处理程序不同,Linux中的脚本文件不是按扩展名来识别,而是通过为文件添加执行权限来允许其执行,用户可以为脚本文件设置任意扩展名。

3.执行Shell程序
两种方法:
(1)使用Shell程序执行
#bash /usr/program/first
使用这种方法时,不需要设置脚本程序的可执行权限(可忽略第二步)。

(2)直接执行
#/usr/program/first
使用这种方法时,需首先设置该文件的执行权限。

(3)如果执行当前目录下的脚本文件,通常也应该使用一个点表示当前目录,如执行当前目录下的脚本文件test,可使用命令:# ./test

8.2Shell的语法介绍

使用变量
在Shell程序中,提供了说明和使用变量的功能。与高级编程语言不同,在Shell程序中所有变量保存的值都是字符串。

在Linux的Shell中,可以使用以下几种变量:
1.环境变量:是指与Shell执行的环境相关的一些变量。Shell环境变量在Shell启动时,就已定义好,如PATH,HOME,MAIL等,这些变量用户还可以重新定义,也可以导入新的,如下是导读ABCD=2
Linux系统应用 第八章 Shell编程入门_第1张图片
2.用户自定义变量: 变量名=变量值
3.预定义变量(系统变量):用户不能修改,只能引用这些变量。 所有的预定义变量都是由“ ” 符 号 与 另 一 个 符 号 组 成 的 , 常 用 的 S h e l l 预 定 义 变 量 有 以 下 几 个 : ( 所 有 的 预 定 义 变 量 都 是 ”符号与另一个符号组成的,常用的Shell预定义变量有以下几个:(所有的预定义变量都是 Shell开头)

$#  :位置参数的数量
$* :所有位置参数的内容
$? :命令执行后返回的状态
$$ :当前进程的进程号
$!  :后台运行的最后一个进程号
$0 :当前执行的进程名

预定义好$1.$2.$3在执行程序时就输入在文件名跟后面
Linux系统应用 第八章 Shell编程入门_第2张图片
输入/输出内部命令
Linux系统应用 第八章 Shell编程入门_第3张图片

#!/bin/bash
echo Name:
read NAME
echo Telephone:
read PHONE
echo $NAME,$PHONE>contact.txt

条件测试
1.测试命令执行结果
执行任何Linux命令都可能存在两种状态:正确或错误。若前一条命令正确执行,则返回状态值为0,返回值为任何非0值都表示执行命令出错。

使用预定义变量“$ ?”可返回命令执行后的状态,在程序中可根据预定义变量“$?”的值来判断前一条命令的执行是否正确。

2.测试文件状态
[ 测试表达式 ]
注意:中括号“[]”与测试表达式之间必须有一个空格来分隔。

测试文件状态可使用以下参数:
-e 文件名:若文件存在,返回真。
-r 文件名:若文件可读,返回真。
-w 文件名:若文件可写,返回真。
-x 文件名:若文件可执行,返回真。
-s 文件名:若文件类型为套接字文件,返回真。
-d 文件名:若文件类型为目录文件,返回真。
-f 文件名:若文件类型为普通文件,返回真。-c 文件名:若文件类型为字符设备文件,返回真。
-b 文件名:若文件类型为块设备文件,返回真。

3.测试数据值
-eq:判断是否相等
-ne:判断是否不相等
-gt:判断是否大于
-ge:判断是否大于等于
-lt:判断是否小于
-le:判断是否小于等于

4.测试字符串:
= != -z -n

5.逻辑操作符:
! -a -o

流程控制语句

1.if条件语句
Linux系统应用 第八章 Shell编程入门_第4张图片
2.case条件语句
Linux系统应用 第八章 Shell编程入门_第5张图片
3.for循环语句
Linux系统应用 第八章 Shell编程入门_第6张图片
4.while和until循环语句
Linux系统应用 第八章 Shell编程入门_第7张图片
5.函数
Linux系统应用 第八章 Shell编程入门_第8张图片

处理参数

1.位置参数
当调用Shell程序的命令行时,除了输入Shell程序名之外,还可以在后面跟上多个参数,这些参数与在命令行中的位置有关,因此称为位置参数。各位置参数之间用空格分隔,用$1表示第1个参数,$2表示第2个参数,依次类推。而$0是一个特殊的变量,其内容是当前Shell程序的文件名。

2.函数参数
向函数传递参数与向一般脚本传递参数一样,应使用预定义变量$1~$9来传递。函数取得所传参数后,将原始参数传回Shell脚本。

8.3调试Shell程序

一般错误
1.输入错误:如输入了错误的关键字、成对的符号漏输入一部分等。
2.字符大小写在Linux中,对大小写字符是严格区分的,输入时需要注意。所有关键字都是使用小写字母来表示的,建议变量名使用大写字母组合来表示。
3.循环错误:由于Shell中的循环控制语句与一般高级程序设计语言有所不同,输入结构时容易出错。

调试跟踪
1.-n选项
bash命令的“-n”选项使Shell不执行脚本,仅检查脚本中的语法问题。
Linux系统应用 第八章 Shell编程入门_第9张图片
2.-v选项
bash命令的“-v”选项使Shell在执行程序过程中,将读入的每一个命令行都原样输出到终端。
Linux系统应用 第八章 Shell编程入门_第10张图片
3.-x选项
bash命令的“-x”选项使Shell在执行程序过程中,把执行的每一个命令在行首用一个“+”号加上对应的命令显示在终端上,并把每一个变量和该变量的值也显示出来。使用该选项更方便跟踪程序的执行过程。
Linux系统应用 第八章 Shell编程入门_第11张图片

Shell编程实例:

1.增加用户账户
举例20:编写一个Shell程序addaccount.sh,在系统中增加四个账户,同时设定他们的初始密码为123456,主组群为wl15。
先新加一个组wl15,然后for循环,指定用户加入组wl15,并添加密码123456
Linux系统应用 第八章 Shell编程入门_第12张图片

2.统计子目录和文件数量
举例21:
编写一个Shell程序count.sh,统计当前目录中子目录以及文件的数量。
Linux系统应用 第八章 Shell编程入门_第13张图片
Linux系统应用 第八章 Shell编程入门_第14张图片
3. 九九乘法表
举例22:编写乘法口诀cfkj.sh,打印出九九乘法表。
Linux系统应用 第八章 Shell编程入门_第15张图片
Linux系统应用 第八章 Shell编程入门_第16张图片

你可能感兴趣的:(Linux系统应用 第八章 Shell编程入门)