shell编程简介97.ppt_第1页
shell编程简介97.ppt_第2页
shell编程简介97.ppt_第3页
shell编程简介97.ppt_第4页
shell编程简介97.ppt_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Shell 编程简介(ksh),Shell 简介 Shell 程序中的变量和运算符 Shell 程序中的流程控制语句 Shell 程序中的输入输出 Shell 程序中的过程 Shell 程序的调试 其他 Shell 编程工具,Shell 简介,Shell 是命令语言解释器: UNIX 核心与用户间的桥梁 命令语言解释执行的环境:别名 alias、全局变量 alias ll=ls l LDRSHOME=/scompt/qq export LDRSHOME 命令语言脚本的解释器,Shell 命令语言的几个重要特征,用简单的小工具组成功能强大的工具 进程的执行和终止 元字符和模式匹配 管道和重定向,

2、元字符和模式匹配,命令的执行: my top = ; close (TP);,Shell 程序中的变量和运算符,运算符同 C 语言 变量不需定义 变量的命名同 C 语言 变量的赋值 变量名=值 ksh 中等号前后不能有空格(区分 命令 参数 的形式),可以在一行中给多个变量赋值,用空格隔开 变量的删除 unset 变量名,Shell 程序中的变量和运算符,变量的作用范围: 子 Shell 的概念和 export,. 命令 每一个脚本都在自己的子 Shell 中运行 export 命令影响子 Shell 的环境 . 命令影响父 Shell 的环境,Shell 的标准变量,位置变量和 shift

3、命令:脚本用于得到输入参数的方法 用 $1, $2, $3, , $9, $10, 表示各个参数, shift 命令用于遍历参数表 $0 表示脚本的名字,不受 shift 命令影响 举例,显示多个文件的内容,脚本 catfiles 的内容: while -r “$1” do cat “$1” shift done 运行: catfiles foo.txt bar.txt,Shell 的标准变量,Shell 使用的标准变量: EDITOR, HOME, PATH, PS1, PS2, SHELL 举例,改变提示符: PS1=$PWD $ 注意要使用单引号,Shell 的标准变量,由 Shell

4、修改的标准变量: ERRNO, PWD, PPID 进程变量:$? (最后执行的命令的返回值) $(Shell 本身的进程号)$-(Shell 启动时的参数表) $!(最后在后台执行的进程号) 其他:$# (参数的个数),$_ (最后命令的最后一个参数),Shell 程序中的流程控制语句,if, case, for, while, until, select 与 C 语言相似,有一些差异 exit, break, continue,Shell 程序中的流程控制语句,举例:if 语句的几种格式 if test-conds if test test-conds ; then thencommand

5、s. commands.elif test-conds elsecommands. commands.else ficommands. fi,Shell 程序中的流程控制语句,举例,case 语句 case value in pattern1) commands pattern2) commands patternn) commands esac,Shell 程序中的流程控制语句,举例,select 语句 #!/bin/ksh select file in /scompt/qq/* QUIT do if -f $file ; then file $file elif -d $file ; th

6、en ls -l $file else break fi done,Shell 程序中的流程控制语句,举例,for 循环 for letter in a b c d do commands done in 可以省略,默认为遍历位置变量,Shell 程序中的流程控制语句,条件判断语句 $foo = y 相当于 test $foo = y,注意 后, 前必须有空格,且等号前后必须有空格 test 的常见使用情况: $foo eq 0 整数比较 $foo = y 字符串比较 test -d /scompt/qq是否是目录 test f /scompt/qq/foo.cpp是否是文件 test e /

7、scompt/qq/foo.cpp文件是否存在 test r /scompt/qq/foo.cpp文件是否可读,Shell 程序中的输入输出,echo, print read read 变量名 read 变量名?提示 举例:read yourname?”Please input your name: ” 重定向 流程控制语句的重定向 while true do . done foo,Shell 程序中的过程,过程即常用的命令块 foo ( ) echo $# 不需要声明 过程中的变量默认是全局的 过程中的局部变量定义:local 过程的返回值:最后执行的命令的返回值,Shell 程序中的过程,

8、过程的调用:过程名 参数 参数个数的检查, $# 等变量被压栈 if $# = 0 ; then echo “Usage: ” exit 1 fi 过程库的使用 用 . 命令读入,Shell 程序中常用的工具,awk:模式匹配语言 #!/bin/sh set -vx pid=ps -e | grep $1 | awk BEGIN prog=ARGV1 ; ARGC=1 # ps e 的输出为:进程号 终端 时间 程序名 if ($4 = prog) printf %s , $1; $1 if $pid != ; then echo $1 (pid $pid) is running. retur

9、n 0 fi,Shell 程序中常用的工具,sed sed ed 命令 文件名 使用正则表达式 可以处理任意长的输入 不修改原文件,输出修改后的内容 常见用法: 替换:s/旧字符串/新字符串/g 其他:/模式/命令 举例,列出比某文件新的文件,脚本 lnew 的内容: ls lt | sed /$1/q,Shell 程序中常用的工具,basename, head, xargs basename fullname=/scompt/qq/foo.txt filename=basename $fullname head 1 foo.txt find . name *.cpp print | xarg

10、s grep LDRS 与 grep LDRS find . name *.cpp print 作用相同,Shell 程序中常用的工具,trap 和 kill kill 向进程发送信号 kill signal pid trap 在 Shell 中捕获信号,忽略某些信号,防止正在进行的操作被打断,或进行删除临时文件等操作。 trap 命令序列 信号值 例:trap rm f $temp; exit 1 2 15 其中 2 为中断信号(如用户键入Ctrl-C),15为终止信号(kill 产生的缺省信号),注意命令序列应该用单引号括起,Shell 程序中常用的工具,trap 的使用举例 sh cat

11、 temp.txt Anything you want to input in the temp.txt Ctrl-D temp=temp.txt trap rm f $temp; exit 1 2 15 Ctrl-C,ksh 中的一些有用特征,命令行编辑 按一次 Esc, 使用 vi 中的编辑命令 命令补全 按两次 Esc 命令的重用 如:r make,在命令历史中查找最近的以 make 开头的命令并执行 用 alias 可以看到 r 是 Shell 内部命令 fc e 的别名,Shell 程序的调试,1、两种方法: sh nvx foo.sh 或 set -nvx 在程序中加入语句 set

12、 nvx 2、说明: -v 输出读入的语句 -x 输出替换后实际执行的语句, 前加+表示 -n 不真正执行语句 3、其他调试技巧: 用 echo 调试简单而危险的语句 (rm, mv),Shell 程序的例子,#! /usr/bin/sh # (#) $Revision: 72.2 $ #calendar.sh - calendar command, uses /usr/lbin/calprog PATH=/usr/bin # 临时文件 _1=/tmp/$.1 _2=/tmp/$.2 # 信号处理, EXIT,SIGHUP,SIGINT,SIGPIPE,SIGTERM trap “rm -f

13、$_1 $_2; trap 0; exit” 0 1 2 13 15 case $# in 0) if -f calendar ; then /usr/lbin/calprog $_1 LANG= egrep -f $_1 calendar else echo $0: pwd/calendar not found ,Shell 程序的例子,*) pwget | sed s/(:*):.*:(.*):*$/_dir=2 _user=1/ | # 查找用户和目录, 第一和倒数第二个字段 while read _token; do eval $_token# evaluates “_dir=/scompt/qq _user=qq” 赋值 if -s $_dir/calendar ; then /usr/lbin/calprog $_dir/calendar $_1 LANG= egr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论