国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Bash 初學者系列 9:在 bash 中使用函數

系統 Linux
今天我們將介紹在 bash 中如何創建函數,以及函數中的返回值、傳遞參數等內容。

當你的 bash 腳本中代碼非常多的時候,會看起來很混亂,其中有部分代碼有可能是重復的。這個時候,可以使用函數來避免重復的代碼。

今天我們將介紹在 bash 中如何創建函數,以及函數中的返回值、傳遞參數等內容。

在 bash 中創建函數

創建 bash 函數有兩種不同的語法。最常用的方法如下:?

function_name () {
commands
}

第二種方法不太常用,如下所示:

function function_name {
commands
}

在使用函數時,需要注意以下幾點:

  • 除非被調用,否則函數永遠不會被執行;
  • 函數必須先定義,然后才能被調用。

作為演示,我們創建一個 fun.sh 腳本,如下代碼:

#!/bin/bash

hello () {
echo "Hello World"
}

hello
hello
hello

上述腳本中,我們定義了一個名為 hello 的函數,它將在終端上打印 Hello World。后面我們調用了三次 hello 函數,因此,運行腳本后,你會在屏幕上看到 Hello World 打印了三次:

$ ./fun.sh
Hello World
Hello World
Hello World

函數的返回值

在很多編程語言中,函數在調用時都會返回一個值,然而,在 bash 函數中沒有返回值。

當函數執行完成時,會返回一個 $? 變量作為退出狀態,0 表示成功執行,其他非零正整數(1 - 255)表示執行失敗。

我們來寫一個例子,命名為 error.sh,在其中寫一個 return 語句,如下代碼所示:?

#! /bin/bash

error () {
blabla
return 0
}

error
echo "The return status of the error function is: $?"

執行結果如下:

$ ./error.sh
./error.sh: line 4: blabla: command not found
The return status of the error function is: 0

因為有 return 0 這一行,所以即使函數中有 blabla 這一行的報錯,error 函數還是返回了一個執行成功的狀態碼 0。

return 語句執行后,函數會被立即終止。

向 bash 函數傳遞參數

我們可以向函數傳遞參數,就像向?? bash 腳本傳遞參數???一樣。

作為演示,我們創建一個名為 iseven.sh 的腳本,如下所示:?

#!/bin/bash

iseven () {
if [ $(($1 % 2)) -eq 0 ]; then
echo "$1 is even."
else
echo "$1 is odd."
fi
}

iseven 3
iseven 4
iseven 20
iseven 111

iseven() 函數判斷數字是偶數還是奇數。在調用的時候,將參數放在函數名后面,函數執行的時候會讀取 $1 來獲取傳遞的參數。我們來執行一下:

$ ./iseven.sh
3 is odd.
4 is even.
20 is even.
111 is odd.

這里需要注意,bash 函數中的參數,和 bash 腳本的參數需要區分開來,看如下 funarg.sh 腳本:?

#!/bin/bash

fun () {
echo "$1 is the first argument to fun()"
echo "$2 is the second argument to fun()"
}

echo "$1 is the first argument to the script."
echo "$2 is the second argument to the script."

fun Yes 7

執行結果如下:

$ ./funarg.sh Cool Stuff
Cool is the first argument to the script.
Stuff is the second argument to the script.
Yes is the first argument to fun()7 is the second argument to fun()

可以看到,同樣是使用 $1 $2 來引用腳本參數和函數參數,當實際調用時,取值是不同的。

bash 函數中的全局變量和局部變量

與大多數編程語言累死,bash 變量具有全局變量和局部變量之分。其中全局變量可以在任何位置方位到,而局部變量只能在其定義的函數中訪問。

作為演示,看如下 scope.sh 腳本:?

#!/bin/bash

v1='A'
v2='B'

myfun() {
local v1='C'
v2='D'
echo "Inside myfun(): v1: $v1, v2: $v2"
}

echo "Before calling myfun(): v1: $v1, v2: $v2"
myfun
echo "After calling myfun(): v1: $v1, v2: $v2"

我們首先定義了兩個全局變量 v1 v2,然后在 函數 myfun() 中,使用 local 關鍵字 定義了一個局部變量 v1,并修改了全局變量 v2。在不同的函數中,局部變量可以使用相同的變量名。

執行一下,結果如下:?

$ ./scope.sh
Before calling myfun(): v1: A, v2: B
Inside myfun(): v1: C, v2: D
After calling myfun(): v1: A, v2: D


由此,我們可以看到:

  • 如果局部變量的變量名與全局變量的變量名相同,那么局部變量優先級會更高;
  • 在函數中可以更改全局變量的值。

遞歸函數

遞歸函數是一個調用自身的函數。階乘計算是遞歸函數的經典例子,看下面的腳本 factorial.sh:

#!/bin/bash

factorial () {
if [ $1 -le 1 ]; then
echo 1
else
last=$(factorial $(( $1 -1)))
echo $(( $1 * last ))
fi
}

echo -n "4! is: "
factorial 4
echo -n "5! is: "
factorial 5
echo -n "6! is: "
factorial 6

任何遞歸函數都要從一個基本條件開始,這個基本條件必須可以結束遞歸函數調用鏈。在 factorial() 函數中,基本條件為:

if [ $1 -le 1 ]; then
echo 1

然后導出階乘函數的遞歸情況。要計算 n 的階乘,其中 n 是大于 1 的正數,可以將 n 乘以 n-1 的階乘:

factorial(n) = n * factorial(n-1)

使用上面那個公式來編寫遞歸函數的算法:?

last=$(factorial $(( $1 -1)))
echo $(( $1 * last ))

然后運行一下,檢查運行結果:

$ ./factorial.sh
4! is: 24
5! is: 120
6! is: 720


責任編輯:龐桂玉 來源: TIAP
相關推薦

2022-12-02 14:30:24

Bash腳本數組

2022-12-13 12:55:15

Bash循環

2022-12-16 09:01:24

2022-12-01 08:10:49

Bash腳本參數

2022-12-07 07:43:21

2022-12-09 07:58:52

Bash條件語句

2022-12-08 12:05:03

Bash字符串

2022-11-30 07:47:00

Bash腳本

2022-11-28 08:01:47

BashLinuxshell 腳本

2023-07-20 15:37:50

Bash數組

2023-07-12 14:13:03

BashLinux

2023-08-22 21:42:03

Bash函數

2019-04-22 14:39:05

BashLinux命令

2019-04-15 11:10:34

Bash方括號命令行

2020-10-13 19:04:58

Bash信號捕獲Shell腳本

2011-06-17 15:37:42

Qt

2023-01-13 12:37:43

Bashshell花括號

2022-01-16 07:48:33

腳本Bash 工具

2012-03-14 10:56:23

web app

2011-04-12 10:13:24

點贊
收藏

51CTO技術棧公眾號

大香伊人中文字幕精品| www在线观看黄色| 国产在线视频资源| 亚洲国产99精品国自产| 欧美.www| 久久午夜夜伦鲁鲁一区二区| 国产成人高潮免费观看精品| 国产日韩在线不卡| 精品91在线| 婷婷综合六月| 国产视频手机在线播放| 99re6在线| 九九九热精品免费视频观看网站| 在线免费观看日本一区| 91小视频在线观看| 亚洲高清免费观看| 久久精品男女| 亚洲精品进入| 全球最大av网站久久| 性欧美video高清bbw| 久久亚洲高清| 色综合一个色综合| 亚洲专区在线| 久久er热在这里只有精品66| 免费一级网站| 91网站在线观看免费| 91在线观看免费高清完整版在线观看| 色婷婷综合久久久久中文字幕1| 天天综合色天天综合色h| 久久精品人人做人人爽人人 | 午夜激情av在线| 精品国产一区二区三区四区在线观看 | 日韩免费观看高清完整版 | 成人亚洲免费| 在线观看免费毛片| 欧美日韩国产精品一区二区| 在线观看欧美www| 亚洲精品免费播放| 老司机一区二区三区| 精品五月天堂| 里番在线播放| 日本视频一二区| 麻豆tv在线播放| 日韩亚洲不卡在线| 国产欧美日韩高清| 久久久久免费视频| 欧美精品日韩一区| 国产精品系列在线| 老司机精品久久| jlzzjlzz亚洲女人| 免费污视频在线观看| 男女羞羞视频教学| 亚洲国产一区在线| 成人福利网站在线观看| 日韩精品视频免费| 动漫精品一区二区| 成人免费三级在线| 久久精品久久精品| 国产图片一区| 欧美与亚洲与日本直播| 欧美寡妇性猛交xxx免费| 国产在线导航| 91福利免费| 性疯狂做受xxxx高清视频| 国产黄页在线观看| 国产片侵犯亲女视频播放| 一区二区三区四区国产| 日韩精品第一页| 91免费在线观看网站| 国产+人+亚洲| 久久精品电影网站| 欧美一区二区私人影院日本| 国产精品美女久久久久久久久久久 | 精品国产依人香蕉在线精品| 久久免费视频网| 狠狠爱一区二区三区| 久久综合色播| 四虎影视4hu4虎成人| 亚洲精品精选| 色综合色综合色综合色综合色综合| 伦伦影院午夜日韩欧美限制| 国产精品国语对白| 92看片淫黄大片一级| 国产在线观看av| 日本精品网站| 久久精品国内一区二区三区| 欧美精品v国产精品v日韩精品| 91欧美精品成人综合在线观看| 免费黄色特级片| 欧美亚洲黄色| 久久蜜桃一区二区| 久久中文字幕av一区二区不卡| 老**午夜毛片一区二区三区| 亚洲综合精品自拍| 国产suv精品一区二区三区88区| 人妻少妇被粗大爽9797pw| 韩国一区二区三区视频| 成a人片国产精品| 色一区av在线| 成人中文字幕在线播放| 国产精品一区二区精品视频观看| 成人福利视频网站| 日韩欧美国产精品一区| 日韩国产美国| 亚洲美女尤物影院| 国产91丝袜在线播放0| 欧美在线短视频| 欧美成在线视频| 国产麻豆日韩| 国产v亚洲v天堂无码久久久| 视频免费一区| 日本美女一区| 在线黄色的网站| 人妻无码久久一区二区三区免费| 九色porny在线| 久久99久久99精品免视看婷婷| 亚洲国内精品在线| 天堂8在线天堂资源bt| 精品国产亚洲一区二区三区| 国产精品美女久久久久久久网站| 国产亚洲一级高清| 亚洲a一级视频| 人人干在线视频| 欧美专区一区二区三区| 日韩在线视频免费观看| 国产野外作爱视频播放| 国产精品国内免费一区二区三区| 欧美一级一区二区| 人妻无码视频一区二区三区| 久草在线中文888| 亚洲制服一区| 日韩精品中文字幕一区二区三区| 啊啊啊国产视频| 欧美日韩一区自拍| 丝袜情趣国产精品| 92看片淫黄大片一级| 午夜在线视频一区二区区别| 海角国产乱辈乱精品视频| 成人在线免费观看| 国产精品一区二区久久精品爱涩 | 天堂一区二区在线| 日韩在线小视频| 高h视频在线| 成人av免费在线播放| 国产精品久久九九| 神马午夜久久| 亚洲视频第一页| 黄色av免费在线观看| 亚洲制服丝袜一区| 成人高清dvd| 欧美黄色免费| 欧美亚洲另类视频| av在线视屏| 国产日韩精品久久久| www.亚洲免费视频| 国产精品一级伦理| 国产一区二区视频在线| 成人3d动漫一区二区三区91| 国产一区二区区别| 久久国产精品电影| 在线观看小视频| 日本韩国一区二区三区| 精产国产伦理一二三区| 日本一区二区三区国色天香| 国产人妻人伦精品| 翔田千里一区二区| 国模精品一区二区三区| 日韩一区二区三区在线| 狠狠色丁香婷婷综合影院| 国产精品国产三级国产在线观看| 国产精品自在欧美一区| 欧美一二三四区在线| 国产美女视频黄a视频免费| 成人av高清在线| 日本国产在线播放| 久久精品123| 成人h片在线播放免费网站| 精品在线网站观看| 欧美激情综合色| 伊人久久亚洲| 国模精品一区二区三区色天香| 一区二区三区| 91精品国产高清久久久久久久久| 裤袜国产欧美精品一区| 日韩手机在线导航| 最近中文字幕在线中文视频| 亚洲午夜精品久久久久久久久| 国产香蕉视频在线观看| 亚洲激情网站免费观看| 日韩美女一区| 老司机精品导航| 日本国产中文字幕| 91视频免费播放| free性欧美1819hd| 懂色av一区二区三区| 免费毛片在线| 亚洲爱爱爱爱爱| 试看120秒一区二区三区| 欧美极品少妇xxxxx| 欧美综合在线视频观看|