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