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

shell函数基础

[复制链接]

尚未签到

发表于 2018-8-20 10:56:02 | 显示全部楼层 |阅读模式
  有关函数的重要说明:
  执行shell函数时,函数名前的function和函数名后面的小括号都不要;
  函数的定义必须要在执行的程序前面定义或加载
  shell执行系统中各种程序的执行顺序为:系统别名-->函数-->系统命令-->可执行文件
  函数执行时,会和调用它的脚本共用变量,也可以为函数设置局部变量及特殊位置参数
  在shell函数里面,return命令的功能与exit类似,return的作用是退出函数,而exit是退出脚本文件
  return语句会返回一个退出值给调用函数的当前程序,而exit会返回一个退出值给执行程序的当前shell
  如果将函数存放在独立的文件中,被脚本加载使用时,需要使用source或者"."来加载
  在函数内一般使用local定义局部变量,这些变量离开函数后就会消失
  带参数的函数执行方法:
  函数名  参数1 参数2
  函数后接参数的说明:
  shell的位置参数($1,$2...$#,$?,$*,$@)都可以作为函数的参数来使用
  此时父脚本的参数临时地被函数参数所掩盖或隐藏
  $0比较特殊,它仍然是父脚本的名称。
  当函数执行完成时,原来的命令行脚本的参数即可恢复。
  函数的参数变量是在函数体里面定义的。
#!/bin/bash  
oldboy() {
  
  echo "I am oldboy"
  
}
  

  
function  xpg {
  
  echo "I am xpg"
  

  
}
  

  
oldboy
  
xpg
  
~
  分离函数体和执行函数的脚本文件(更规范的方法)
  首先建立函数库脚本(默认不会执行函数)
  使用cat命令追加多行文本,以将函数代码追加到系统的函数文件中,即/etc/init.d/function。
[root@localhost ~]# cat >> /etc/init.d/functions /dev/null
  
tty=$?
  
if [ $tty -eq 0 ]; then
  
  echo "$1 is yes"
  
else
  
  echo "$1 is no"
  
fi
  
}
  
aa $*
  
bb $*
  
官方的(更直接和权威):
  
#!/bin/bash
  
aa() {
  
  echo "plz usage:$0 URL"
  
}
  
bb() {
  
wget -T 10 --tries=2 $1 >/dev/null
  
tty=$?
  
if [ $tty -eq 0 ]; then
  
  echo "$1 is yes"
  
else
  
  echo "$1 is no"
  
fi
  
}
  
main () {
  
  if [ $# -ne 1 ]
  
    then
  
      aa
  
  fi
  

  
  bb $1
  
}
  
main $*
  学习函数之后尽量将脚本功能模块化,每个模块实现一个功能,并且让脚本可以通用。
  范例8-6:将函数的传参转换成脚本文件命令行传参,判断任意指定的URL是否存在异常,并以更专业的输出显示;
#!/bin/bash  
. /etc/init.d/functions    #引入系统函数库
  
aa() {
  
  echo "plz usage:$0 URL"
  
}
  
bb() {
  
wget -T 10 --tries=2 $1 -o /dev/null
  
tty=$?
  
if [ $tty -eq 0 ]; then
  
  action "$1 is yes" /bin/true    #这里的action就是在脚本开头引入系统函数库后调用的
  
else
  
  action "$1 is no" /bin/false
  
fi
  
}
  
main () {
  
  if [ $# -ne 1 ]
  
    then
  
      aa
  
  fi
  

  
  bb $1
  
}
  
main $*
  
~
DSC0000.jpg




运维网声明 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.iyunv.com/thread-554203-1-1.html 上篇帖子: Linux 快速生成虚拟机 shell脚本 下篇帖子: 每日一shell(三)进程内存求和
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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