- 1. 第七章 Shell脚本编程课程代码:
- 2. Shell脚本编程shell脚本编程基础
简单的shell脚本
shell脚本控制结构
- 3. 1、命令替换 格式:`命令表` 或 $(命令表)
如:
dir1=`pwd`
dir2=$(pwd;cd /home)
echo $dir1 或 echo `pwd`
echo $dir2 或 echo $(pwd;cd /home)
- 4. 2、Shell特殊字符 通配符
* ? [ ] [!]
ls -l dwg??[!0-9]*
列出了所有以dwg开头、中间可以是任何两个字符,后面跟随一个非数字字符、然后是任意字符串的文件名。 通配
符含义举例*与任何字符匹配ls hd* 显示以hd开头的文件名?与一个字符匹配ls t? 显示t开头的所有2字符文件名[…]与括号中任一个字符匹配ls a[136] 只与a1、a3、a6匹配[.-.]与括号中的字符范围匹配ls a[b-e] 只与ab、ac、ad、ae匹配[!…]对括号中的字符集或范围取反匹配ls hda[^b-d] 只与非hdab、hdac、hdad匹配
- 5. 引号
使用双引号可引用除字符$、`、\外的任意字符或字符串。
单引号与双引号类似,不同的是shell会忽略任何引用值。
反引号用于设置系统命令的输出到变量。(命令替换)
如果下一个字符有特殊含义,反斜线防止shell误解其含义,即屏蔽其特殊含义。下述字符包含有特殊意义: & * + ^ $ ` “ | ? (转义)
例:体会单引号与双引号的区别:
echo “Home is $HOME”
echo ‘Home is $HOME’
- 6. 3、变量 变量的种类
系统变量,系统变量主要在判断命令参数和命令执行后的返回值时用到。
环境变量,环境变量是在程序运行时需要设置的变量。
用户变量,用户变量是用的最多的一种变量,是在shell脚本中自定义的变量。
- 7. 变量赋值
变量名=字符串
如:
mufile=/usr/me/fi.c
mydir=”/root /home/zxf”
注:等号两边不能有空格,如字符串中有空格需用引号括起。
引用变量
$变量名 或 ${变量名}
如:dir=/usr/me dir=/usr/me
echo $dir echo ${dir}pc/m1.c
- 8. 环境变量
在用户注册过程中系统需要建立用户的环境,shell的环境包括所用的shell、主目录及终端类型等多方面的内容,shell环境由这些变量和变量的值组成。
常用的环境变量:
$LOGNAME 用户的登录名
$HOME 用户自己的主目录
$SHELL SHELL路径
$PATH 命令执行时的目录
$PS1 shell命令行的提示符
$PS2 命令未打完时,再输入的提示符
- 9. 设置环境变量:
变量名=值;export 变量名
清除环境变量:
unset 变量名
显示所有环境变量:env
- 10. 系统变量介绍 shell的系统变量:
$n (位置参数) $1 表示第一个参数,$2 表示第二个参数 .
$0 当前程序的名称
$# 命令行参数的个数
$? 前一个命令或函数的返回码
- 11. 4、输入、输出命令 输出命令echo
echo命令有很多功能,加-e参数为转义,其中最常用的是下面几个:
\a 响铃
\t 跳格
\n 换行
加-n参数为不换行
输入命令read
格式:read 变量1 变量2 ……
- 12. 5、算术运算格式:((算术表达式))
如:((j=6*3+2))
echo $((4**3))
echo $j
注:这里的算术表达式使用C语言中表达式的语法、优先级和结合性,除++ 、--和逗号之外,所有运算符都得到支持。
- 13. 6、条件测试写脚本时,有时要判断字符串是否相等,可能还要检查文件状态或是数字测试。基于这些测试才能做进一步动作。test命令用于测试字符串,文件状态和数字,使用最后退出状态命令$?可测知test,以0表示正确,1表示返回错误。
test一般有两种格式,即:
test condition 或 [ condition ]
例子:test –f m1.c 或 [ –f m1.c ]
echo $? echo $?
使用方括号时,要注意在条件两边加上空格。
- 14. 文件状态测试- d 目录
- s 文件长度大于0、非空
f 正规文件
- w 可写
- r 可读
- x 可执行
- 15. 测试时使用逻辑操作符-a 逻辑与,操作符两边均为真,结果为真
,否则为假。
-o 逻辑或,操作符两边一边为真,结果为
真,否则为假。
! 逻辑否,条件为假,结果为真。
- 16. 字符串测试= 两个字符串相等。
!= 两个字符串不等。
-z 空串。
-n 非空串。
- 17. 测试数值-eq 数值相等。
-ne 数值不相等。
-gt 第一个数大于第二个数。
-lt 第一个数小于第二个数。
-le 第一个数小于等于第二个数。
-ge 第一个数大于等于第二个数。
- 18. 7 简单的Shell脚本#!/bin/bash --使用的SHELL
# --注释#!/bin/bash
#This is a shell script
echo "hello!"
echo "your working is `pwd`"
#end
- 19. Shell脚本的执行方法:
bash<脚本名 注:脚本名后不能带参数
bash 脚本名 [参数]
. 脚本名 [参数] 注:以目前shell环境执行脚本
将脚本的权限设置为可执行,再运行。
如在当前目录有一脚本名为exp1,则先设置执行权限,
chmod a+x exp1
再执行,
. /exp1
- 20. 8 控制结构if…then…控制结构
If…then…else控制结构
If…then…elif控制结构
for…in控制结构
for控制结构
while控制结构
break与continue
case逻辑结构
- 21. if…then…控制结构控制流命令用来调整在shell脚本中命令的执行顺序。
if…then…流程与语法
if test condition
then
command
fi
- 22. If…then…else控制结构语法与流程if test condition
then
commands
else
commands
fiif test condition ;then
commands
else commands
fi
- 23. If…then…elif控制结构语法与流程
if test condition
then
commands
elif test condition
commands
…
else
commands
fi
- 24. for…in控制结构语法与流程for looper in argument-list
do
commands
done
- 25. for控制结构语法
for循环的流程与for…in结构是相同的。for结构的作用一般是根据参数列表中的不同参数执行不同的命令。例如:
for looper
do
commands
done#! /bin/sh
for arg
do
echo "$arg"
done
- 26. while控制结构语法与流程while test condition
do
commands
done
- 27. while控制结构实例:#! /bin/bash
number=0
while [ "$number" -lt 10 ]
do
echo -n "$number"
((number +=1))
done
echo
- 28. break与continuebreak和continue在循环结构中可以产生中断。
break可以结束整个循环,接着执行break之后的语句。
continue命令可以结束当次循环然后转入循环控制条件开始一次全新的循环。
- 29. break与continue实例:
#! /bin/sh
scope=[1 2 3 4 5]
for number in 1 2 3 4 5 6 7 8 9 10 11
do
if [ $number -le 3 ] ; then
echo "continue"
continue
fi
echo $number
if [ $number -ge 9 ] ;then
echo "break"
break
fi
done
- 30. case逻辑结构语法与流程case test-string in
pattern1)
commands
;;
Pattern2)
commands
;;
…………
*)
commands
;;
esac
- 31. 本章小结本章详细讲解了shell脚本,变量,命令的流程控制,命令语法,让读者能够看的懂,感受的到shell的强大,同时也能了解到shell的学习的难点,让读者加强练习。
- 32. 思考与练习1.使用case来创建菜单。
2.撰写一个脚本循环输出系统日志文件到屏幕上。
3. 编写一个名为backup的命令,其参数为文件名,它将创建这个文件的同名副本,且文件的扩展名为.bak.