第八单元(shell编程)
UNIX shell编程语言简介
shell是一种可用于编程的命令语言
shell程序易于编写、修改和调试,无需编译
shell的程序文件称为
shell过程、shell脚本或脚本
shell脚本
一个文本文件,包含一系列shell命令运行shelI脚本,命令依次交给shell执行,一次一条所有命令执行完毕或出错,脚本停止执行
简单的shell脚本

执行脚本
执行脚本的两种方式
1.使用sh命令
2.使脚本转变成可执行文件
sh命令执行脚本
sh命令(任何一个shell) 脚本名
$ sh won
$ ksh won
$ bash won
方法实质
启动一个新shell运行脚本程序
使脚本变成可执行文件
优势
不需要调用另外一个shell直接输入脚本文件名执行
chmod 更改文件权限


更多shell脚本
使用特殊字符

退出系统
退出shell
exit 或
Ctrl- d
脚本在shell创建的子进程中运行
退出shell,必须在shell自身环境中运行!
执行命令:点(.)命令
. 在当前shell中执行脚本,而不创建子进程
shell内部命令,测试脚本程序时使用


读取输入:read命令
read 从标准输入设备读入字符串存入变量中
读取用户输入,存入一个到多个变量中

shell编程基础
shell提供了用于脚本的命令和结构
#表示后面的内容为注释,shell忽略#以后的字符
变量
shell允许自定义变量
变量定义
变量名=变量值
■shell不支持数据类型,赋给变量的值解释成字符串
■变量名遵守与文件命名同样的语法规则
■变量可以在shell提示符下定义并使用
字符串中包含空格,必须用引号括起
变量生存周期
变量保存在内存中,直到脚本结束或终止
unset 清除变量
命令格式
unset 变量名
显示变量值
echo $变量名
变量与命令替换
将一个命令的输出存入一个变量中
$ DATE= date
$ echo $DATE
Fri Apr 19 19:45:17 CST 2019
命令行参数
脚本最多可以读取10个命令行参数存入特殊变量
命令行参数
用户输入命令后所跟的数据项,空格分隔
■参数传递给程序,可以改变程序行为或执行顺序
■按顺序命令行参数被命名为$0、$1、…、$9



参数变量应用实例
编写脚本,将当前目录下指定文件保存到用户主目
录下的keep目录中,然后调用vi编辑该文件



exit
shell内部命令,立即终止程序运行
命令格式
exit n
■n是退出状态,也称返回码
■没有提供返回码,使用shell执行最后一条命令的退
出值
■为与其他UNIX程序/命令完成时返回一一个退出状态,保持一致, 编写shell脚本,返回给父进程一个退出状态
条件和测试
条件控制结构
某命令的执行依赖于另外命令执行的结果(返回值)
if语句为检验某个条件真假提供了一种机制
if-then结构
if [ condition ]
then
commands
...
last-command
fi
条件前后必须加空格!
if-then-else结构在条件为假时,执行相应命令
if [ condition ]
then
commands
....
last-true-command
else
false-command
..
last- false-comand
fi
if- then-elif结构嵌套if-then-else结构,可使用elif语句
if [ condition 1 ]
then
commands 1
elif [ condition_ 2 ]
then
commands 2
elif [ condition 3 ]
then
commands_ 3
...
...
else
commands n
fi

test
内部命令,它计算作为其参数的表达式的真假
■真返回0,假返回非0值
■[ condition ]是test命令的一种特殊写法

不同类型的判断
数值比较
test命令可以判断(比较) 2个整数值
字符串检测/比较
test可以对1个或2个字符串进行检测/比较
字符串检测-z与-n
字符串必须加引号
0为真; 1为假
文件检测
test可以检测文件属性、长度、类型、权限
算数运算
expr命令
shell没有提供内部运算符进行算术运算
符号左右要有空格
参数只能是整数

let命令

(( ))let命令可以缩写为双括号
循环结构
循环结构重复执行一系列语句或命令
shell三种循环结构
for循环、while循环和unti|循环
for循环

while循环

until循环
