函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高。像其他编程语言一样,Shell 也支持函数。Shell 函数必须先定义后使用。Shell 函数的定义格式如下:

[function] fun() {list of commands[ return value ]
}

说明:

  1. 可以带function fun() 定义,也可以直接fun() 定义,不带任何参数,function关键字和()必须有其中一个。
  2. 返回值,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)。
  3. 参数,()内是没有参数的,它并不像C语言那样,在()里可以有参数。那大家可能就郁闷了,函数调用或多或少总是会需要一些参数,那么这些参数要怎么传递进来呢?其实参数传递方式为:fname;(不需要传递参数)或fname agr1 arg2(需要传递两个参数);

Shell 函数返回值只能是整数,一般用来表示函数执行成功与否,0表示成功,其他值表示失败。如果 return 其他数据,比如一个字符串,往往会得到错误提示:“numeric argument required”。如果一定要让函数返回字符串,那么可以先定义一个变量,用来接收函数的计算结果,脚本在需要的时候访问这个变量来获得函数返回值。shell函数返回值有三种方式:

  1. 直接return通过$?来接收返回值;
  2. 定义全局变量,通过全局变量来接收的方式,使用函数返回值。
  3. echo的方式,通过标准输出来返回。
#!/bin/bashfunction sum()
{if [ $# != 2 ]thenecho "arg num != 2"return 0fireturn $(( $1 + $2 ))
}
sum 5 6   #调用函数只需要给出函数名,不需要加括号。
echo "5+6=$?" #-->5+6=11; 函数返回值在调用该函数后通过 $? 来获得。
sum 100 200
echo "100+200=$?"   #-->100+200=44,return后跟数值n(0-255)。300-256=44#向函数传递数组
a=(1 2 3 4)
sum(){local sum=0;for v in $@dosum=$[sum+v]   #sum=$(($sum+$v));doneecho $sum;  #-->10
}
sum ${a[@]}#像删除变量一样,删除函数也可以使用 unset 命令,不过要加上 .f 选项,
#$unset -f function_name
#如果你希望直接从终端调用函数,可以将函数定义在主目录下的 .profile 文件,这样每次登录后,在命令提示符后面输入函数名字就可以立即调用。
  • $0:是脚本本身的名字;
  • $#:是传给脚本的参数个数;
  • $@:是传给脚本的所有参数的列表,即被扩展为"$1" "$2" "$3"等;
  • $*:是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个,即被扩展成"$1c$2c$3",其中c是IFS的第一个字符;
  • $$:是脚本运行的当前进程ID号;
  • $?:是显示最后命令的退出状态,0表示没有错误,其他表示有错误;

[shell]shell函数相关推荐

  1. Linux的shell脚本函数教程

    Linux的shell脚本函数教程 一.shell介绍 二.shell函数的介绍 三.函数的定义 四.shell中函数使用示例 一.shell介绍 二.shell函数的介绍 三.函数的定义 四.she ...

  2. Shell脚本函数(函数传参、递归、创建库)

    Shell脚本函数 一.Shell函数 1.Shell函数定义 2.函数的返回值 return echo 二.函数传参 三.函数变量的作用范围 四.递归 1.阶乘 2.递归目录 五.创建库 一.She ...

  3. linux文件的定义变量的值,linux shell 自定义函数方法(定义、返回值、变量作用域)...

    一.定义shell函数(define function) 语法: [ function ] funname [()] { action; [return int;] } 说明: 1.可以带functi ...

  4. linux shell 自定义函数(定义、返回值、变量作用域)介绍

    linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 一.定义shell函数(define function) 语法: [ f ...

  5. linux无filelength函数,Linux Shell 自定义函数(定义、返回值、变量作用域)介绍

    定义Shell函数(define function) 语法: [ function ] funname [()] { action; [return int;] } 说明: 可以带function f ...

  6. Shell Curses 函数库

    用于 Shell 脚本的终端函数 "Shell Curses"是一个脚本函数库,这些函数为 Shell 程序员提供了将基于文本的光标移动到屏幕上指定位置的能力.这种能力允许使用 S ...

  7. shell trim函数

    shell trim 函数 trim() {local var="$*"# remove leading whitespace charactersvar="${var# ...

  8. Shell脚本函数应用

    记录:429 场景:Shell脚本函数应用,定义函数,函数调用,函数传参. 版本:CentOS Linux release 7.9.2009. 1.普通函数 示例普通函数是没有入参和返回值. 1.1脚 ...

  9. linux 变量函数返回值,linux shell 自定义函数(定义、返回值、变量作用域)介绍...

    linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 一.定义shell函数(define function) 语法: [ f ...

  10. shell自定义函数

    转载地址:https://www.cnblogs.com/oxspirt/p/7246075.html "sum=$(fsum 2 5)"这种方式,是将标准输出(echo 出来的东 ...

最新文章

  1. win7系统相关问题故障解决
  2. 深入理解mysql系列_深入理解MySQL系列之锁
  3. js能否打印服务器端文档,js打印远程服务器文件
  4. MATLAB读取文件夹中所有图像
  5. Oracle 隐含参数的查询
  6. 上瘾:如何打造习惯养成中的产品(投资篇)
  7. Java 操作符 小结
  8. SpringBoot+Maven整合MyBatis时打包漏掉mapper的xml文件【解决resources调用静态资源失败404】
  9. 原声php 读取excel乱码_php读取excel文件,输出的值乱码解决方法
  10. matlab遗传算法求解车辆路径问题(一)
  11. 计算机故障基本维修方法,11种打印机常见故障维修方法
  12. 2015总结与新年计划
  13. linux中的码字软件,橙瓜码字神器手机版下载-橙瓜码字神器appv5.2.8-Linux公社
  14. among us私服搭建
  15. Unity bug error CS1703: Multiple assemblies with equivalent identity have been imported...
  16. Linux之NTFS、FAT32、exFAT 各种格式硬盘挂载整理
  17. windows10 系统中,双屏下,设置各自屏的任务栏显示各自显示器中的任务。
  18. 3ds Max下载_3ds Max 2023上线了哪些新功能?
  19. 腾讯企业邮箱OpenApi调用说明
  20. 游戏开发笔记(一):一元夺宝

热门文章

  1. 什么情况下我们需要进行硬盘对拷?硬盘对拷怎么操作?
  2. 小程序setdata优化_微信小程序 setData的使用方法详解
  3. 网络安全培训笔记 (高清大图)
  4. 网页端封装生成app移动端,是开发者的热门趋势
  5. arduino 舵机接线图_arduino+16路舵机驱动板连接测试
  6. 计算机应聘大学生自我介绍,大学生计算机毕业面试自我介绍
  7. 【更新中】苹果自家的as汇编器的特色风格(与微软masm汇编器语言风格的不同)
  8. 计算机科学的刊物卷号,期刊的期号和卷号怎么查询
  9. 2021ICPC河南省赛 B.Honeycomb
  10. SwiftUI 跨组件数据传递