课程大纲
Shell编程语法
Shell脚本调试
Shell应用实例
一个简单的shell程序
$ cat example
#!/bin/sh
#This is to show what a example looks like.
echo "Our first example"
echo"Our first example"
echo # This inserts an empty line in output.
h"W tl i th f ll i di t"
echo "We are currently in the following directory."
/bin/pwd
echo
h
echo "This directory contains the following files"
/bin/ls
/bi/l
一个简单的shell程序
前面例子的结构:
1. #!指定执行脚本的shell
1#!
2. #注释行,执行时被忽略。
33. 命令和控制结构
创建shell程序的步骤:
第一步创建一个包含命令和控制结构的文件
第一步:创建一个包含命令和控制结构的文件。第二步:修改这个文件的权限使它可以执行。
使用chmod u+x
h d+
第三步:执行./example
(也可以使用“sh example”执行)
h l”
Shell变量
变量:是shell传递数据的一种方法,用来代表每个取值的符号名。
Shell有两类变量:临时变量和永久变量。
临时变量是shell程序内部定义的,其使用范围仅限于定
义它的程序,对其它程序不可见。包括:用户自定义变
量位置变量永久变量是环境变量其值不随脚量、位置变量。永久变量是环境变量,其值不随shell
本的执行结束而消失。
用户自定义变量
用户定义的变量由字母或下划线开头,由字母、数字或下划线序列组成,并且大小写字母意义不同。变量名长度没有限制。
同变量名长度没有限制
在使用变量值时,要在变量名前加上前缀“$”。
使
设置和使用变量
设置变量:习惯上用大写字母来命名变量。变量名只能以字母表中的字符开头,不能用数字。
以字母表中的字符开头不能用数字
变量赋值:赋值号“=”两边应没有空格。
定义时赋值,如ABC=abcdefg
将个命令的执行结果赋给变量,如:A=date
将一个命令的执行结果赋给变量如:A=`date`
将一个变量赋给另一个变量,如:A =$ B
使命令查看个变值例如
使用echo命令用于查看一个变量值。例如:echo $A
设置和使用变量
列出所有的变量:
# set
包含多个字的变量:
$NAME=Mike Ron
运行时出错,应改为:
$NAME Mike Ron或$NAME Mike Ron $NAME=“Mike Ron”$NAME=‘Mike Ron’
使
设置和使用变量
单引号和双引号的区别:
# $ABC=‘$NAME Junior’
$$i
# echo $ABC
$NAME Junior
单引号之间的内容原封不动地指定给了变量。删除变量:
#NAME
# unset NAME
简单Shell脚本
#!/bin/sh
# Shell Script filename : checkdisk.sh
h ll i fil h kdi k h
log=/var/log
/usr/bin/du -sh /home > $log/du.log
/bin/mail -s Disk Usage Ratio root < $log/du.log
/bin/mail-s"Disk Usage Ratio"root<$log/du log
使用范例:# sh checkdisk.sh
作用:检查指定目录的磁盘空间使用率,将结果记录在/var/log/du.log,发给root。
位置变量和特殊变量Shell解释执行用户的命令时,将命令行的第一个字作为命令名,而其它字作为参数。由出现在命令行上的位置确定的参数称为位置参数。例如:
ls -l file1 file2 file3
ls-l file1file2file3
$0 这个程序的文件名ls -l
$个参数值19
$n 这个程序的第n个参数值,n=1-9
特殊变量
有些变量是一开始执行Script时就会设定,且不能被修改但我们不叫它只读的系统变量而叫能被修改,但我们不叫它只读的系统变量,而叫
它特殊变量。这些变量当一执行程序时就有了,
用户无法将般的系统变量设定成只读的。以下用户无法将一般的系统变量设定成只读的。以下是一些等殊变量:
$* 这个程序的所有参数
$$# 这个程序的参数个数
$$ 这个程序的PID
$!执行上个后台指令的PID
$! 执行上一个后台指令的PID
$? 执行上一个指令的返回值
特殊变量#!/usr/bin/sh
#test special variable
# test special variable
# Usage: sh special.var file01 file02 echo $# is: $#
echo'$#is:'$#
echo '$* is:' $*
echo $? is: $?
echo'$?is:'$?
echo '$$ is:' $$
echo $0 is: $0
echo'$0is:'$0
Shell命令read命令:从键盘读入数据,赋给变量如:read var1 var2
read 命令read的例子:
#!/usr/bin/sh
read first second third
echo"the first parameter is$first" echo"the second parameter is$second”h"th d t i$d echo"the third parameter is$third"
expr p命令Shell变量的算术运算:
expr命令:对整数型变量进行算术运算例如:expr 3 + 5
expr $var1 -5
expr$var1
expr $var1 / $var2
p
expr $var3 \* 10
expr p命令#!/bin/sh
a=10
b=20
c=30
value1=`expr $a + $b + $c`
`$$$`
echo "The value of value1 is $value1" value2expr $c / $b
value2=`expr$c/$b`
echo "The value of value2 is $value2" value3=`expr $c \* $b`
echo "The value of value3 is $value3" h"Th l f l3i$l3" value4=`expr $a + $c / $b`
$
echo "The value of value4 is $value4"
复杂的p命令
expr
复杂的运算:
expr `expr 5+7`/$var4
将运算结果赋予变量:
var4= expr $var1 / $var2
var4=`expr$var1/$var2`
变量测试语句
变量测试语句:用于测试变量是否相等、是否为变量试句用试变量相等为空、文件类型等。
空文件类型等
格式:
test 测试条件
测试范围:整数、字符串、文件
变量测试语句
字符串测试:
test str1=str2 测试字符串是否相等
test str1!=str2 测试字符串是否不相等t t t1!t2
test str1 测试字符串是否不为空
test -n str1 测试字符串是否不为空
test -z str1 测试字符串是否为空