LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 195|回复: 0

Shell 函数

[复制链接]
发表于 2023-12-29 17:07:49 | 显示全部楼层 |阅读模式


  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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表