文档章节

shell编程总结13(函数)

心中的理想乡
 心中的理想乡
发布于 2017/02/25 21:33
字数 1014
阅读 13
收藏 0
点赞 0
评论 0

这一章主要讲的是每个编程语言都躲不开的功能:函数
1、创建函数
    格式:
        (1)
        function name {
            commands
        }
        (2)
        name(){
            commands
        }
    说明:两种格式使用哪种都可以

2、使用函数
    举例:
        #!/bin/bash
        function func2{
            echo "This is an example of a function"
        }
        func2
    说明:注意,函数必须要先定义在使用,所以函数要定义在最前头,在使用之前,这一点类似于c语言的特性,还有,如果重复定义了同名字的函数,会出现覆盖的现象,最终使用的函数体是最后一次定义的函数
3、返回值:bash shell会把函数当成小型脚本,运行结束时会返回一个退出状态码,有3种不同的方法来生成退出状态码
    (1)默认退出状态码:使用$?变量来查看或者修改退出状态码,不过这个状态码是最后一条命令运行的状态码,如果中间有命令报错,报错的状态码是不会被保留的。
         举例:
             #!/bin/bash
             func1{
                 echo "Test"
                 ls -l badfile
             }
             func1
             echo "$?"
         另一个例子:
             #!/bin/bash
             func1{
                 ls -l badfile
                 echo "Test"
             }
             func1
             echo "$?"
         说明:这两个例子一个最后输出的是1,一个是0
    (2)使用return命令来返回特定的退出状态码并且结束函数
        举例:
            #!/bin/bash
            function db1{
                read -p "Enter a value: "value
                echo "double the value"
                return $[ $value *2 ]
            }    
            db1
            echo "The new value is $?"

        说明:
            a、记住,函数一结束就取返回值
            b、记住,退出状态码必须在0~255之间
            $?这个变量时会返回最后一条命令退出状态码,所以如果在取状态码之前执行了其他命令,那么这个变量的值就会被改变
            另外,如果返回一个大于256的值,都会返回一个错误的值:1
    (3)使用变量保存函数的返回值,也就是退出状态码,这样就可以摆脱$?被其他命令改变的命运
        举例:
            #!/bin/bash
            function db1{
                read -p "Enter a value: "value
                echo "double the value"
                return $[ $value *2 ]
            }    
            resut=`db1`
            echo "The new value is $result"

4、向函数传递参数:和普通shell脚本运行时一样传递,因为函数类似于一个小脚本,所以内部对参数的处理也是一样的
    举例:
        传递举例:func1 3 4
        处理举例:
            #!/bin/bash
            function func1{
                if [ $# -eq 0 ] || [ $# -gt 2 ]
                then
                    echo -1
                elif [ $# -eq 1 ]
                then
                     echo $[ $1+$1 ]
                 else
                     echo $[ $1+$2 ]
                 fi
            }
            value=`fun1 10 15`
            echo $value
            value=`func1 10`
            echo $value
        说明:这里面value保存的函数输出或者是返回值,shell函数会将输出与返回值一起保存给最终的执行结果的

5、函数的特性:
    举例:
    #!/bin/bash
    function badfunction1{
        echo $[ $1 + $2 ]
    }
    if [ $# -eq 2 ]
    then
        value=`badfunction1`
        echo "The result is $value"
    else
        echo "Usage: badtest1 a b"
    fi
    $ ./badtest1 10 15
    说明:这个运行会报语法错误,因为函数的传入参数不能使用shell脚本本身的使用参数,他们是独立的,如果真的想使用脚本shell的参数的话,那要在调用函数的时候,手动传入

6、在函数中处理变量:一共有两类变量,一个是全局变量,一个是局部变量
    (1)全局变量:在shell脚本中的任何地方都有效的变量。如果在主题部分定义一个变量的话,那么这个就是全局变量,如果在函数内自然定义一个变量的话,也是全局变量。默认情况下,你在脚本中定义的任何变量都是全局变量。
    (2)局部变量:只可以在函数内部使用的变量,定义方法:local temp,如果和全局变量同名的话,shell会保证两个变量值的分离

7、使用source命令将另外一个shell脚本当做当前的shell的上下文,类似于将另外一个shell脚本导入当前脚本中,也可以使用一个快捷别名:点操作符:
    source /home/init(. /home/init)

© 著作权归作者所有

共有 人打赏支持
心中的理想乡
粉丝 8
博文 68
码字总数 61989
作品 0
深圳
程序员
Shell 参数扩展及各类括号在 Shell 编程中的应用

今天看有人总结了 shell 下的参数扩展,但不是很全,恰好以前整理过放在百度空间,但百度空间目前半死不活的情况下对 Google 非常不友好,索性一并转过来方便查阅。 1、bash 中的大括号参数扩...

大数据之路
2015/01/17
0
4
python流程控制、函数总结

shell脚本是由系统命令、变量、流程控制三者组合而成的; 类比python程序,与shell中能够实现很多功能的系统命令类似,python有很多可以实现不同功能的模块; 变量方面,shell脚本有系统变量...

yumushui991
2017/03/09
0
0
Unix/Linux系统编程-知识脉络

本文档 下载地址 http://pan.baidu.com/s/1dFqeJvz Unix/Linux系统编程 尹德位 2016 cnyinlinux@163.com 目 录 第一部分 知识体系概览 第二部分 系统编程兵法 第三部分 实战案例综述 第一部分...

cnyinlinux
2016/06/23
354
0
bash特性小结&bash变量

时间就是金钱 效率就是生命 一、bash编程 |---------------| 二、bash特性总结 bash特性: 命令行展开:~,{} 命令别名:alias,unalias 命令历史:history 文件名通配:glob 快捷键:ctrl+...

技术小美
2017/11/08
0
0
linux运维实战练习-2015年9月13日-9月15日课程作业

一、作业(练习)内容: 1、描述shell程序的运行原理(可附带必要的图形说明); 2、总结shell编程中所涉及到的所有知识点(如:变量、语法、命令状态等等等,要带图的哟); 3、总结课程所讲...

xjxiaolei
2015/09/23
0
0
python变量数据类型总结

今日在对比shell编程和python编程时,对于关键字、数据类型、流程控制、异常处理这些有了新的看法,同时对“面向过程编程-函数式编程-面向对象编程”的编程思想也有了一些更深的看法,所以准...

yumushui991
2017/03/09
0
0
shell编程函数与数组

shell编程函数与数组 1、shell中函数 (1)shell中函数的语法 语法一: 函数名(){ 指令 return n } 语法二: function 函数名(){ 指令 return n } (2)shell中函数的调用执行 1)直接执...

Dayi_123
2017/05/19
0
0
整理一些PHP开发安全问题

整理一些PHP开发安全问题   php给了开发者极大的灵活性,但是这也为安全问题带来了潜在的隐患,近期需要总结一下以往的问题,在这里借翻译一篇文章同时加上自己开发的一些感触总结一下。 ...

开元中国2015
2015/07/06
392
0
linux下shell脚本编程2

1、 if 判断一些特殊用法 if [ -z $a ] 这个表示当变量a的值为空时会怎么样 if [ ! -e file ]; then 表示文件不存在时会怎么样 if (($a<1)); then …等同于 if [ $a -lt 1 ]; then… [ ] 中不...

像教授
2017/11/26
0
0
大数据学习之路(持续更新中...)

在16年8月份至今,一直在努力学习大数据大数据相关的技术,很想了解众多老司机的学习历程。因为大数据涉及的技术很广需要了解的东西也很多,会让很多新手望而却步。所以,我就在自己学习的过...

青夜之衫
2017/12/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java集合元素的默认大小

当底层实现涉及到扩容时,容器或重新分配一段更大的连续内存(如果是离散分配则不需要重新分配,离散分配都是插入新元素时动态分配内存),要将容器原来的数据全部复制到新的内存上,这无疑使...

竹叶青出于蓝
9分钟前
1
0
Java快速开发平台,JEECG 3.7.7闪电版本发布,增加多套主流UI代码生成器模板

JEECG 3.7.7 闪电版本发布,提供5套主流UI代码生成器模板 导读 ⊙平台性能优化,速度闪电般提升 ⊙提供5套新的主流UI代码生成器模板(Bootstrap表单+BootstrapTable列表\ ElementUI列表表单)...

Jeecg
12分钟前
0
0
export 和 module.export 的区别

在浏览器端 js 里面,为了解决各模块变量冲突等问题,往往借助于 js 的闭包把左右模块相关的代码都包装在一个匿名函数里。而 Nodejs 编写模块相当的自由,开发者只需要关注 require,exports,...

孟飞阳
15分钟前
1
0
技术教育的兴起

技术教育的兴起 作者: 阮一峰 1、 有一年,我在台湾环岛旅行。 花莲的海边,我遇到一对台湾青年夫妻,带着女儿在海滩上玩。我们聊了起来。 当时,我还在高校当老师。他们问我,是否觉得台湾...

吕伯文
15分钟前
0
0
Linux服务器下的HTTP抓包分析

说到抓包分析,最简单的办法莫过于在客户端直接安装一个Wireshark或者Fiddler了,但是有时候由于客户端开发人员(可能是第三方)知识欠缺或者其它一些原因,无法顺利的在客户端进行抓包分析,...

mylxsw
19分钟前
0
0
mybatis3-javaapi

sqlSessionFactoryBuilder->sqlSessionFactory->sqlSession<-rowbound<-resultHandler myBatis uses a Java enumeration wrapper for transaction isolation levels, called TransactionIsol......

writeademo
23分钟前
0
0
Java NIO:浅析I/O模型

也许很多朋友在学习NIO的时候都会感觉有点吃力,对里面的很多概念都感觉不是那么明朗。在进入Java NIO编程之前,我们今天先来讨论一些比较基础的知识:I/O模型。下面本文先从同步和异步的概念...

yzbty23
23分钟前
0
0
了解iOS消息推送一文就够:史上最全iOS Push技术详解

本文作者:陈裕发, 腾讯系统测试工程师,由腾讯WeTest整理发表。 1、引言 开发iOS系统中的Push推送,通常有以下3种情况: 1)在线Push:比如QQ、微信等IM界面处于前台时,聊天消息和指令都会...

JackJiang-
25分钟前
0
0
Mysql汉子转拼音

update t_app_city SET CITY_NAME_BEGIN = ELT(INTERVAL(CONV(HEX(LEFT(CONVERT(CITY_NAME USING gbk),1)),16,10), 0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,0xBBF7, 0xBFA......

尘叙缘
27分钟前
0
0
大数据构建智慧城市“新引擎”,加速推进新旧动能转换

——“大数据与智慧城市”技术交流分享会——济南站召开 7月13日,“大数据携手智慧城市,助力山东新旧动能转换”技术交流分享会——济南站在山东信息通信技术研究院会议室成功举办,此次会议...

左手的倒影
28分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部