1 / 47

高级、专业用户

引入. 高级、专业用户. 编写 Shell 脚本程序. 使用 Shell 命令. Linux 操作系统应用. 实训 23 Shell 编程 ( 选学内容 ). 任务 1 Shell 程序的编写与执行. 统计车间生产数据. 每天上午和下午下班前必须对数据进行双硬盘备份,且要求保存最近 3 次备份。. 改手工为 Shell 程序进行备份。. 备份的数据存放于 /home/hbzy/workdata/. 最近三次备份文件为 worknewdata.tar 、 work2nddata.tar 、 work3rddata.tar.

emmet
Download Presentation

高级、专业用户

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 引入 高级、专业用户 编写Shell脚本程序 使用Shell命令

  2. Linux操作系统应用 实训23 Shell编程(选学内容) 任务1 Shell程序的编写与执行

  3. 统计车间生产数据 每天上午和下午下班前必须对数据进行双硬盘备份,且要求保存最近3次备份。 改手工为Shell程序进行备份。 备份的数据存放于/home/hbzy/workdata/ 最近三次备份文件为worknewdata.tar、work2nddata.tar、work3rddata.tar 备份文件存放于/home/hbzy/disk1backup/和/dev/disk2backup/ • 任务描述

  4. 任务实施流程 浏览“相关资讯” 任务准备 设计执行任务的程序结构与流程 用vi编辑Shell程序 调试shell程序 执行shell程序

  5. 1 什么是Shell程序 2 为什么要使用Shell编程 • 相关资讯 Shell本身就是一个解释型的程序设计语言,输入的任何命令都能直接添加到一个可执行的Shell程序中;它还提供了定义变量和参数的手段、丰富的程序控制结构。 把多个命令编制成一个Shell程序(Shell脚本)来完成这些复杂任务。

  6. 3 Shell程序基本组成 ·主体:是变量、控制语句及命令语句组成。 ·以#!作为第一行开头,用#表示注释。 4 在Shell脚本中常用的bash内部命令 (1)echo 功能:在屏幕上显示出由arg参数指定的字符串。 格式:echo arg • 相关资讯

  7. 4 在Shell脚本中常用的bash内部命令 • 相关资讯 (2)eval 功能:读入参数args,并将它们合并成一个新的命令,然后执行。 格式:eval args (3)exec 功能:不创建新的子进程,而是转去执行指定的命令,当指定的命令执行完成时,该进程就终止。 格式:exec 命令参数 (4)wait 功能:使Shell等待在后台启动的所有子进程结束,wait的返回值总为真。 格式:wait (5)exit 功能:退出Shell程序。 格式:exit [数字] (6)“.”(点) 功能:使Shell读入指定的Shell程序文件并依次执行文件中的所有语句。 格式: .Shell程序文件名

  8. 1 2 一台装有RHEL 5 Server操作系统的计算机,系统装载2块硬盘,其中非引导硬盘挂载为/dev/disk2backup;在主硬盘/home/hbzy/下建立有workdata、disk1backup两个目录分别用来存放用户工作数据文件和用户工作数据备份文件(worknewdata.tar、work2nddata.tar、work3rddata.tar)。 启动该计算机以hbzy帐号(密码hbzy123)进入字符界面。 • 任务准备

  9. 3 图10-1 查看/home/hbzy/disk1backup目录 图10-2 查看/dev/disk2backup目录 • 任务准备 查看执行任务前相关目录的状态。 -用cd命令进入/home/hbzy/disk1backup/目录,再用ls –l 命令显示,如图10-1所示。 -用cd命令进入/dev/disk2backup/目录,然后用ls –l 命令显示,如图10-2所示。

  10. 步骤1 设计完成任务的程序结构、流程 • 任务实施 在动手编写程序前,必须先构思并设计出完成任务的程序基本结构、流程如下: (1) 使用rm命令删除/home/hbzy/disk1backup/目录下的work3rddata.tar文件。 (2) 使用mv命令将/home/hbzy/disk1backup/目录下的work2nddata.tar改名为work3rddata.tar。 (3) 使用mv命令将/home/hbzy/disk1backup/目录下的worknewdata.tar改名为work2nddata.tar。 (4) 使用tar命令将/home/hbzy/workdata/目录备份为worknewdata.tar文件存放于/home/hbzy/disk1backup/目录中。 (5) 使用rm命令删除/dev/disk2data/目录中的worknewdata.tar、work2nddata.tar、work3rddata.tar三个文件。 (6) 使用cp命令将/home/hbzy/disk1backup/目录下worknewdata.tar、work2nddata.tar、work3rddata.tar三个文件复制到/dev/disk2backup/目录中。 (7) 使用输出任务完成的提示信息。

  11. 步骤2 使用vi编辑Shell程序autobackupdata.shell • 任务实施 (1)启动vi编辑器 输入命令:vi autobackupdata.shell (2)输入程序 在vi编辑器界面输入下列程序内容,输入完毕后保存退出vi。程序内容见下页。

  12. #!/bin/bash #delete file work3rddata.tar rm /home/hbzy/disk1backup/work3rddata.tar #rename file work2nddata.tar to work3rddata.tar mv /home/hbzy/disk1backup/work2nddata.tar /home/hbzy/disk1backup/work3rddata.tar #rename file worknewdata.tar to work2nddata.tar mv /home/hbzy/disk1backup/worknewdata.tar /home/hbzy/diskbackup/work2nddata.tar #backup /home/hbzy/workdata to /home/hbzy/disk1backup/worknewdata.tar tar cf /home/hbzy/disk1backup/worknewdata.tar /home/hbzy/workdata #delete files worknewdata.tar、work2nddata.tar、work3rddata.tar in /dev/disk2data folder rm /dev/disk2backup/worknewdata.tar rm / dev/disk2backup/work2nddata.tar rm / dev/disk2backup/work3rddata.tar #copy worknewdata.tar、work2nddata.tar、work3rddata.tar to /dev/disk2backup cp /home/hbzy/disk1backup/worknewdata.tar /dev/disk2backup/ cp /home/hbzy/disk1backup/work2nddata.tar /dev/disk2backup/ cp /home/hbzy/disk1backup/work3rddata.tar /dev/disk2backup/ echo “Task is finished” • 任务实施

  13. 输入命令:bash autobackupdata.shell 如果程序有错,返回“步骤2”修改程序,直到程序正确。 输入命令如图10-4所示: 图10-4 运行Shell程序 • 任务实施 步骤3 调试Shell程序 步骤4 增加Shell程序的可执行权并运行

  14. 1 查看任务完成后相关文件状况 查看任务完成后/home/hbzy/disk1backup/、/dev/disk2backup/目录下文件状况。 2 分析观测结果 通过任务完成前后显示的文件创建时间对比可知任务按要求完成。 • 任务检测

  15. 每种Shell都有自己的配置文件,用户可设置各种环境变量。重要的Shell环境配置文件有:每种Shell都有自己的配置文件,用户可设置各种环境变量。重要的Shell环境配置文件有: /etc/bashrc 包含系统定义的命令别名和bash的环境变量定义。 /etc/profile 包含系统的环境定义,并指定启动时必须运行的程序。 /etc/inputrc 包含系统的键盘设定,以及针对不同终端程序的键位配置信息。 $HOME/.bashrc 包含为用户定义的命令别名和bash的环境变量定义。 $HOME/bash_profile 包含为用户定义的环境变量,并指定用户登录时需要启动的程序。 $HOME/.inputrc 包含用户的键盘设定,以及针对用户终端的键位配置信息。 Shell环境配置文件 1 • 知识或技能拓展

  16. (1) Shell预定义变量(内建变量) Shell变量类型 2 • 知识或技能拓展 常用的Shell预定义变量有: $#:位置参数的数量。 $*:所有位置参数的内容。 $?:命令执行后返回的状态,用于检查上一个命令执行是否正确(返回0表示该命令被正确执行;返回非0值表示该命令执行出错) $$:当前进程的进程号。 $!:后台运行的最后一个进程号。 $0:当前执行的进程名 $1、$2、$3等:位置参数

  17. (2) Shell环 境变量 Shell变量类型 2 • 知识或技能拓展 常用的Shell环境变量(与系统工作环境有关的变量)有: PATH 命令搜索路径。 PWD 当前工作目录的绝对路径,其取值随cd命令的使用而变化。 SHELL 用户的Shell类型。 PS1 主命令提示符。 IFS Shell使用的分隔符。 LOGNAME 用户登陆名,也就是账户名。 UID 当前用户的识别码。 HOME 用户主目录的位置,通常是/home/用户名。 TERM 终端类型。 HISTFILE 命令历史文件。 HISTSIZE 命令历史文件中最多可包含的命令条数。

  18. (3) 用户变量 Shell变量类型 2 • 知识或技能拓展 用户定义的变量由字母、数字及下划线组成,变量名的第一个字符不能为数字,区分大小写。自定义变量的语法规则: -变量名=变量值 这样创建的变量是只属于当前Shell程序的局部变量。 -export 变量名 将一个局部变量提供给其它命令或Shell程序使用。 -export 变量名=变量值 在给变量赋值的同时使用export命令。 -readonly 变量名 保证变量的只读性。

  19. (4) 参数变量 Shell变量类型 2 • 知识或技能拓展 -变量=${参数-word}:用参数的值来置换变量的值,否则用word置换。 -变量=${参数=word}:用参数的值来置换变量的值,否则把变量设置成word,然后再用word替换参数的值。注意,位置参数不能用于这种方式。 -变量=${参数?word}:用参数的值来置换变量的值,否则就显示word,并从Shell程序退出。 -变量=${参数+word}:如果设置了参数,则用word置换变量,否则不进行置换。

  20. Shell程序的优点和基本组成 Shell程序中常用的内部命令 编写Shell程序的基本过程和基本方法 (重点) Shell环境配置文件 (重点) Shell变量类型(重点、难点) • 任务总结

  21. 1、2、3、4、5、6、7、8、9、10 二 1、2、3 • 操作与练习

  22. Thank You ! 行重于思 做重于说

  23. Linux操作系统应用 实训23 Shell编程(选学内容) 任务2 Shell编程应用

  24. 创建千人用户帐号 公司用Linux构建网络平台为内部用户提供DNS、POP3、SMTP、FTP等服务。 用户帐号名采用“部门名称+部门名称编号+用户ID号”的形式。 用Shell脚本程序为公司1千多人创建帐号 。 • 任务描述

  25. 任务实施流程 浏览“相关资讯” 任务准备 设计执行任务的程序结构与流程 用vi编辑Shell程序 调试shell程序 执行shell程序

  26. 1 Shell程序中的变量 (2)位置参数 位置参数是一种在调用Shell程序的命令行中按照各自的位置决定的变量。 • 相关资讯 (1)定义变量 即给一个变量赋值。用赋值符号(=)来实现。

  27. 2 Shell程序中的test命令 (2)整数操作符(用于数值比较表达式) • 相关资讯 (1)字符串操作符(用于计算字符串表达式) tr1 = str2 当str1与str2相同时,返回True。 str1! = str2 当str1与str2不同时,返回True。 str 当str不是空字符时,返回True。 -n str 当str的长度大于0时,返回True。 -z str 当str的长度是0时,返回True。 int1 -eq int2 当int1等于int2时,返回True。 int1 -ge int2 当int1大于或等于int2时,返回True。 int1 -le int2 当int1小于或等于int2时,返回True。 int1 -gt int2 当int1大于int2时,返回True。 int1 -it int2 当int1小于int2时,返回True。 int1 -ne int2 当int1不等于int2时,返回True

  28. 2 Shell程序中的test命令 (4)用于文件操作的操作符(检查:文件是否存在,文件类型等) • 相关资讯 (3)逻辑操作符(用于数值比较表达式) -a 与 -o 或 ! 非 -e file 当file存在时,为True。 -s file 当file存在且至少有一个字符时(文件长度大于0),为True。 -d file 当file存在且为目录时,为True。 -f file 当file存在且为普通文件时,为True。 -c file 当file存在且为字符型特殊文件时,为True。 -b file 当file存在且为块特殊文件时,为True。 -r file 当file存在且为可读文件时,为True。 -w file 当file存在且是一个可写文件时,为True。 -x file 当file存在且是一个可执行文件时,为True。

  29. 3 Shell程序控制语句 (2)case语句 • 相关资讯 (1)if语句 if expression1 then 若干命令行1 else 若干命令行2 fi case string in exp1) 若干命令行1;; exp2) 若干命令行2;; *) 其它命令行;; esac

  30. 3 Shell程序控制语句 (4)while语句 (5)until语句 • 相关资讯 (3)for语句 for 变量名 [in 数值列表] do 若干命令行 done while expression do 若干命令行 done until expression do 若干命令行 done

  31. 2 3 1 系统已创建users组。(请读者参照学习情境四中的方法自行创建有关用户) 一台装有RHEL 5 Server操作系统的计算机。 启动该计算机以root帐号(密码root123)进入字符界面。 • 任务准备

  32. 4 图10-7显示/home目录结构 图10-8 显示用户情况 • 任务准备 查看任务执行前passwd文件及/home目录的情况 - 用cd命令进入/home目录,然后用tree命令该目录结构,如图10-7所示。 - 用cat /etc/passwd命令查看用户情况,结果部分如图10-8所示。

  33. 步骤1 设计执行任务的程序结构、流程 步骤2 使用vi编辑Shell程序creatusers.shell • 任务实施 在动手编写程序前,必须先构思并设计出完成任务的程序基本结构、流程如下: (1) 使用位置参数获取需要建立的部门名称、部门编号、需要建立的用户个数。 (2) 对部门编号处理,使部门编号都为两位数据。 (3) 检查部门公共目录是否存在,如果不存在则建立部门公共目录。 (4) 使用循环语句建立用户帐户。 (5) 为建立的用户设立密码。 (1)启动vi编辑器 输入命令:vi creatusers.shell

  34. 步骤2 使用vi编辑Shell程序creatusers.shell • 任务实施 (2)输入程序 输入下列程序内容,输入完毕后保存退出vi。 #!/bin/bash #使用位置参数获取需要建立的部门名称、部门编号、需要建立的用户个数 dept=$1 deptcode=`expr $2 + 0` maxid=`expr $3 + 0`’ #对部门编号处理,使部门编号都为两位数据 if (test $deptcode -le 9) then deptcode="0"$num_class fi #建立部门公共目录。 if [ ! -x /home/allusers ] then mkdir /home/allusers fi

  35. 步骤2 使用vi编辑Shell程序creatusers.shell • 任务实施 if [ ! -x /home/allusers/$1$deptcode ] then mkdir /home/allusers/$1$deptcode fi #循环建立用户帐户 #定义用户ID userid =1 #从用户ID号1开始循环,直到最大ID号 while (test $userid -le $maxtid) do #保证用户ID为两位 if (test $userid -le 9) then userid="0"$userid fi #把部门名称、部门编号、用户ID三部分代码组合成用户名,并赋予变量user_name user_name=$dept$deptcode$userid

  36. 步骤2 使用vi编辑Shell程序creatusers.shell • 任务实施 #按“name:passwd”的格式逐行追加写入“user_pwlist”文件,以备初始化用户密码 echo $user_name":"$user_name >> user_pwlist #建立用户,同时赋予“users”组,创建该用户目录 adduser -g users -d /home/allusers/$1$deptcode/$user_name $user_name #设置该用户目录的权限为755 chmod 755 /home/alluers/$1$deptcode/$user_name #用户ID号加1,准备下一次循环,建立下一个用户 userid=`expr $userid + 1` done #为建立的用户设立密码,并删除“user_pwlist”文件 chpasswd < user_pwlist pwconv #删除“user_pwlist”文件 rm user_pwlist -f

  37. 步骤3 调试Shell程序 输入如图10-10所示命令。 步骤4 增加Shell程序的可执行权并执行 图10-10 运行Shell程序 • 任务实施 输入命令:bash createusers.shell office 1 2 如果程序有错,返回“步骤2”修改程序,直到程序正确。

  38. 1 查看任务执行后passwd文件和/home目录的状态 -更改路径:cd /home/allusers -显示目录结构: tree -查看用户情况:cat /etc/passwd 对比任务完成前后/home文件目录状态及用户情况,可知运行Shell程序后建立了相应的用户帐户,并在/home/allusers目录下分别建立了“用户部门名称+部门编号+用户编号”子目录。 2 分析观测结果 • 任务检测

  39. (1) 定义函数 (2) 函数调用 Shell函数 1 (3) 参数传递 • 知识或技能拓展 function 函数名 () { 若干命令行 } 在Shell程序中直接使用函数名称可调用函数。 向函数传递参数就像在脚本中使用位置变量$1,$2,$3……$9。

  40. (1) 信号基本操作 (2) 常见信号的含义 信号(或中断)处理 2 • 知识或技能拓展 ·kill -l 列出所有的信号,以便对其中的信号进行相关操作 ·kill -s SIGKILL 1234 表示无条件终止进程1234(进程号) ·kill 1234 终止进程1234 信号 信号名 含 义 0 SIGEXIT 退出Shell信号,可从命令行输入exit或 在一个进程、命令行中用【Ctrl+d】键 1 SIGHUP 挂起或父进程被杀死 2 SIGINT 来自键盘的中断信号,通常是<CTRL- C> 3 SIGOUIT 从键盘退出 9 SIGKILL 无条件终止 11 SIGSEGV 段(内存)冲突 15 SIGTERM 软件终止(缺省杀进程)

  41. (3) trap捕捉信号 信号(或中断)处理 2 • 知识或技能拓展 用于在Shell程序中捕捉信号,之后可能会采取3种响应方式: ·采取相应的行动 如:trap ‘commands’ signal-list 或trap “commands” signal-list ·接受信号的默认操作 如:trap signal-list ·忽略该信号 如:trap “” signal-list

  42. (1) 在Shell脚本中输出调试信息 Shell程序的调试 3 • 知识或技能拓展 -使用echo或print语句输出信息 显示需要跟踪的量的值。 -使用trap命令跟踪变量的值 在Shell脚本中止执行或从函数中退出时,输出要跟踪的变量值。使用方法是: trap 'command' EXIT或 trap 'command' 0 -使用tee命令 从标准输入读取数据,将其内容输出到标准输出设备,同时又可将内容保存成文件。 -使用DEBUG 在脚本的开发调试阶段,可以先执行export DEBUG=true命令打开调试钩子,使其输出调试信息。

  43. (2) 使用Shell的执行选项 Shell程序的调试 3 • 知识或技能拓展 利用bash命令进行调试。格式:bash-选择项 Shell程序文件名 常用选项有: -n 只读取Shell脚本,但不实际执行。可用来测试Shell程序是否存在语法错误。 -x 进入跟踪方式,把执行的每条命令的命令名、变量名及其取值都显示出来。 -v 进入跟踪方式,把读入的每条命令显示出来。 -u 在变量赋值时,对于没有初始化的变量引用视为出错。 -e 如果程序中的一条命令运行失败就立即退出。

  44. test命令和Shell操作符 (重点) Shell程序控制结构 编写复杂Shell程序的方法 (重点) Shell函数 信号处理 Shell程序的调试方法 (难点) • 任务总结

  45. 4 、5 二 • 操作与练习

  46. Thank You ! 行重于思 做重于说

  47. Shell有变量、关键字,各种控制语句,支持函数模块,有自己的语法结构。 Shell程序设计语言可以编写出功能很强、但代码简单的程序。 总结

More Related