Linux shell编程学习笔记24:函数定义和使用

这篇具有很好参考价值的文章主要介绍了Linux shell编程学习笔记24:函数定义和使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

*20231113 补充了实例使用for循环来简化代码的内容

为了实现模块化设计和代码重用,很多编程语言支持函数或过程,Linux shell也支持函数定义和调用。

Linux shell中的函数与其它编程语言很多有相似之处,也有自己独特之处。

1 函数的定义

1.1 标准格式

function 函数名()
{
    语句或命令1

     ……

    语句或命令n
    [return 返回值]
}

其中:

  • function是 Shell 中的关键字,专门用来定义函数;
  • 由{ }包围的部分称为函数体,调用一个函数,实际上就是执行函数体中的代码。
  • return 是 Shell 关键字,专门用在函数中返回一个值;如果不用返回值,这一句也可以不写。

这个格式是不是与JavaScript的函数定义格式很像?
 

1.2 简化格式

在实际实用中,还有两种简化格式:

1.2.1  简化格式1——省略function关键字

我们可以把function关键字省略不写,就有了下面这种简化格式:

函数名()
{
    语句或命令1

     ……

    语句或命令n
    [return 返回值]
}

1.2.2  简化格式2——省略函数名后面的小括号

如果我们写了 function 关键字,也可以省略函数名后面的小括号,就有了下面这种简化格式:

function 函数名
{
    语句或命令1

     ……

    语句或命令n
    [return 返回值]
}

1.3 建议

建议使用1.1的标准格式,保持与其它编程语言的书写兼容性。

2 函数的参数

2.1 函数在定义时不能指明参数

尽管Linux Linux Shell中的函数定义格式与JavaScript的函数定义格式很像,但它也在有自己的特别之处,那就是函数在定义时不能指明参数,但是在调用时却可以传递参数,并且给它传递什么参数它就接收什么参数。

2.2 函数体内使用参数信息的方式

函数体内脚本内获取参数的格式为:

${n}

其中n 代表一个数字,0为执行脚本的命令行命令, 1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,依此类推……

  • 当n > 10时,可以省略{},简写为$n。
  • 当n>=10时,务必使用${n}

除此之外,还有几个特殊的参数处理信息:

参数处理 说明
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数。
如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。
如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$- 显示Shell使用的当前选项
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

3 函数的执行(调用)

格式:

函数名 [参数1 参数2 …… 参数n]

与JavaScript一样,Linux Shell 对函数定义和调用的顺序不做限制,你可以将定义放在调用的前面,也可以反过来,将定义放在调用的后面。

但是,与JavaScript不同的地方:

  • 函数名后面不用()。
  • 如果要传递参数,那么参数以空格分隔。

4.函数定义和调用实例

我们定义一个函数x:

function x()
{
	echo cmd: $0; 
	echo param number:$#; 
	echo they are $@; 
	echo 1-$1; 
	echo 2-${2}; 
	echo 3-$3; 
	echo 4-$4; 
	echo 5-$5; 
	echo 6-$6;
	echo 7-$7; 
	echo 8-$8;
	echo 9-$9;
	echo 10-${10};
	return 0;
};

在函数体中:

  • 我们用echo命令首先显示命令行命令($0)
  • 然后显示命令行参数个数($#)
  • 接着我们显示所有的命令行参数($@)
  • 然后我们逐个显示每个参数
  • 最后我们用return语句返一个值0

4.1 bash中

csdn @edu bash $ function x() {echo cmd: $0; echo param number:$#; echo they are $@; echo 1-$1; echo 2-${2}; echo 3-$3; echo 4-$4; echo 5-$5; echo 6-$6;echo 7-$7; echo 8-$8; echo 9-$9; echo 10-${10}; return 0;}; x a1 b2 c3 d4 e5 f6 h7 i8 j9 k10; echo exit code: $?
bash: syntax error near unexpected token `{echo'
csdn @edu bash $ function x() { echo cmd: $0; echo param number:$#; echo they are $@; echo 1-$1; echo 2-${2}; echo 3-$3; echo 4-$4; echo 5-$5; echo 6-$6;echo 7-$7; echo 8-$8; echo 9-$9; echo 10-${10}; return 0;}; x a1 b2 c3 d4 e5 f6 h7 i8 j9 k10; echo exit code: $?
cmd: bash
param number:10
they are a1 b2 c3 d4 e5 f6 h7 i8 j9 k10
1-a1
2-b2
3-c3
4-d4
5-e5
6-f6
7-h7
8-i8
9-j9
10-k10
exit code: 0
csdn @edu bash $ 

linux函数定义,Linux世界,麒麟操作系统,系统安全,linux,学习笔记,Linux shell,shell脚本,命令行参数,函数定义,函数调用

在命令行中,我们先定义了函数x,然后调用函数x并参递了参数10个参数:

x a1 b2 c3 d4 e5 f6 h7 i8 j9 k10

最后我们使用命令

echo exit code: $?

显示函数x的返回值为0

在bash的命令行中,函数体开始的{和后面的命令或语句要用空格分隔。

4.2 zsh中

csdn @ edu zsh $ function x() {echo cmd: $0; echo param number:$#; echo they are $@; echo 1-$1; echo 2-${2}; echo 3-$3; echo 4-$4; echo 5-$5; echo 6-$6;echo 7-$7; echo 8-$8; echo 9-$9; echo 10-${10}; return 0;}; x a1 b2 c3 d4 e5 f6 h7 i8 j9 k10; echo exit code: $?
cmd: x
param number:10
they are a1 b2 c3 d4 e5 f6 h7 i8 j9 k10
1-a1
2-b2
3-c3
4-d4
5-e5
6-f6
7-h7
8-i8
9-j9
10-k10
exit code: 0

linux函数定义,Linux世界,麒麟操作系统,系统安全,linux,学习笔记,Linux shell,shell脚本,命令行参数,函数定义,函数调用

代码跟在bash中是一样的,但是zsh的命令行中不要求函数体开始的{和后面的命令或语句用空格分隔。

4.3 使用for循环来简化代码

上面的实例中,要逐个输出参数,我们还可以使用for语句来进行简化。

function x()
{
	echo cmd: $0; 
	echo param number:$#; 
	echo they are $@; 
	j=1;
	for i in $@
	do
  		echo $j-$i; 
		((j++));
	done
	return 0;
};

4.3.1 在bash中

csdn @ edu bash $ function x(){ echo cmd: $0; echo param number:$#; echo they are $@; j=1; for i in $@; do echo $j-$i; ((j++));done;return 0; };x a1 b2 c3 d4 e5 f6 h7 i8 j9 k10; echo exit code: $?
cmd: bash
param number:10
they are a1 b2 c3 d4 e5 f6 h7 i8 j9 k10
1-a1
2-b2
3-c3
4-d4
5-e5
6-f6
7-h7
8-i8
9-j9
10-k10
exit code: 0

linux函数定义,Linux世界,麒麟操作系统,系统安全,linux,学习笔记,Linux shell,shell脚本,命令行参数,函数定义,函数调用

4.3.2 在zsh中

csdn @ edu zsh $ function x(){ echo cmd: $0; echo param number:$#; echo they are $@; j=1; for i in $@; do echo $j-$i; ((j++));done;return 0; };x a1 b2 c3 d4 e5 f6 h7 i8 j9 k10; echo exit code: $?
cmd: x
param number:10
they are a1 b2 c3 d4 e5 f6 h7 i8 j9 k10
1-a1
2-b2
3-c3
4-d4
5-e5
6-f6
7-h7
8-i8
9-j9
10-k10
exit code: 0

linux函数定义,Linux世界,麒麟操作系统,系统安全,linux,学习笔记,Linux shell,shell脚本,命令行参数,函数定义,函数调用文章来源地址https://www.toymoban.com/news/detail-751811.html

到了这里,关于Linux shell编程学习笔记24:函数定义和使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux shell编程学习笔记29:shell自带的 脚本调试 选项

    Linux shell脚本的调试方法比较多,上次我们探讨和测试了shell内建命令set所提供的一些调试选项,其实 shell 本身也提供了一些调试选项。我们以bash为例来看看。 purleEndurer @ csdn ~ $ bash --help GNU bash, version 4.2.46(2)-release-(x86_64-redhat-linux-gnu) Usage:  bash [GNU long option] [option] ...      

    2024年02月04日
    浏览(40)
  • Linux shell编程学习笔记47:lsof命令

    今天国产电脑提示磁盘空间已耗尽,使用用df命令检查文件系统情况,发现/dev/sda2已使用100%。 Linux shell编程学习笔记39:df命令 https://blog.csdn.net/Purpleendurer/article/details/135577571 于是开始清理磁盘空间。 第一步是查看已删除、但空间却没有释放的进程。 这里要用到 lsof命令。

    2024年04月27日
    浏览(36)
  • Linux shell编程学习笔记33:type 命令

     目录 0 引言 1 type 命令的功能和格式 1.1 type命令的功能 1.2 type 命令的格式 2 type命令用法实例 2.1用type命令查看shell内置命令(以echo命令为例) 2.2 用type命令查看别名(以ls命令为例) 2.3 用type命令同时查看shell内置命令和别名(以echo和ls命令为例) 2.4 用type命令查看外部

    2024年02月03日
    浏览(44)
  • Linux shell编程学习笔记36:read命令

     *更新日志  *2023-12-18 1.根据[美] 威廉·肖特斯 (Willian shotts)所著《Linux命令行大全(第2版)》                         更新了-e、-i、-r选项的说明                       2.更新了 2.8 的实例,增加了gif动图                       3.补充了-i的应用实例 2.12 目录 目录

    2024年02月04日
    浏览(35)
  • Linux shell编程学习笔记40:stat命令

    “程序员必备的面试技巧,就像是编写一段完美的代码一样重要。在面试战场上,我们需要像忍者一样灵活,像侦探一样聪明,还要像无敌铁金刚一样坚定。只有掌握了这些技巧,我们才能在面试的舞台上闪耀光芒,成为那个令HR们心动的程序猿!” 目录 0 前言 1 DOS、Wind

    2024年01月19日
    浏览(43)
  • Linux shell编程学习笔记41:lsblk命令

    边缘计算面临着数据安全与隐私保护、网络稳定性等挑战,但同时也带来了更强的实时性和本地处理能力,为企业降低了成本和压力,提高了数据处理效率。因此,边缘计算既带来了挑战也带来了机遇,需要我们不断地研究 前几节学习我们均涉及到磁盘和文件存储,今天我们

    2024年01月24日
    浏览(39)
  • Linux shell编程学习笔记39:df命令

    0 前言 1  df命令的功能、格式和选项说明 1.1 df命令的功能 1.2 df命令的格式 1.3 df命令选项说明  2 df命令使用实例  2.1  df:显示主要文件系统信息 2.2 df -a:显示所有文件系统信息 2.3 df -t[=]TYPE或--type[=]TYPE:显示TYPE指定类型的文件系统信息 2.4 df --total:追加显示统计信息 2

    2024年01月16日
    浏览(44)
  • Linux shell编程学习笔记17:for循环语句

    Linux Shell 脚本编程和其他编程语言一样,支持算数、关系、布尔、字符串、文件测试等多种运算,同样也需要进行根据条件进行流程控制,提供了if、for、while、until等语句。  之前我们探讨了if语句,现在我们来探讨for循环语句。 Linux Shell中的for语句十分灵活,格式多样,我

    2024年02月06日
    浏览(33)
  • Linux shell编程学习笔记18:while循环语句

    上回我们研究和探讨了Linux shell编程中for 循环语句,与在C/C++中一样,for 循环语句Linux shell编程中有很多灵活的用法。今天我们来研究和探讨while循环语句。 我们继续以for循环语句中的例子,计算 从1到10与2的乘积 并输出。 1.在zsh命令行中 # csdn @ edu in ~ [20:35:57]  $ i=1; while

    2024年02月06日
    浏览(44)
  • Linux shell编程学习笔记45:uname命令-获取Linux系统信息

    linux 有多个发行版本,不同的版本都有自己的版本号。 如何知道自己使用的Linux的系统信息呢? 使用uname命令、hostnamectl命令,或者通过查看/proc/version文件来了解这些信息。 我们先看看uname命令。 我们可以使用命令 uname --help命令 查看它的用法: purpleEndurer @  bash ~ $ uname --

    2024年04月10日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包