• Shell脚本学习笔记(五)函数


    函数

    Bash调用函数不会开启新的子shell,会在现有的shell环境中执行该函数。

    函数的语法形式:

    function 函数名称()
    {
    命令区域
    }

    函数名称
    ()
    {
    命令区域
    }

    function 函数名称
    {
    命令区域
    }

    调用:函数名 参数1 参数2 ....

    FUNCNAME变量,值的内容是函数名

    取消函数定义:unset -f 函数名

    return指令  $?传回值

    作用范围:函数仅在定义的shell环境中有效,如果要传递函数给子shell环境使用,可使用内置命令export和-f选项:export -f 函数名
    如果没有特别设定变量的属性,那么在script中自定义的变量称为全局变量,作用范围在整个script文件中
    内置命令local,设定变量属性为私有
    主程序中,尽量不要用传入函数的全局变量的值来控制函数执行后的程序流程

    位置参数
    含义


    移动位置参数:shift n
    指定位置参数:set命令 

    例子

    #!/bin/bash

    declare -i i
    =0
    set 61 62 63 64 65 66 67 68 69 70

    for p in $@
    do
    ((i++))
    echo "第 $i 个位置参数 \$$i=$p"
    done


    运用位置参数传递参数值给函数时,原有的位置参数会被保存,其内含值不会受到影响
    取用命令行的选项和参数:
    getopts 选项行 选项变量
    选项行由各选项的单一字符组成,getopts由命令行取得选项,把它放入选项变量中,如果该选项需要额外的参数,参数值会放入OPTARG变量中
    例子

    #!/bin/bash

    while getopts u
    :ah opt
    do
    case
    $opt in
    u
    )
    echo "提供了选项u和参数:$OPTARG";;
    a
    )
    echo "提供了选项a";;
    h
    )
    echo "提供了选项h";;
    *
    )
    ;;
    esac
    done

    建立函数库

    递归函数

    例子

    #!/bin/bash

    function factor_in
    () {
    local tmp
    local tmp1

    tmp
    ="$1"

    if [ $tmp -eq 1 ] ; then
    echo -n " 1 "
    r
    =1
    else
    echo -n " $tmp * "
    tmp1
    =$tmp
    tmp
    =$(($tmp-1))
    factor_in
    $tmp
    r
    =$(($tmp*$r))
    fi
    }

    if [ $# -ne 1 ] ; then
    echo "使用方法:$0 正整数"
    exit 1
    fi

    echo
    echo -n $1"! = "
    factor_in
    $1
    echo -n "= $r"
    echo

    结果

  • 相关阅读:
    Linux 文件及目录管理命令基础
    MHA高可用及读写分离
    MySQL的备份和回复
    mysql的主从复制
    MySQL索引管理及执行计划
    [LeetCode]Linked List Cycle II解法学习
    浅谈reverse_iterator的base()函数
    [LeetCode]LRU Cache有个问题,求大神解答【已解决】
    分享一篇不错的博文《写给准备参加秋招的学弟学妹们~一定要来看哦~》
    将博客搬至CSDN
  • 原文地址:https://www.cnblogs.com/njucslzh/p/1984157.html
Copyright © 2020-2023  润新知