《10 shell编程(2).ppt》由会员分享,可在线阅读,更多相关《10 shell编程(2).ppt(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、高级高级SHELL脚本编程脚本编程 shell 编程(二)编程(二)高级shell编程数值数据处理中断处理exec命令与文件I/Oshell函数expr命令shell将所有变量都当作字符串处理有利于符号型数据处理不利于数值型数据处理,无法进行算术与逻辑操作expr命令功能:计算算术/逻辑表达式的值,结果送往标准输出格式:expr expression常用运算符整数比较:=、=、=,=、!算术运算:+、-、*、/、%expr命令以下脚本顺序输出从1到指定数之间的整数#!/bin/shif$#!=1 thenecho“Usage:$0 inter-argument”exit 1fitarget=“
2、$1”current=1while$current le$target do echo“$current c”current=expr$current+1doneexit 0#!/bin/shif$#-eq 0 thendir=“.”elif$#!=1 then echo“Usage:$0 dir name”exit 1elif !d“$1”then echo“Usage:$0 dir name”exit 1elsedir=“$1”fifile_count=ls$dir|wc-wif$file_count-eq 0 thenecho“$dir:Empty directory.”exit 0fi
3、sum=0ls“$dir”|more|while read filedofile=“$dir”/”file”if -f“$file”then set-ls l“$file”sum=expr$sum+$4fiexpr命令expr命令if “$file_count”gt 1 then file_count=expr$file_count-1 else if “$dir”=“.”then dir=“your current directory”fi echo“The size of all ordinary files in$dir is$sum bytes.”fidone这个脚本将指定目录下的所有
4、普通文件的大小进行累加,计算总大小。高级shell编程数值数据处理中断处理exec命令与文件I/Oshell函数一、UNIX中断UNIX中,有多种不同的信号可以被发送给运行的程序,导致程序中断常用的中断信号说明信号名信号名信号编号信号编号作用作用SIGHUP1当运行进程的用户推出系统时通知进程,然后进程终止SIGINT2用户按下,然后进程终止SIGQUIT3用户按下或者,然后进程终止SIGKILL9用户通过kill-9命令终止进程SIGSEGV11进程访问不属于自己的地址空间,导致内存错误,进程终止SIGTERM15使用不带参数的kill命令终止进程SIGTSTP18挂起进程,通常是SIGCH
5、LD20子进程终止时,通知父进程二、trap命令trap命令功能:拦截指定的信号,允许用户程序处理中断格式:trap command-list signal-list拦截signal-list中的信号,以command-list命令序列处理中断如果trap不带command-list参数时,signal-list中的信号将被忽略高级shell编程数值数据处理中断处理exec命令与文件I/Oshell函数一、exec命令exec命令是UNIX载入程序的命令版本两个用途执行命令/程序替代当前进程(shell进程)打开/关闭文件描述符与重定向符一起使用时,允许命令或脚本读写任何类型的文件二、使用ex
6、ec命令进行文件I/O语法语法含义含义exec file打开file,并将file作为进程标准输出exec file将进程的标准输出连接到file中exec n file对file写操作,并且为其分配描述符nexec n file对file追加操作,并且为其分配描述符nexec n&m将m中的数据复制到n中exec&-关闭标准输出exec n&-关闭连接到标准输出的描述符为n的文件exec /dev/tty将标准输入重新连接到标准终端标准输入为0,标准输出为1#!/bin/shif !$#-eq 2 then echo“Usage:$0 file1 file2”exit 1elif !f “$
7、1”then echo“$1 is not a file!”exit 1elif !f“$2”then echo“$2 is not a file!”exit 1else:fifile1=“$1”file2=“$2”exec 3“$file1”exec 4“$file2”while read line1 0&3doif read line2 0&4 thenif “$line1”!=“$line2”then echo“$1 and$2 are different”echo“$1:$line1”echo“$2:$line2”exit 1fielse echo“$1 and$2 are deffe
8、rent and$1 is bigger than$2.”exit 1fidoneexec 3&-exec 4&-使用exec命令进行文件I/O高级shell编程数值数据处理中断处理exec命令与文件I/Oshell函数shell函数shell函数由一系列命令组成(函数体)可以在shell中被调用类似c语言中的函数定义function_name()command-list调用:函数调用时,函数体才真正执行shell函数#!/bin/shif$#-eq=then echo“Usage:$0 name”exit 1fiOutpuData()echo“Info about$user_input”(grep i“$user_input”|sort)DIRECTORYJohn DJenny GDavid Nice999.111.3333david_nicemit.eduDavid Carr777.999.2222dcarraa.govDIRECTORYechoshell函数while$#!=0 douser_input=“$1”OutputDatashift#Get the following namedoneexit 0