linux学习(九) shell脚本(6)

转载 2013年12月03日 23:25:44
创建函数
1.基本脚本函数
1.1创建函数
方式一:使用关键字 function,后跟代码块的函数名。
function name{
	commands
}
name名称需要唯一在一个脚本中,
方式二:
name(){
commands
}
函数引用,直接调用函数名即可。
函数定义不一定位于shell脚本的起始部分,但应该注意,如果在函数定义之前使用函数,会受到错误信息。
1.2返回值
(1)默认退出状态
	默认情况下,函数的退出状态是函数的最后一条命令返回的退出状态。函数执行完毕之后可以使用标准变量$? 来获得函数的退出状态。
(2)使用return命令
	bash shell使用return命令以特定退出状态退出函数。return命令可以使用单个整数值来定义函数退出状态,提供了一种通过编程设置函数退出状态的简单方法:
function fun1 {
	read -p"Enter a value:" value
	echo "doubling the value"
	return $[$value * 2]
}
fun1
echo "The new value is : $?"
////上例中,将value乘2后的结果作为结束状态返回,通过$?获得结束状态,也就是希望得到的结果。
需要注意:
(a)在函数完成之后尽快提取返回值,因为再次执行其他命令会覆盖返回值{$?为最近一次命令的返回状态
(b)退出状态的取值范围为0-255
(c)使用函数输出
	函数的输出也可以捕获并存放到shell变量中,这种方法可以从函数获取任意类型的输出并给变量赋值:
result=`fun1`
	这个方法可以返回浮点数和字符串,所以这种方法可以非常灵活的从函数返回数据。
1.3 在函数中使用变量
(1)向函数传递参数
	函数可以使用标准参数环境变量来表示命令行传递给函数的参数。如,函数名在$0定义,函数命令行的其他参数使用变量$1, $2.等。专用变量$#可以用来确定传递给函数的参数数目(不包括函数名$0)
	在脚本中指定函数时,必须在函数所在的命令行提供参数。如下:
fun1 $value1  10
这样,该函数才可以使用参数环境变量获取参数值。使用这种方法向函数传递值。
additem () {
	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=`additem 10 15`
echo $value


函数的变量$0, $1, $2 等等,不同于脚本主代码的 $0, $1, $2 等等。如果想在函数中使用命令行参数送来的值,需要在调用该函数时,手动传递这些数据。
mulitem () {
	echo $[$1 * $2]
}

if [ $# -eq 2 ]
then
	value=`mulitem $1 $2`
	echo result is $value
fi

./test.sh 3 4

(2)在函数中处理变量
全局变量
	如果脚本的主体定义了全局变量,则在函数内部可以获取这个变量的值;如果在函数内部定义了全局变量,脚本的主体代码也可以获取该变量的值。
	默认情况下,脚本中定义的变量都是全局变量。在函数外部定义的变量,在函数内部仍能访问。
局部变量
	函数内部使用的变量为局部变量,这只需要在变量声明前加上local关键字 :local value
也可以给局部变量赋值语句加上local关键字: local value=$[$value + 2]
	关键字local确保变量仅在函数内部使用。如果脚本在函数外部有同名变量,则shell能区分开这两个变量。在函数内部操作局部变量时,函数外部的同名变量不受影响。

4.数组变量和函数

5.使用库文件
	可以将一个shell脚本中定义多个函数和变量,作为库文件;这样其他shell脚本可以直接引用该库文件。如:
test.sh
#!/bin/bash
#test bash shell
mulitem () {
	echo $[$1 * $2]
}
additem () {
	echo $[$1 + $2]
}

test1.sh
#!/bin/bash


. ./test.sh 
#相当于引用库, 注意前面的点操作符+库文件的路径

value1=`additem 1 3`
value2=`mulitem 3 4`
echo "The additem result is : $value1"
echo "The mulitem result is : $value2"
6.在shell终端中直接使用函数:
可以在命令行中定义函数,此次终端会话中,该函数有效,如果关闭了终端,则函数失效。
为了下次打开终端仍然能够使用函数,则可以
1)将函数定义写在.bashrc中,这样每次打开shell终端之后,仍然能够使用该函数。
jason@Ubuntu:~$ function additem { echo $[$1 + $2]; }
jason@Ubuntu:~$ additem 10 3
13
这样要求,每条语句后面要有分号隔开;
jason@Ubuntu:~$ function mulitem {
> echo $[$1 * $2]
> }
jason@Ubuntu:~$ mulitem 3 4
12
2)提供函数文件:在一个shell 脚本文件中创建函数,将该脚本文件完整路径名添加到.bashrc中。

Linux-Shell脚本编程-学习-6-Shell编程-使用结构化命令-文件比较-case编程

这一片主要说test文件的比较,文件比较在日常使用的频率比较高,这里重点把每个部分都试着说说看 1. 检车目录 -d -d测试会检查指定的文件名是否在系统上以目录的形式存在,当我们要写文件到某个目...

Linux shell脚本全面学习

  • 2015年04月19日 20:57
  • 53KB
  • 下载

shell脚本学习 6 补充

缺省值(:-) 如果变量后面跟着冒号和减号,则变量后面跟着是这个变量的缺省值。 $ COMPANY= $ printf “%s/n” “${COMPANY:-Unknown Company}” ...

Linux shell脚本全面学习

  • 2012年01月05日 17:32
  • 102KB
  • 下载

Linux_shell脚本全面学习

  • 2011年11月01日 17:53
  • 52KB
  • 下载

linux下shell脚本学习

在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具。Shell不仅仅是命令的收集,而且是一门非常棒的编程语言。您可以通过使用shell使大量的任务自动化,shel...
  • whatday
  • whatday
  • 2016年03月25日 10:42
  • 2677

Linux学习资料及shell脚本实例

  • 2017年11月30日 15:37
  • 23MB
  • 下载

linux-shell脚本学习

  • 2014年07月07日 19:08
  • 168KB
  • 下载

《Linux命令行与shell脚本编程大全》 第十章 学习笔记

第十章:构建基本脚本 这一章的内容都是非常基础的,作者大多都一带而过,没有细讲 之前读的《Unix & Linux大学教程》中,对这节所提到的内容全部都有详细的讲解,所以想看笔记的同学可以参考我之...
  • su1216
  • su1216
  • 2013年01月09日 12:51
  • 5937
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux学习(九) shell脚本(6)
举报原因:
原因补充:

(最多只允许输入30个字)