高级shell脚本编程之函数库、信号与陷进、文件处理、数组、安全性
来源:互联网 发布:centos svn服务器搭建 编辑:程序博客网 时间:2024/05/22 10:30
高级shell脚本编程之函数库、信号与陷进、文件处理、数组、安全性
1、函数库 把所有需要用到的函数都放到一个文件中,然后每个脚本的开头包含这个文件。例如:
#!/bin/shscope(){local soc=1gblsoc=2echo "local soc in func = $soc"echo "global gblsoc in func = $gblsoc"}another_scope_function(){echo "This is another_scope_func..."}yet_another_function(){echo "yet_another_function..........."}
可以通过如下方式访问所有这些函数:
#!/bin/bash. ./lib/scope //点号(.):包含函数库文件scopeanother_scope_functionyet_another_functionexit 0
<1>getopts
getopts是shell内置的工具,用于检查传给命令行的选项是否有效。其语法如下:
getopts opstring name
getopts通过两个变量来跟踪所有事情:
OPTIND 保存下一个需要处理的参数索引
OPTARG 如果需要一个参数,getopts就把它放在这个变量中。
#!/bin/shwhile getopts "xy:z:" namedo echo "$name" $OPTIND $OPTARGdone
$ ./p213 -xy "one" -z "two"
getopts(1)、检查所有的命令行参数,查找以字符"-"开始的参数。
(2)、当找到以字符"-"开始的参数,将 "-"之后的字符串和option-string比较。
(3)、如果找到符合的匹配,则指定的变量被设置,否则,此变量被设成?字符。
(4)、重复1到3,直到所有的选项被处理。
2、信号与陷阱trap
在Shell程序运行的时候,可能收到各种信号,有的来自于操作系统,有的来自于键盘,而该Shell在收到信号后就立刻终止运行。但是在有些时候,你可能并不希望在信号到达时,程序就立刻停止运行并退出。而是他能希望忽略这个信号而一直在运行,或者在退出前作一些清除操作。trap命令就允许你控制你的程序在收到信号以后的行为。
其格式如下:
trap 'command; command' signal-number
trap 'command; command' signal-name
trap signal-number
trap signal-name
后面的两种形式主要用于信号复位,即恢复处理该信号的缺省行为。还需要说明的是,如果trap后面的命令是使用单引号括起来的,那么该命令只有在捕获到指定信号时才被执行。如果是双引号,则是在trap设置时就可以执行变量和命令替换了。
下面是系统给出的信号数字和信号名称的对照表:
1)SIGHUP 2)SIGINT 3)SIGQUIT 4)SIGILL 5)SIGTRAP 6)SIGABRT 7)SIGBUS 8)SIGFPE
9)SIGKILL 10) SIGUSR1 11)SIGEGV 12)SIGUSR2 13)SIGPIPE 14)SIGALRM 15)SIGTERM 17)SIGCHLD
18)SIGCONT 19)SIGSTOP ... ...
3、文件处理
<1>、文件检测
[option file]
表达式
-d file 如果file存在并且是一个目录
-e file 如果file存在
-r file 如果file存在并且可读
-s file 如果file存在并且大小大于0
-w file 如果file存在并且可写
-x file 如果file存在并且可执行
<2>、清除文件 收回各种信息
用trap命令清除临时文件
#!/bin/shtmpFile=/tmp/sigtrap$$cat > $tmpFilefunction removeTemp(){ if [-f "$tmpFile"] then echo "Strong out the temp file" rm -f "$tmpFile" fi }trap removeTemp 1 2exit 0
4、数组
<1>声明数组三种方法
array1[index] = value
array2=(value1 value2 value3 value4)
array3=([0]=value1 [13]=value2 [7]=value3)
<2>解引用数组
获得数组中某个特定索引位置的数据,如下:
${array[index]}
value=${array3[13]}
echo "$value"
使用特定的符号来判断一个数组中所有的数据
arrayelements=${array2[@]}
arraylength=${#array2[@]}
也许不想返回所有的元素,而只需要其中某个返回内的数据
${array[@]:3} //第一行从第四个元素开始返回所有余下元素中的数据
${array[@]:3:2} //返回第四个元素之后的两个元素的值
${!array[@]} //获得数组中包含的索引值
安全性:受限shell
#!/bin/sh
cd /usr/include
echo "'pwd'"
set -r
cd
echo "'pwd'"
set +r
exit 0
补充:
1.特殊参数$*和$@:这两个允许一次访问所有的命令行参数。除非使用双引号“”将它们括起,总结如下:
$*:指定了所有的命令行参数。
$@:也指定了所有的命令行参数。
"$*":将整个参数列表作为一个参数来获取。
"$@":获取整个参数列表,并将它分隔成不同的参数。
2.双引号", 单引号',反引号`三者的区别
单引号':由单引号括起来的字符都作为普通字符出现,特殊字符用单引号括起来以后,也会失去原有意义,而只作为
普通字符解释。
双引号":由双引号括起来的字符,除$、、’、和”这几个字符仍是特殊字符并保留其特殊功能外,其余字符仍作为
普通字符对待。
反引号`:作用同$,如$pwd和`pwd`两者效果是一样的。
- 高级shell脚本编程之函数库、信号与陷进、文件处理、数组、安全性
- shell脚本高级编程
- shell 脚本编程学习(七) 信号和数组
- unix环境高级编程-alarm、pause()与信号处理函数
- Shell之传递脚本参数与数组
- linux shell高级脚本编程之函数篇
- shell脚本处理文件
- Linux Shell编程四:高级shell脚本
- Shell脚本之数组
- shell 脚本之数组
- shell脚本之shell数组
- 《Unix环境高级编程》:信号处理
- 《Unix环境高级编程》:同步信号处理
- linux之基础shell脚本编程3 函数数组
- Linux学习-shell脚本编程基础之处理用户输入
- 高级shell脚本编程之重定向、环境变量、shell函数、echo命令用法
- 高级Shell 脚本编程学习笔记
- Shell脚本高级编程 二 正则表达式
- C#中,模拟DataGridView的CellClick事件
- $_GET、$_POST和$_REQUEST变量
- Linux下提高硬盘读写速度
- Visual Studio 2008破解版本
- 高级打字机 (Tries)
- 高级shell脚本编程之函数库、信号与陷进、文件处理、数组、安全性
- BmpMap图像数据捕获
- Welcome to the TORQUE download page.
- 后大学时代--关于梦想
- 开源消息推送 Android push message 小试
- 安装pbs
- PHP DBO事务使用
- 简单的dedecms在线报名插件开发 实例 有后台
- db2 字段大小写的区别