高级shell脚本编程之函数库、信号与陷进、文件处理、数组、安全性

1、函数库 把所有需要用到的函数都放到一个文件中,然后每个脚本的开头包含这个文件。例如:

#!/bin/sh
scope(){
local soc=1
gblsoc=2
echo "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       //点号(.):包含函数库文件
scope
another_scope_function
yet_another_function
exit 0

<1>getopts

getopts是shell内置的工具,用于检查传给命令行的选项是否有效。其语法如下:

getopts opstring name

getopts通过两个变量来跟踪所有事情:

OPTIND   保存下一个需要处理的参数索引

OPTARG   如果需要一个参数,getopts就把它放在这个变量中。

#!/bin/sh
while getopts "xy:z:" name
do
echo "$name" $OPTIND $OPTARG
done

$ ./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/sh
tmpFile=/tmp/sigtrap$$
cat > $tmpFile
function removeTemp(){
if [-f "$tmpFile"]
then
echo "Strong out the temp file"
rm -f "$tmpFile"
fi
}
trap removeTemp 1 2
exit 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脚本编程之函数库、信号与陷进、文件处理、数组、安全性相关推荐

  1. Linuxshell之高级Shell脚本编程-创建函数

    写在前面:案例.常用.归类.解释说明.(By Jim) 使用函数 #!/bin/bash # testing the scriptfunction myfun {echo "This is ...

  2. shell脚本编程之函数

    技术交流QQ群:1027579432,欢迎你的加入! 1.基本的脚本函数 脚本函数出现的目的:为了解决大型处理过程中,需要将相同的重复代码封装起来,提高代码的复用性. 函数是一个脚本代码块,你可以为其 ...

  3. linux脚本编程延时函数,shell脚本编程之函数

    技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.基本的脚本函数 脚本函数出现的目的:为了解决大型处理过程中,需要将相同的重复代码封装起 ...

  4. 《Linux命令行与shell脚本编程大全 第3版》高级Shell脚本编程---32

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下: 转载于:https://www.cnbl ...

  5. 《Linux命令行与shell脚本编程大全 第3版》高级Shell脚本编程---24

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下: 转载于:https://www.cnbl ...

  6. 《Linux命令行与shell脚本编程大全 第3版》高级Shell脚本编程---35

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下: 转载于:https://www.cnbl ...

  7. 第三部分:高级 shell 脚本编程

    第 1 章:初识 sed 和 gawk shell 脚本最常见的一个用途就是处理文本文件.检查日志文件.读取配置文件.处理数据元素,shell 脚本可以帮助我们将文本文件中各种数据的日常处理任务自动化 ...

  8. Linuxshell之高级Shell脚本编程-创建菜单

    写在前面:案例.常用.归类.解释说明.(By Jim) 创建菜单 #!/bin/bash # testing the script clear echo echo -e "\t\t\tSys ...

  9. 《linux命令行与shell脚本编程大全》第三版 - 核心笔记(3/4):函数与图形化脚本

    <linux命令行与shell脚本编程大全> 全书4部分: ☆ [1]linux命令行(1-10章) ☆ [2]shell脚本编程基础(11-16章) ☆ [3]高级shell脚本编程(1 ...

最新文章

  1. 基于linuxunix高性能web服务器架构思路分析
  2. DevExpress的TreeList实现显示本地文件目录并自定义右键实现删除与重命名文件
  3. Arrays.sort()源码分析
  4. mysql主键自增长_全面的MySQL优化面试解析
  5. php通知多有人,PHP通知抑制;只有某些情况/方法
  6. linux下使用odbc连接mysql_Linux环境下通过ODBC访问MSSql Server
  7. vSphere Datacenter设计– vSphere 6.0中的vCenter体系结构更改–第2部分
  8. 不恢复余数除法原理_《有余数的除法》教案
  9. 一个广为人知但鲜有人用的技巧:对象池
  10. 二十一、K8s集群设置3-HTTPS-Cert-manager
  11. SPI子系统分析之一:框架
  12. C语言——九九乘法表
  13. 拼图软件——texturepacker
  14. NTL密码算法开源库-大整数ZZ类(三)
  15. 使用office2007发表csdn博客
  16. 外网访问内网(内网穿透)
  17. CVPR 2017论文集锦(论文分类)—— 附录部分翻译
  18. 如何使用服务器虚拟主机,购买虚拟主机后如何使用
  19. 【ASM】史上最通俗易懂的ASM教程 ASM 插件
  20. 百度开源在线文本编辑器-UEditor

热门文章

  1. linux redhat中文字体安装,中文Linuxredhat中文字体安装
  2. 网络知识入门,数字信号如何转换为电信号(七)
  3. seo如何快速有效的引流
  4. WindowsXP 瘦身及优化
  5. Machine Learning课堂笔记之Computing Parameters Analytically
  6. [电商实时数仓] 数据仓库建模过程分析
  7. 历史数据双色球小工具
  8. java 下载速度_java下载速度慢啊!!
  9. ubuntu 安装微软雅黑和 Consolas 字体
  10. 7 海康视觉平台VisionMaster 上手系列:常用工具(四)