shell一个非常重要的特性是它可作为一种编程语言来使用。因为shell是一个解释器,所以它不能对为它编写的程序进行编译,而是在每次从磁盘加载这些程序时对它们进行解释。而程序的加载和解释都是非常耗时的。
针对此问题,许多shell(如BourneAgainShell)都包含shell函数,shell把这些函数放在内存中,这样每次需要执行它们时就不必再从磁盘读入。shell还以一种内部格式来存放这些函数,这样就不必耗费大量的时间来解释它们。
函数的作用就是把程序里多次调用相同代码的部分定义成一份,然后起个名字,所有的调用都 只用这名字就可以了,修改代码时,只需要改变函数体内的代码即可。
使用函数的优势
把相同的程序段定义成函数,可以减少代码量。
增加程序的可读、易读性
实现程序功能的模块化
定义函数
function clsn(){
echo "http://blog.znix.top"
}
znix(){
echo "http://www.znix.top "
}
说明:
1、可以带function clsn() 定义,也可以直接clsn() 定义,不带任何参数。
2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)
3、执行函数就是将函数名放到定义的函数之后即可
将函数加载到当前窗口执行:
[root@clsn function]# . fun1.sh
[root@clsn function]# zn
znew znix
[root@clsn function]# znix
test
[root@clsn function]# clsn
http://blog.znix.top
引用函数
脚本内容
[root@clsn function]# cat fun2.sh
#!/bin/bash
#############################################################
# File Name: fun2.sh
# Version: V1.0
# Author: clsn
# Organization: http://blog.znix.top
# Created Time : 2017-12-11 19:25:56
# Description:
#############################################################
Fun_File=/server/scripts/function/fun1.sh
[ -f $Fun_File ] && . $Fun_File
clsn
脚本执行结果
[root@clsn function]# sh fun2.sh
http://blog.znix.top
函数传参
脚本内容:
[root@clsn function]# cat fun3.sh
#!/bin/bash
#############################################################
# File Name: fun3.sh
# Version: V1.0
# Author: clsn
# Organization: http://blog.znix.top
# Created Time : 2017-12-12 09:38:48
# Description:
#############################################################
function clsn(){
echo "Hi "
}
CLSN(){
echo "Hello "
echo $0
echo $1
echo $2
}
clsn
CLSN xi xi
脚本执行结果
[root@clsn function]# sh fun3.sh
Hi
Hello
fun3.sh
xi
xi
$0 永远的脚本名称
function clsn(){
echo "http://blog.znix.top $1 $2"
echo $0
}
znix(){
echo "test"
}
clsn $1 $2
执行结果
[root@clsn function]# sh fun1.sh
http://blog.znix.top
fun1.sh
函数中return的用法
脚本内容:
[root@clsn function]# cat fun3.sh
#!/bin/bash
#############################################################
# File Name: fun3.sh
# Version: V1.0
# Author: clsn
# Organization: http://blog.znix.top
# Created Time : 2017-12-12 09:38:48
# Description:
#############################################################
function clsn(){
echo "Hi "
}
CLSN(){
echo "Hello "
echo $0
echo $1
echo $2
return 4
echo "xxixiixxiix"
}
clsn
CLSN xi xi
echo $?
脚本执行结果
[root@clsn function]# sh fun3.sh
Hi
Hello
fun3.sh
xi
xi
4
return命令说明:
[root@clsn function]# help return
return: return [n]
从一个 shell 函数返回。
使一个函数或者被引用的脚本以指定的返回值 N 退出。
如果 N 被省略,则返回状态就是
函数或脚本中的最后一个执行的命令的状态。
退出状态:
返回 N,或者如果 shell 不在执行一个函数或引用脚本时,失败。
自定义常用函数库
View Code 自定义函数库脚本
basename命令
取出文件名称
[root@clsn function]# basename /server/scripts/zhuajiu.sh
zhuajiu.sh
[root@clsn function]# basename /server/scripts/zhuajiu.sh .sh
zhuajiu
$$ 参数
取出脚本运行时的pid, 脚本运行的当前进程ID号
[root@clsn function]# echo $$
37208
[root@clsn function]# ps -ef |grep 37208
root 37208 37206 0 08:39 pts/0 00:00:00 -bash
root 38578 37208 1 10:33 pts/0 00:00:00 ps -ef
root 38579 37208 0 10:33 pts/0 00:00:00 grep --color=auto 37208
引用自定义函数库示例:
[root@clsn function]# head -22 fun3.sh
#!/bin/bash
#############################################################
# File Name: fun3.sh
# Version: V1.0
# Author: clsn
# Organization: http://blog.znix.top
# Created Time : 2017-12-12 09:38:48
# Description:
#############################################################
. /server/scripts/userfun.sh
scripts_init
i=1
while ((i<=10))
do
uptime
((i++))
sleep 1
done
closeout
|