Shell 函数

1. 自定义函数

linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。

  • shell中函数的定义格式如下:
[ function ] funname [()]

{

    action;

    [return int;]

}
  • 说明:

    1. 可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
    2. 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255
  • 下面的例子定义了一个函数并进行调用:

#!/bin/bash

demoFun(){
echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
demoFun
echo "-----函数执行完毕-----" # 输出结果:
# -----函数开始执行-----
# 这是我的第一个 shell 函数!
# -----函数执行完毕-----
  • 定义一个带有return语句的函数:
#!/bin/bash

funWithReturn(){
echo "这个函数会对输入的两个数字进行相加运算..."
echo "输入第一个数字: "
read aNum
echo "输入第二个数字: "
read anotherNum
echo "两个数字分别为 $aNum 和 $anotherNum !"
return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $? !"
#输出类似下面:
#这个函数会对输入的两个数字进行相加运算...
#输入第一个数字:
#1
#输入第二个数字:
#2
#两个数字分别为 1 和 2 !
#输入的两个数字之和为 3 !
  • 函数返回值在调用该函数后通过 $? 来获得。
  • 注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。

2. 函数参数

  • 在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数...

带参数的函数示例:

#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com funWithParam(){
echo "第一个参数为 $1 !"
echo "第二个参数为 $2 !"
echo "第十个参数为 $10 !"
echo "第十个参数为 ${10} !"
echo "第十一个参数为 ${11} !"
echo "参数总数有 $# 个!"
echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73 # 输出结果:
# 第一个参数为 1 !
# 第二个参数为 2 !
# 第十个参数为 10 !
# 第十个参数为 34 !
# 第十一个参数为 73 !
# 参数总数有 11 个!
# 作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !
  • 注意,\(10 不能获取第十个参数,获取第十个参数需要\){10}。当n>=10时,需要使用${n}来获取参数。
  • 另外,还有几个特殊字符用来处理参数:
参数处理 说明
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数
\[|脚本运行的当前进程ID号
$!|后台运行的最后一个进程的ID号
$@|与$*相同,但是使用时加引号,并在引号中返回每个参数。
$-|显示Shell使用的当前选项,与set命令功能相同。
$?|显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

## 3. 系统函数

### 3.1 basename

* basename:返回完整路径最后/的部分,常用于获取文件名
* basename [pathname] [suffix]
* basename [string] [suffix]
* basename命令会删掉所有的前缀包括最后一个/
选项:suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉
* dirname:返回完整路径最后/的前面的部分,常用于返回路径部分
* dirname 文件绝对路径:从给定的包含绝对路径的文件名中出去文件名(非目录部分),然后返回剩下的路径(目录部分
* 反正两个系统函数都不要最后一个/\]

【Linux】5.9 Shell函数的更多相关文章

  1. Linux基础(五) Shell函数

    Shell 函数 linux shell 可以用户定义函数,然后在shell脚本中可以随便调用. shell中函数的定义格式如下: [ function ] funname [()] { action ...

  2. Linux学习笔记 - Shell 函数的使用

    基本语法 funname () { action; return -)):如果不加,将以最后一条命令运行结果,作为返回值. } 示例1:定义并调用无返回值的函数 #!/bin/bash a= b= c ...

  3. Linux中的shell函数编写

    function huge_cp() { while read line1; do cp $line1 ../; done; } function huge_rm() { while read lin ...

  4. Linux Shell系列教程之(十五) Shell函数简介

    本文是Linux Shell系列教程的第(十五)篇,更多Linux Shell教程请看:Linux Shell系列教程 函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰,代码重复利用率更高 ...

  5. Linux Shell函数定义与调用

    一.Shell函数定义格式 shell函数定义格式,各部分说明如下: [ function ]等中括号括起来部分----表示可选(即可有可无) your_function_name部分----为函数名 ...

  6. Linux Shell函数返回值

    转:http://blog.csdn.net/ithomer/article/details/7954577 Shell函数返回值,一般有3种方式:return,argv,echo 1) return ...

  7. Linux基础之-shell script(变量,运算符,流程控制,函数)

    一.shell script Shell 脚本(shell script),是一种为shell编写的脚本程序.业界所说的shell通常都是指shell脚本,但读者朋友要知道,shell和shell s ...

  8. Linux python3安装/shell脚本/if/循环/函数

    python3安装 安装过程 安装包: wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgztar -xvf Python-3.7 ...

  9. Linux Shell 函数返回值

    Shell函数返回值,常用的两种方式:return,echo 1) return 语句 shell函数的返回值,可以和其他语言的返回值一样,通过return语句返回. 示例: #!/bin/sh fu ...

  10. linux shell 函数返回值问题(超过255)

    最近再写一个shell测试的时候出现问题,函数返回值异常 用shell计算斐波那契数列数列,写了一个shell函数,然后调用的,验证的时候我只随便计算了几个数(10以内),确认结果是正确的就提交了,后 ...

随机推荐

  1. Solution Set - 多项式杂题

    0. 「OurOJ #46942」/「51nod #1824」染色游戏   Private link & Submission.   首先,显然有 \[f(t)=\sum_{i=0}^t\bi ...

  2. 搭建springboot web系统

    一.集成spring-data-jpa 我在实际项目中使用mybaties居多,但是个人喜欢spring-data-jpa,在 1. 添加依赖 <!-- 数据源依赖 --> <dep ...

  3. Golang-基本语法2

    http://c.biancheng.net/golang/syntax/ Go语言变量的声明(使用var关键字) Go语言是静态类型语言,因此变量(variable)是有明确类型的,编译器也会检查变 ...

  4. CCS(TI IDE)中英文切换

    介绍 使用CSS时会遇到中英文切换的问题,使用中文可以方便我们更好的开发,但是由于一些专业名词的原因我们有时候又需要英文环境,所以中英文切换就显得十分重要. 由于CCS基于eclipse开发,所以CC ...

  5. 多方安全计算(6):MPC中场梳理

    学习&转载文章:多方安全计算(6):MPC中场梳理 前言 诚为读者所知,数据出域的限制约束与数据流通的普遍需求共同催生了数据安全计算的需求,近一两年业界又统将能够做到多方数据可用不可见的技术归 ...

  6. 基于Hexo实现一个静态的博客网站

    原文首发:https://blog.liuzijian.com/post/8iu7g5e3r6y.html 1.初始化Hexo Hexo是中国台湾开发者Charlie在2012年创建的一个开源项目,旨 ...

  7. JUC并发—2.Thread源码分析及案例应用

    大纲 1.什么是线程以及并发编程 2.微服务注册中心案例 3.以工作线程模式开启微服务的注册和心跳线程 4.微服务注册中心的服务注册功能 5.微服务注册中心的心跳续约功能 6.微服务的存活状态监控线程 ...

  8. .NET中 泛型 + 依赖注入 的实现与应用

    在.NET中,注入泛型依赖项是一个常见的场景. 在依赖注入(DI)中使用泛型可以使得应用程序更加模块化.易于测试和扩展. 在ASP.NET Core中注册泛型服务 假设我们有一个需要注入的泛型接口 I ...

  9. 解锁 DeepSeek 的高效秘籍:技术人员的进阶技巧

    DeepSeek 作为一款强大的代码搜索引擎,能够帮助开发者快速定位代码.解决疑难问题,甚至学习前沿技术.但想要真正释放其潜力,必须掌握以下核心技巧.本文将通过重点标注,直击高效使用 DeepSeek ...

  10. [Ynoi2016] 镜中的昆虫 题解

    难度在最近遇到的题里相对较高,在这里写一篇珂学题解. (以下是学校给的部分分) \(20\%\):直接暴力枚举. 另外 \(20\%\):假如我们取 \(pre\),对于 \(pre<l\) 的 ...