linux shell创建函数吗,LinuxShell编程七之创建函数

第十七章:创建函数

本章内容

基本的脚本函数

返回值

在函数中使用变量

属组变量和函数

函数递归

创建库

在命令行上使用函数

17.1 基本的脚本函数

17.1.1 创建函数

格式一

function name{

commands

}

格式二

name(){

commands

}

说明

name属性定义了赋予函数的唯一名称

commands是构成函数的一条或多条bash shell命令

17.1.2 使用函数

编写test1.sh脚本

#!/bin/bash

function func1 {

echo "This is an example of a function"

}

count=1

while [ $count -le 5 ]

do

func1

count=$[ $count + 1 ]

done

echo "This is the end of the loop"

func1

echo "Now this is the end of the script"

函数需先定义,再使用

编写test2.sh脚本

#!/bin/bash

count=1

echo "This line comes before the function definition"

function func1 {

echo "This is an example of a function"

}

while [ $count -le 5 ]

do

func1

count=$[ $count + 1 ]

done

echo "This is the end of the loop"

func2

echo "Now this is the end of the script"

function func2 {

echo "This is an example of a function"

}

函数名必须唯一,否则新定义的函数会覆盖原来函数

编写test3.sh脚本

#!/bin/bash

function func1 {

echo "This is the first definition of the function name"

}

func1

function func1 {

echo "This is a repeat of the same function name"

}

func1

echo "This is the end of the script"

17.2 返回值

bash shell会把函数当做一个小型脚本,运行结束时会返回一个退出状态码

17.2.1 默认退出状态码

默认情况下,函数的退出状态码时函数中最后一条命令返回的退出状态码

在函数执行后,可以用标准变量$?来确定函数的退出状态码

只能判断函数中最后一条命令是否运行成功,无法判断函数中其它命令

使用函数的默认退出状态码时很危险的

编写test4.sh脚本

#!/bin/bash

func1() {

ls -l badfile

echo "trying to display a non-existent file"

}

echo "testing the function:"

func1

echo "The exit status is: $?"

17.2.2 使用return命令

使用return命令来退出函数并返回指定一个整数值的退出状态码

函数一结束就去返回值

退出状态码必须时0~255

编写test5.sh脚本

#!/bin/bash

function db1 {

read -p "Enter a value: " value

echo "doubling the value"

return $[ $value * 2 ]

}

db1

echo "The new value is $?"

17.2.3 使用函数输出

可以将函数的输出保存到变量中

编写test5b.sh脚本

#!/bin/bash

function db1 {

read -p "Enter a value: " value

echo $[ $value *2 ]

}

result=$(db1)

echo "The new value is $result"

17.3 在函数中使用变量

17.3.1 向函数传递参数

函数可以使用标准的参数环境变量来表示命令行上传给函数的参数。

例如,函数名会在$0变量中定义,函数命令行上的任何参数都会通过$1、$2等定义。

也可以用特殊变量$#来判断传给函数的参数数目。

在脚本中指定函数时,必须将参数和函数放在同一行

编写test6.sh脚本

#!/bin/bash

function addem {

if [ $# -eq 0 ] || [ $# -gt 2 ]

then

echo -1

elif [ $# -eq 1 ]

then

echo $[ $1 + $1 ]

else

echo $[ $1 + $2 ]

fi

}

echo -n "Adding 10 and 15:"

value=$(addem 10 15)

echo $value

echo -n "Let's try adding just one number:"

value=$(addem 10)

echo $value

echo -n "Now trying adding no numbers:"

value=$(addem)

echo $value

echo -n "Finally, try adding three numbers:"

value=$(addem 10 15 200)

echo $value

将传递给脚本的变量传给函数

编写test7.sh脚本

#!/bin/bash

function func7 {

echo $[ $1 * $2 ]

}

if [ $# -eq 2 ]

then

value=$(func7 $1 $2)

echo "The result is $value"

else

echo "Usage: test7 a b"

fi

17.3.2 在函数中处理变量

1.全局变量

全局变量是在shell脚本中任何地方都有效的变量。

如果你在脚本的主体部分定义了一个全局变量,那么可以在函数内读取它的值。

如果你在函数内定义了一个全局变量,可以在脚本的主题部分读取它的值。

默认情况下,在脚本中定义的任何变量都是全局变量,在函数外定义的变量可以在函数内访问。

编写test8.sh脚本

#!/bin/bash

function db1 {

value=$[ $value * 2 ]

}

read -p "Enter a value: " value

db1

echo "The new value is: $value"

2.局部变量

无需在函数中使用全局变量,函数内部使用的任何变量都可以被声明成局部变量。

在变量声明的前面加上local关键字即可。

也可以在变量赋值语句中使用local关键字。

编写test9.sh脚本

#!/bin/bash

function func1 {

local temp=$[ $value + 5 ]

result=$[ $temp * 2 ]

}

temp=4

value=6

func1

echo "The result is $result"

if [ $temp -gt $value ]

then

echo "temp is larger"

else

echo "temp is smaller"

fi

17.4 数组变量和函数

17.4.1 向函数传数组参数

将数组的值分解成单个的值作为函数参数使用

编写test10.sh脚本

#!/bin/bash

function testit {

local newarray

newarray=($@)

echo "The new array value is: ${newarray[*]}"

}

myarray=(1 2 3 4 5)

echo "The original array is ${myarray[*]}"

testit ${myarray[*]}

编写test11.sh脚本

#!/bin/bash

function addarray {

local sum=0

local newarray

newarray=($(echo "$@"))

for value in ${newarray[*]}

do

sum=$[ $sum + $value ]

done

echo $sum

}

myarray=(1 2 3 4 5)

echo "The original array is: ${myarray[*]}"

arg1=$(echo ${myarray[*]})

result=$(addarray $arg1)

echo "The result is $result"

17.4.2 从函数返回数组

从函数里向shell脚本传回数组变量

编写test12.sh脚本

#!/bin/bash

function arraydb1r {

local origarray

local newarray

local elements

local i

origarray=($(echo "$@"))

newarray=($(echo "$@"))

elements=$[ $# -1 ]

for (( i = 0; i<= $elements; i++ ))

{

newarray[$i]=$[ ${origarray[$i]} * 2 ]

}

echo ${newarray[*]}

}

myarray=(1 2 3 4 5)

echo "The original array is: ${myarray[*]}"

arg1=$(echo ${myarray[*]})

result=($(arraydb1r $arg1))

echo "The new array is: ${result[*]}"

创建库

如果多个脚本需要使用同一段代码,可以使用函数库文件,然后在多个脚本中引用该库文件

1.创建一个库文件

编写myfuncs文件

function addem {

echo $[ $1 + $2 ]

}

function multem {

echo $[ $1 * $2 ]

}

function divem {

if [ $2 -ne 0 ]

then

echo $[ $1 / $2 ]

else

echo -1

fi

}

2.使用这个库文件

编写test14.sh脚本

#!/bin/bash

. ./myfuncs

value1=10

value2=5

result1=$(addem $value1 $value2)

result2=$(multem $value1 $value2)

result3=$(divem $value1 $value2)

echo "The result of adding them is: $result1"

echo "The result of multiplying them is: $result2"

echo "The result of dividing them is: $result3"

在.bashrc文件中定义函数

1.直接定义函数

可以直接在主目录下的.bashrc文件中定义函数

如在文件末尾加上

function addem {

echo $[ $1 + $2 ]

}

2.读取函数文件

可以使用source命令(即点操作符)将库文件中的函数添加到.bashrc脚本中

如在文件末尾加上

. /home/zc/libraries/myfuncs

小结

shell脚本函数允许将脚本中多处用到的代码放到一个地方。可以创建一个包含该代码块的函数,然后在脚本中通过函数名来引用这块代码,而不用一次次重复写那段代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值