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

4、Shell函数,Shell数组,变量替换

[复制链接]

尚未签到

发表于 2018-8-28 07:41:03 | 显示全部楼层 |阅读模式
  定义函数
  function 函数名 {
  函数的功能体
  ......
  }
  函数名(){
  函数的功能体
  ......
  }
  如何调用函数
  函数名
  函数的使用规则?
  1)先定义后调用,可以只定义不调用
  2)定义放上面,调用放下面
  3)函数名区分大小写
  4)函数名相同,后定义的生效
  5)函数名不准使用特殊符号和关健字
  6)在函数体内定义的变量叫局部变量,只能在当前函数内使用
  7)在函数体外定义的变量叫全局变量
  8)在第二个函数里敲上第一个函数的函数名,这样可以调用第一个函数的变量
  例
  #!/bin/bash
  pri() {
  echo "Hello"
  }
  pri
  函数传值
  pri(){
  echo $#
  echo $*
  echo $1
  echo $2
  }
  pri 20 40
  #!/bin/bash
  sum_two(){
  sum=`expr 2 +3`
  echo "1 + 2 = $sum "
  }
  sum_two #只能计算2+3的和
  函数递归调用
  fork炸弹 .(){.|.&};.
  分析
  1 .()
  2 {
  3 .|.&
  4 }
  5 ;
  6 .
  数组:
  用一个变量存储一组数据,并且能够对这组数据中的某个数据单独操作
  数组类型: 一维数组 二维数组 多维数组
  *
  declare 定义变量时指定变量的类型,默认变量的类型都是字符类型的
  格式1
  declare 选项 变量名
  变量名=值
  格式2
  declare 选项 变量名=值
  选项
  -i整数变量
  -x环境变量
  -r只读变量,定义的变量名不允许再修改
  -a数组变量
  例1:
  declare -i a=10 b=20
  declare -i c=a*b
  echo c
  例2:
  declare -r name=wsyht
  name=peter
  例3:
  declare -a array   #定义数组
  declare -a | grep array#查看数组
  array=(jim tom jerry lucy)      #定义数组元素
  echo ${array[1]}#输出数组元素
  array[4]=yht#如果元素下标值没有被已有元素使用,是向数组中添加新元素
  array[1]=tom#如果元素下标值已被已有元素使用,是修改已有元素的值
  array=()#如果给数值赋值时,元素列表为空,是删除数组中的所有元素
  array=(baidu 163 360)#如果给数组赋值时,元素列表里输入新值,是重新给数组[0][1][2]赋值
  显示定义数组 declare -a 数组名
  echo ${TEST[@]}         #输出元素的值
  2 3 4 5 6 7 8 9 10 11
  echo ${!TEST[@]}        #输出元素的下标
  0 1 2 3 4 5 6 7 8 9
  echo ${#TEST[@]}        #输出元素的个数
  10
  给数组变量赋值的方式:
  方法1
  数组名=(数组元素列表)
  array=(jim tom jerry lucy)     #定义数组元素
  方法2
  数组名[元素下标]=值
  array[4]=yht
  使用数组元素
  ${数组名[元素下标]}
  echo ${array[1]}
  操作数组元素相关的命令
  输出数组里的所有元素
  echo ${host[@]}
  echo ${host
  • }
      输出数组元素个数
      echo ${#host[@]}
      echo ${#host
  • }
      输出连续的某几个数组元素
      num=(a b c d e f g h i j k)
      echo ${num[@]:3}    #从下标是3的元素开始显示,后面不写,表示默认显示到最后
      echo ${num[@]:3:5}  #从下标是3的开始显示,显示5个
      echo ${num[@]:3:}   #从第三个开始显示,显示0个
      echo ${#host[0]}   #输出元素下标为0的元素个数
      输出某个数值的一部分
      echo ${host[0]}    #输出某个元素的值
      www.baidu.com
      echo ${host[0]:3}   #从数组元素值的和四个字符开始显示,显示到末尾,
      .baidu.com
      echo ${host[0]:0}  #从第一个字符开始显示,一直显示到最后
      www.baidu.com
      echo ${host[0]:0:3} #从第一个字符开始显示,共显示3个字符
      .baid
      输出数组元素
      输出某个数组元素的长度
      - echo ${数组名字[下标]}
      输出数组元素值的一部分
      - echo  $(#数组名[下标]:起始:字符数)
      例子
      server=(www.baidu.com www.163.com)
      echo $(#server[@])
      echo $(#server[1])
      wall "error" 向所有终端发警告信息,双引号里注明的是警告信息
      Shell的变量替换(改变变量赋值的方式)
      $(变量名 变量替换符 用户自定义字串)
      :-
      如果name存在且非null 则返回其值;否则返回word
      用途:如果变量没定义,反回默认值
      例:
      #name=tom
      #echo $name
      tom
      #y=$(name:-plj)
      #echo $y
      tom
      #unset name
      #y=${name:-plj}
      $echo $y
      plj
      :=
      $(name:=word)
      如果name存在且非null则返回他的值;否则设置他为word并返回其值
      用途:如果变量没定义,则给变量赋值
      例:
      #x=$(name:=100)
      #echo $x
      100
      #echo $name
      100
      #name=200
      #x=${name:=100}
      #echo $x
      200
      :+
      如果name存在且非null,则返回word;否则返回null
      用途:测试变量是否定义
      #name=jim
      #echo $name
      #a=${name:=is ok}
      #echo $a
      is ok
      #unset name
      #a=${name:=is ok}
      #echo $a
      :?
      $(name:?word)
      如果name存在且非null则返回他的值;否则显示name:word并退出当前的命令或脚本
      若省略word则显示name:parameter null or not set
      用途:捕捉由于变量未定义所导致的错误
      #name=plj
      #echo $(name:?undefined)
      pkj
      #unset name
      #echo $(name:?undefined)
      bash:name:undefined
      #echo $(name:?)
      bash:name:parameter null or not set
      number=$(n:=100)
      :-
      :+
      :?
      获取普通变量值的一部分数据
      ${变量名 替换符号 被替换的源数据表达式}
      #从左向右最短匹配删除,返回删除后剩下的数据
      例:
      #echo MAIL
      /var/spool/mail/root
      #mailidir=${MAIL#*/}
      #echo $maildir            //最短匹配,匹配到第一个/
      var/spool/mail/root
      ##从左向右最长匹配删除,返回删除后剩下的数据
      例:
      #echo $MAIL
      /var/spool/mail/root
      #echo ${MAIL##*/}        //最长匹配,匹配到最后一个/
      root
      #maildir=${MAIL##*/}
      echo $maildir
      root
      %从右向左最短匹配删除,返回删除后剩下的数据
      例:
      #echo $MAIL
      /var/spool/mail/root
      #maildir=$(MAIL%r*)
      #echo $maildir
      /var/spool/mail/
      %%从右向左最长匹配删除,返回删除后剩下的数据
      例:
      #echo $MAIL
      /var/spool/mail/root
      #maildir=${MAIL%%/*}
      echo $maildir


  • 运维网声明 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-557470-1-1.html 上篇帖子: 2、shell条件测试,运算符,选择结构,for循环结构 下篇帖子: Linux shell : 史上最简单的系统备份脚本
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

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

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

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

    扫描微信二维码查看详情

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


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


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


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



    合作伙伴: 青云cloud

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