Shell脚本编程之函数

2016/06/10


1. 脚本中使用函数
创建函数的格式,有两种:
function name {
commands
}

name() {
commands
}

#!/bin/bash
#using a function in a script

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"




2. 函数返回值
使用函数输出
#!/bin/bash

function func2 {
  echo "inside function"

  read -p "Enter a value: " value
  echo $[$value*2]
}

result=`func2`

echo "The new value is $result"




3.在函数中使用变量
3.1 向函数传递参数
函数可以使用标准的参数环境变量来代表命令行上传给函数的参数,如,函数名会在$0变量中定义,函数命令行的任何参数都会通过$1, $2等定义。也可以用特殊变量$#来判断传给函数的参数数目 ,函数可以用参数环境变量获得参数值。

3.1.1 在脚本中调用函数时传递参数,必须将参数和函数放在同一行
#!/bin/bash

function add {
  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=`add 10 15`
echo $value

echo -n "Let's try adding just one number: "
value=`add 10`
echo $value

echo -n "Now trying adding no numbers: "
value=`add`
echo $value

echo -n "Finally,try adding three numbers: "
value=`add 10 15 20`
echo $value




3.1.2 在命令行中传递参数给脚本中的函数
#!/bin/bash

function func3 {
  echo $[ $1+$2 ]
}

if [ $# -eq 2 ]
then 
  value=`func3 $1 $2`
  echo "The result is $value"
else
  echo "Usage: test2 a b"
fi





3.2 在函数中处理变量

函数会用两种类型的变量:
A 全局变量
B 局部变量

3.2.1 全局变量
默认情况下,你在脚本中定义的任何变量都是全局变量,在函数外定义的变量可在函数内正常访问
3.2.2 局部变量
不用在函数中使用全局变量,函数内部使用的任何变量都可以被声明成局部变量。要那么做时,只要在变量声明的前面加上local关键字就可以了,也可以在给变量赋值时在赋值语句中使用local关键字,local关键字保证了变量只局限在该函数中,如果脚本中在该函数之外有同样的名字的变量,那么shell将会保证这两个变量的值是分离的。

#!/bin/bash

function func4 {
  local temp=$[ $value+5 ]
  result=$[ $temp * 2 ]
}

temp=4
value=6

func4
echo "The result is $value"
if [ $temp -gt $value ]
then
  echo "temp is larger"
else
 echo "temp is smaller"
fi






4. 创建库
很容易发现,在单个脚本中,使用函数可以省去一些键入的工作,但如果你碰巧要在脚本之间使用同一个代码块呢?显然,在每个脚本中都定义一个同样的函数会比较麻烦。有个方法能解决这个问题,bash shell允许创建函数库文件,然后在需要时在多个文件中引用该库文件。这个过程的第一步时创建一个包含脚本中所需函数的共用库文件,如:
/home/zh/work_space/scripts/function/myfuncs
function add {
 echo $[ $1+$2 ]
}

function mult {
  echo $[ $1 * $2 ]
}

function div {
  if [ $2 -ne 0 ]
  then 
    echo $[ $1 /$2 ]
  else
    echo -1
  fi
}


使用函数库到关键在于source 命令,source命令会在当前的shell上下文中执行命令,而不是创建一个新的shell来执行命令。可以用source命令
来在shell脚本中运行库文件脚本,这样函数就对脚本可用了。source命令有个快捷别名,称作点操作符(dot operator) ,要在shell 脚本中运行myfuncs库文件,你只需要添加下面这行:
. ./myfuncs

#!/bin/bash
. ./myfuncs

value1=50
value2=10

result1=`add $value1 $value2`
result2=`mult $value1 $value2`
result3=`div $value1 $value2`

echo "The result of add: $result1"
echo "The result of mult: $result2"
echo "The result of div: $result3"







5. 在.bashrc文件中定义函数
bash shell会在每次启动时在主目录查找这个文件,不管是交互式的还是从现有shell中启动一个新的shell
5.1 直接定义函数


5.2 读取库文件脚本
/home/zh/work_space/scripts/function/myfuncs
function add {
 echo $[ $1+$2 ]
}

function mult {
  echo $[ $1 * $2 ]
}

function div {
  if [ $2 -ne 0 ]
  then 
    echo $[ $1 /$2 ]
  else
    echo -1
  fi
}




看看效果:


更好的一点是,shell还会将定义好的函数传给子shell进程,这样这些函数会在该shell会话中的任何脚本中也都可以用,如:
#!/bin/bash

value1=50
value2=10

result1=`add $value1 $value2`
result2=`mult $value1 $value2`
result3=`div $value1 $value2`

echo "The result of add: $result1"
echo "The result of mult: $result2"
echo "The result of div: $result3"




【声明】欢迎转载,但请保留文章原始出处:http://blog.csdn.net/yelangjueqi/article/details/51636402

结束!

posted @ 2016-06-11 14:31  行走的思想  阅读(16)  评论(0编辑  收藏  举报  来源