shell函数

参考:http://www.cnblogs.com/jiqing9006/p/3253232.html

参考:《shell脚本学习指南》 O'Reilly

shell中函数使用

像其他程序语言一样,函数是指一段单独额程序代码,用以执行一些定义完整的单项工作。在大型程序里,函数可以在程序的多个地方使用。

function func() {...}

func(){...}

函数在使用之前必须先定义。

在函数中,位置参数($1、$2、……,$#,$*, $@)都是函数的参数。父脚本的参数临时地被函数参数所掩盖(shadowed)或隐藏。$0依旧是父脚本的名称。当函数完成时,原来的命令行参数会恢复。

在shell函数中,return命令的功能与工作方式都与exit相同,但需要注意的是:在shell函数体里使用exit,会终止整个shell脚本。

因为return会返回一个退出值给调用者,所以可以在if与while里使用函数。举例来说,可使用shell的函数架构取代test所执行的两个字符串的比较:

#equal --- 比较两个字符串

equal() {

  case "$1" in

  "$2")  return 0 ;;

  esac

  return 1

}

if equal "$a" "$b" ...

if ! equal "$a" "$b" ...

return未提供参数,则使用默认退出状态,也就是最后一个执行的命令的退出状态。如果这就是你要的,那么严谨的shell函数写法:

  return $?

警告:有些shell允许在脚本里使用return,但如果用于函数体之外,则视为等同exit。这种用法并不建议,因为会出现可移植性的困扰。

函数(至少在posix shell里)没有提供局部变量(bash、ksh88以及zsh都提供局部变量功能,但语法不尽相同),因此所有的函数都与父脚本共享变量。即,你必须小心留意不要修改父脚本里不期望被修改的东西,如PATH。不过这也表示其他状态是共享的,例如当前目录与捕捉信号。

函数调用方法之一

#!/bin/bash
# testing the script
function myfun {
  read -p "Enter a value:" value
  echo $[ $value * 2 ]
}

result=`myfun`

echo "The new vlue is $result"

函数调用有两种方式(即命令代换方法):`fun`(反引号) 或 $(fun),推荐$(fun)。

若有参数可直接放在函数名后,`fun param1 param2`或$(fun param1 param2)

一般直接调用函数即可:函数名 参数1 参数2  

需要函数返回值时才需要命令代换。

参考:

http://www.cnblogs.com/jiqing9006/p/3253232.html

原文地址:https://www.cnblogs.com/embedded-linux/p/6209465.html