设为首页 收藏本站
查看: 1012|回复: 0

[9-13]Shell系列7——函数及参数传递

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2018-8-29 06:27:16 | 显示全部楼层 |阅读模式
  本文旨在复习shell函数作用、定义、嵌套、删除、终端调用、返回值、参数传递
  知识储备

  •   函数:即Functions,把一组实现通用功能的独立的代码模块[通常里面是变量,可变的参数组成]封装在一起,并给予命名;后续用到时,可直接通过给定函数名来调用整体代码
  •   函数作用:代码重用 模块化编程
  •   函数使用:先定义:编写函数代码 后调用:调用函数,按需传递参数[非必需]
  函数定义及调用
  函数定义格式主要有2种,如下:
  1
  2
  3
  4
  5
  6
  7
  8
  9
  10
  11
  12
  function Fun_Name () {
  函数体
  ...
  [ return value ]
  }
  #--------------------------->#
  Fun_Name () {
  函数体
  ...
  [ return value ]
  }
  第一种,使用关键字function申明函数名
  第二种,直接用函数名来,本质上没有多大区别,为了可读性,建议采用第一种
  调用方式:直接使用函数名,不需要带
  1
  2
  3
  4
  function sum () {
  echo "$[$1+$2]"
  }
  sum $1 $2
  
  函数嵌套
  函数之间可以彼此嵌套,当一个函数依赖于另一个小函数的时候可以这么用,举个例子
  实现代码
  1
  2
  3
  4
  5
  6
  7
  8
  9
  10
  11
  #!/bin/bash
  function fun1 () {
  echo "This is fun1."
  }
  function fun2 () {
  echo "This is fun2."
  fun1
  }
  fun2

  函数删除
  变量可以使用unset删除,那么函数也可以删除,不过谁会这么蛋疼?
  1
  unset .f function_name
  终端调用
  如果想在终端使用自己定义的函数,那么可以将函数定义放在.profile这类文件中
  当然了profile文件,根据以前所学的知识
  全局profile--->   /etc/profile /etc/profile.d/*.* [这里有众多脚本文件在开机后自执行]
  个人profile ---> ~/.bash_profile
  例1:在所有用户定义一个函数sumsum求2个数的合,并且可以在终端直接调用

  在/etc/profile中定义好函数后,需要重新加载一下profile文件[注销 或 source /etc/profile ]

  返回值
  命令执行结果有2种:执行结果 + 执行状态结果。执行状态结果是0-255的数值,0成功,其他失败。
  函数返回值其实就是状态结果,用来表示函数执行成功与否,就是之前说的$?这个特殊变量的值。
  用户可以使用[ return value ]自定义函数值
  例1:定义一个自定义返回值的函数执行
  1
  2
  3
  4
  5
  6
  7
  #!/bin/bash
  function fun1 () {
  echo "This is fun1."
  return 188
  }
  fun1

  注意点:
  函数返回值只能是0-255的整数,其中0标识成功,1-255表示失败
  函数代码执行时,一旦遇到return,函数代码终止执行,返回自定义的函数值[如果有的话]
  函数返回值引入的好处是:若一个程序导致错误的情况有多种,假设每种错误都分别定义函数返回值,那么维护和调试会简单许多!
  参数传递
  参数传递不仅仅供函数体调用,任何想要调用的脚本代码只需要遵循语法格式写出调用语句即可调用。
  在执行脚本时,后续加入多个参数,即所谓的将参数传递进脚本,如下
  例1:为脚本传递多个参数,并调用这些参数

  实现代码
  1
  2
  3
  4
  5
  6
  #!/bin/bash
  echo "The first paramater is  $1"
  echo "The second paramater is $2"
  echo "Paramaters Counts  -->  $#"
  echo "All Paramaters are -->  $@"
  红框的"1 2 3"即传递参数给该脚本,这里的$1, $2即对传递的参数的引用,其实本质是特殊变量。
  $# 传递参数的总个数, $@ 打印输出全参数。还有别的特殊变量及用法 --> 参考 [9-13]Shell系列2——变量基础


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-557862-1-1.html 上篇帖子: bash shell基础之二条件判断 下篇帖子: bash shell基础之三字符串测试及for循环
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表