03_Shell函数.ppt

  1. 1、本文档共28页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
03_Shell函数

Shell函数 本章目标 掌握字符串截断 了解Shell函数基本概念 了解Shell函数的定义 掌握Shell函数使用 重点难点 字符串截断 shell函数定义 shell函数调用 字符串截断 Shell编程中经常要对字符串进行处理 对于文件名的简单截断,可以使用basename和dirname 如果要进行更复杂的截断,可以使用bash 内置的变量扩展功能 前截断 #!/bin/sh MYVAR=foodforthought.jpg echo ${MYVAR##*fo} echo ${MYVAR#*fo} rthought.jpg odforthought.jpg 注意 在上述例子中,输入了 ${MYVAR##*fo}。它的确切含义是什么?可以这样理解: 首先通过${ }找到变量MYVAR的值"foodforthought.jpg"。 然后在变量中查找能够匹配通配符 ("*fo")的子串。 两个 ##,说明是匹配通配符 "*fo" 的 最长子字符串 然后将源字符串从找到子字符串的开始处截去。 前截断说明 f fo MATCHES *fo foo food foodf foodfo MATCHES *fo foodfor foodfort foodforth foodfortho foodforthou foodforthoug foodforthought foodforthought.j foodforthought.jp foodforthought.jpg 短截断与后截断 “##”表示长截断,是将匹配的最长字符串截断 “#”表示将匹配的最短字符串截断 若要将匹配字符串后面的内容截断,可以使用“%%”或“%” 前截断 #!/bin/sh MYFOO="chickensoup.tar.gz" echo ${MYFOO%%.*} echo ${MYFOO%.*} chickensoup chickensoup.tar 记忆方法 在标准键盘上,shift-4 是 "$",它是 bash 变量扩展字符。 紧靠 "$" 左边的是 "#",也就是说:"#" 位于 "$" 的“开始处”,"#" 从字符串的开始处除去字符。 反之 "$" 右边的字符是"%","%"代表除去字符串后面的字符。 重复两次代表长匹配,单独一次代表短匹配。 为什么要用函数 函数定义后可以多次调用,提高代码重用性,提高开发效率。 函数修改方便,有利于提高代码灵活性。 函数定义 函数定义的语法如下: 函数名() { body } 显示文件内容 #!/bin/sh tarview() { echo -n "Displaying contents of $1 " if [ ${1##*.} = tar ]; then echo "(uncompressed tar)" tar tvf $1 elif [ ${1##*.} = gz ]; then echo "(gzip-compressed tar)" tar tzvf $1; then echo "(bzip2-compressed tar)" fi } 又见$1 在上例中,又出现了$1。 函数中出现的$1,不是表示Shell程序的第一个参数,而是表示当前函数的第一个参数。 上例中出现的${1##*.}是什么意思? 函数调用 Shell编程中的函数调用和C语言中不同,不带括号: 函数名 参数1 参数2 ... 将shell程序获得的第一个变量做为参数,调用上例中的函数: 从使用上说,shell函数调用更类似于 Linux中命令的使用 #!/bin/sh # 函数定义... tarview $1 c函数作用域 在编写c程序时,函数内部定义的变量,其作用域局限在该函数内部。 若在函数中定义的变量名和外部其它的变量名相同,将发生覆盖。 void foo(); void main(){ int a=10; foo(); printf("%d",a); } void foo(){ int a=20; } shell函数作用域 在编写shell程序时,函数内部定义的变量默认情况下具有程序级作用域。 若在函数中定义的变量名和外部其它的变量名相同,将不会发生覆盖,在函数内部修改变量,会影响到函数外部该变量的值。 或要指定变量的作用域局限在函数内部,应该使用local命令。 作用域案例 #!/bin/sh #!/usr/bin/env bash myvar="hello" myfunc() { my

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档