如何在Bash中编写函数

系统 Linux
在编程时,实际上是在定义要由计算机执行的过程或例程。一个简单的类比是将计算机编程与烤面包进行比较:你一次列出了要组建工作环境的配料,然后列出了烤面包所必须采取的步骤。在编程和烘烤中,必须以不同的间隔重复执行某些步骤。

[[330491]]

通过编写函数来减少代码的冗余和维护。

在编程时,实际上是在定义要由计算机执行的过程procedure例程routine。一个简单的类比是将计算机编程与烤面包进行比较:你一次列出了要组建工作环境的配料,然后列出了烤面包所必须采取的步骤。在编程和烘烤中,必须以不同的间隔重复执行某些步骤。例如,在烤面包中,这可能是酵母培养的过程:

  1. STIR=100
  2. SNOOZE=86400
  3.  
  4. function feed_culture {
  5.   remove_from(pantry)
  6.   add(flour, water)
  7.   stir($STIR)
  8.   sleep($SNOOZE)
  9. }

然后,揉面和醒发面团: 

  1. KNEAD=600
  2. SNOOZE=7200
  3.  
  4. function process_dough {
  5.   remove_from(proofing_drawer)
  6.   knead($KNEAD)
  7.   return_to_drawer($SNOOZE)
  8. }

在编程中,这些子例程subroutines可以表示为函数function。函数对程序员很重要,因为它们有助于减少代码中的冗余,从而减少了所需的维护量。例如,在以编程方式烤制面包的假想场景中,如果你需要更改面团醒发的用时,只要你之前使用函数,那么你只需更改一次用时,或使用变量(在示例代码中为 SNOOZE)或直接在处理面团的子程序中更改用时。这样可以节省你很多时间,因为你不必通过你的代码库遍历每个可能正在醒发的面团,更不用说担心错过一个。许多 bug 是由未更改的缺失的值或执行不正确的 sed 命令引起的,它们希望捕获所有可能而不必手动寻找。

在 Bash 中,无论是在编写的脚本或在独立的文件中,定义函数和使用它们一样简单。如果将函数保存到独立的文件中。那么可以将它 source 到脚本中,就像 include C 语言或 C++ 中的库或将模块 import 到 Python 中一样。要创建一个 Bash 函数,请使用关键字 function: 

  1. function foo {
  2. # code here
  3. }

这是一个如何在函数中使用参数的例子(有些人为设计,因此可能会更简单): 

  1. #!/usr/bin/env bash
  2. ARG=$1
  3.  
  4. function mimic {
  5.   if [[ -z $ARG ]]; then
  6.     ARG='world'
  7.   fi
  8.   echo "hello $ARG"
  9. }
  10.  
  11. mimic $ARG

结果如下: 

  1. $ ./mimic
  2. hello world
  3. $ ./mimic everybody
  4. hello everybody

请注意脚本的最后一行,它会执行该函数。对于编写脚本的新手来说,这是一个普遍的困惑点:函数不会自动执行。它们作为潜在的例程存在,直到被调用。

如果没有调用该函数,那么函数只是被定义,并且永远不会运行。

如果你刚接触 Bash,请尝试在包含最后一行的情况下执行示例脚本一次,然后在注释掉最后一行的情况下再次执行示例脚本。 

使用函数

即使对于简单的脚本,函数也是很重要的编程概念。你越适应函数,在面对一个不仅需要声明性的命令行,还需要更多动态的复杂问题时,你就会越容易。将通用函数保存在单独的文件中还可以节省一些工作,因为它将帮助你建立常用的程序,以便你可以在项目间重用它们。看看你的脚本习惯,看是否适合使用函数。

责任编辑:庞桂玉 来源: Linux中国
相关推荐

2020-07-01 18:31:14

Linuxbash永远循环

2023-10-19 14:52:27

2024-04-01 00:00:00

AnsibleJenkins应用程序

2017-12-11 13:50:17

LinuxBash子字符串

2020-04-09 10:18:51

Bash循环Linux

2015-01-23 09:38:31

2021-08-30 07:50:42

脚本语言命令行

2022-09-19 11:42:21

Go优化CPU

2022-10-08 11:39:56

断路器Golang项目

2023-12-14 13:02:00

BashLinuxShell

2022-11-03 08:13:52

echo 命令Linux

2022-11-23 08:14:42

bash 脚本test 命令

2023-08-22 21:42:03

Bash函数

2018-03-07 09:30:25

Linux命令Bash

2022-12-06 08:27:50

Bash脚本字符串

2018-11-05 14:53:14

Go函数代码

2018-02-24 16:30:49

LinuxUnixBash

2019-12-02 21:29:45

Keras神经网络TensorFlow

2018-08-27 14:50:46

LinuxShellBash

2022-08-30 19:14:31

LinuxBash
点赞
收藏

51CTO技术栈公众号