zoukankan      html  css  js  c++  java
  • shell脚本之函数的使用

    把代码封装成函数,相当于造了一个“轮子”,之后就直接重复使用即可。

    函数的创建

    shell中函数的创建有2种方式

    1.使用function关键字

    语法

    function test {
        ...
    }

    2.使用括号

    语法

    test() {
        ...
    }

    函数的调用

    记住三点即可。

    1.调用方法

    直接写函数名

    test

    2.先定义后调用

    3.对于同名的函数,后面的会覆盖前面的

    函数的返回值

    使用默认的退出状态码有bug,所以推荐自定义退出码的方式。

    test(){
        ...
        return 5
    }
    test
    echo $?
    

     注意点

    1.函数一调用完成就马上使用返回值(因为$?会显示上一条语句的返回值)

    2.返回值范围在0~255

    函数做为变量的值

    编程语言中,将函数调用赋值给变量是很常见的事,但是shell中的情况有些不太一样

    1.当函数调用赋值给变量时,并不会执行函数

    2.函数的第一个echo语句的结果会被赋值给变量,剩下echo 语句或者代码正常执行

    3.返回值并不会赋值给变量

    function test {
    	echo 1
    	echo 2
    	return 6
    }
    echo 11
    t=$(test)
    echo "t: $t"
    echo hello
    

     结果

    11
    t: 1
    2
    hello

    向函数传递参数

    记住以下几点

    1.在脚本中调用函数时,必须将参数和函数调用放在同一行

    2.在函数中,可以使用参数的环境变量来获取参数值

    3.脚本在命令行中的参数值,需要在调用函数时一起传入

    function test {
    	echo $1
    	echo $2
    	return 6
    }
    test $1 $2
    

     结果

    u
    me

    注意:

    这里函数中$1和$2和调用时的含义不一样。

    函数中的$1和$2指向脚本中函数调用时的参数;而调用时的$1和$2指向命令行中的参数

    在函数中使用变量

    在函数中定义局部变量要使用local关键字

    local test

    向函数中传递数组

    将数组中的元素分解开,之后在函数内部进行重组

    function testit {
    	local newarray
    	newarray=(;'echo "$@"')
    	echo "The new array value is: ${newarray[*]}"
    }
    myarray=(1 2 3 4 5)
    echo "The original array is ${myarray[*]}"
    testit ${myarray[*]}
    

     结果

    The original array is 1 2 3 4 5
    The new array value is: 1 2 3 4 5

    创建库文件

    库文件可以实现一次定义函数,终生使用

    库文件

    a() {
    	echo ni
    } 
    

     脚本文件

    #!/bin/bash
    
    . ./library
    

    在命令行使用函数

    单行方式

    function test { ...; }

    注意:tset之后必须有空格,语句结尾要加;。

    多行方式

    function test {
    >...
    >...
    >}

    注意:如果函数名和内置命令冲突,那么会覆盖内置命令!

    在.bashrc中使用函数

    直接在.bashrc文件中定义函数或者载入库文件即可。

     

    使用shtool公共函数库

     下载

    传送门:ftp://ftp.gnu.org/gnu/shtool/shtool-2.0.8.tar.gz
    安装

    tar xf shtool...
    cd shtool...
    ./configure
    make
    make test #测试

    shtool库文件

    语法

    shtool [options] [function [options] [args]]
    shtool platform --help
    Usage: shtool platform [-F|--format <format>] [-S|--sep <string>] [-C|--conc <string>] [-L|--lower] [-U|--upper] [-v|--verbose] [-c|--concise] [-n|--no-newline] [-t|--type <type>] [-V|--version] [-h|--help]
  • 相关阅读:
    shell练习--PAT题目1008:数组元素循环右移问题 (失败案例,运行超时)
    shell练习--PAT题目1007:关于素数对(失败案例)
    2019年7月25日 shell练习--PAT题目1006:换个格式输出整数(失败案例)
    shell练习--PAT题目1005:继续(3n+1)猜想(全绿失败喜加一)
    shell练习--关于关联数组自增统计判断的学习
    UITableView中的beginUpdates和endUpdates
    实现类似微信表情包横向滚动翻页的功能,运用UICollectionView,自定义UICollectionViewFlowLayout,cell左右排版 ,支持多组Cell实现。
    利用UICollectionView做的水平滑动分页视图
    获取手势点击哪个控件 UIGestureRecognizer
    JS中如何获取url中的某个参数的值
  • 原文地址:https://www.cnblogs.com/leomei91/p/7698127.html
Copyright © 2011-2022 走看看