码迷,mamicode.com
首页 > 其他好文 > 详细

Bash脚本编程

时间:2018-12-12 23:41:51      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:pre   std   echo   $*   定义   使用   函数   作用域   value   

 

函数

函数需要在使用之前定义;同时,函数支持以文件的形式进行模块化封装,其他文件的调用范式如下:

source base_func.sh
myFunc  # 模块函数调用

无参函数

常见的Bash函数,有两种书写方式

function myfunc {
    echo "abc"
}

function myfunc2(){
    echo "ABC"
}
注意:函数名后需要有一个空格!

函数返回值

方法1【弃用

通过return关键字处理返回信息,主函数通过$?得到返回值:

function myfunc {
    read -p "Enter a value: " value
    # let value2=$value*2
    # echo "Double $value = $value2"
    return $[ $value * 2 ]
}

myfunc
echo "Get the function return-value: $?"  # 通过$?获取函数返回值

以下方式无法得到正确的返回值,请谨慎操作:

ret=`myfunc`  # 尝试获得myfunc函数的打印消息
echo "Fail to get the return-value, but None: [$ret]"

该方法是通过$?获取返回值,然而,return关键字只能返回number类型,且退出状态的取值范围是0到255,所以return方式的返回值严格受限。一般来说,return只是用于表示退出状态,而不作为返回值使用。

方法2【推荐】

通过echo返回字符串,并利用$(function)捕获函数返回值:

function help {
param=$1  # 外部传参

    # echo "Usage : link-bin Target_Path Bin_FileName"  # 不应该有多个echo
    ret="echo string as return【$param】"    # 通过echo标准输出返回值
    echo $ret
}

echo_get=$(help param_abc)    # 通过$()调用执行函数并接收返回
echo "Get the function echo_get: $echo_get"

该方法是捕获函数内所有的echo语句作为return-value,比之方法1,返回值为字符串格式,范围不再受限。但函数如果需要返回,则需要人为地限制函数体内echo语句的使用(以及其他stdout输出),否则会干扰函数的返回值正确性。

含参函数

编写形式,如上示例。

需要注意变量在函数体内外的作用域变化:

param="Null"

function varfield {
    local param="abc"
    # param="123"  # 改写Outer-param的值

    echo "In the function: param=[$param]"
}

varfield
echo "Out of function: param=[$param]"

关于数组做实参、数组作返回值

array=(5 4 3 2 1)
echo "The original array is: ${array[*]}"

function array_add {
local param_array=$*

    local array_new
    local index=0
    for value in ${param_array[*]}; do
        # echo "list[$index] = $value"
        param_array[$index]=$[ $value*2 ]  # 改写原数组
        let index+=1
        array_new+="$[ $value*2 ] "  # 利用字符串组装数组
    done
    # echo ${param_array[*]}
    echo $array_new  # 或者通过组装新的字符串来表示数组
}

array_ret=`array_add ${array[*]}`
echo "Get return array: ${array_ret[*]}"

index=0
for value in ${array_ret[*]}; do
    echo "list[$index]=$value"
    let index+=1
done

尽管bash-script提供了数组的专有形式,但使用上与带空格的字符串没有太大的差别。实际上,实参尚可以数组格式传入(当然也可以先整合为字符串),但返回值只能利用echo,返回字符串格式的“数组”了。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

function help(){
local param=$1    # 本地变量
ret_value="return string"    # 通过全局变量返回 值
 
    echo "Usage : link-bin Target_Path Bin_FileName"
    echo "return value"    # 通过echo标准输出返回值
    exit
}
 
echo_get=$(help xxx)    # 通过$()调用执行函数并接收返回

Bash脚本编程

标签:pre   std   echo   $*   定义   使用   函数   作用域   value   

原文地址:https://www.cnblogs.com/brt3/p/10111529.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!