Bash脚本编程
Posted brt3
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bash脚本编程相关的知识,希望对你有一定的参考价值。
函数
函数需要在使用之前定义;同时,函数支持以文件的形式进行模块化封装,其他文件的调用范式如下:
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,返回字符串格式的“数组”了。
以上是关于Bash脚本编程的主要内容,如果未能解决你的问题,请参考以下文章
谢烟客---------Linux之bash脚本编程---if补充和for循环
-bash: /usr/bin/ls: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory(代码片段