溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Linux下怎么編寫和使用自定義的Shell函數(shù)和函數(shù)庫(kù)

發(fā)布時(shí)間:2021-09-16 18:03:25 來(lái)源:億速云 閱讀:269 作者:chen 欄目:系統(tǒng)運(yùn)維

本篇內(nèi)容主要講解“Linux下怎么編寫和使用自定義的Shell函數(shù)和函數(shù)庫(kù)”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Linux下怎么編寫和使用自定義的Shell函數(shù)和函數(shù)庫(kù)”吧!

在 Linux 系統(tǒng)下,Shell 腳本可以在各種不同的情形下幫到我們,例如展示信息,甚至 自動(dòng)執(zhí)行特定的系統(tǒng)管理任務(wù),創(chuàng)建簡(jiǎn)單的命令行工具等等。

在本指南中,我們將向 Linux 新手展示如何可靠地存儲(chǔ)自定義的 shell 腳本,解釋如何編寫 shell  函數(shù)和函數(shù)庫(kù),以及如何在其它的腳本中使用函數(shù)庫(kù)中的函數(shù)。

Shell 腳本要存儲(chǔ)在何處

為了在執(zhí)行你自己的腳本時(shí)不必輸入腳本所在位置的完整或絕對(duì)路徑,腳本必須被存儲(chǔ)在 $PATH 環(huán)境變量所定義的路徑里的其中一個(gè)。

使用下面的命令可以查看你系統(tǒng)中的 $PATH 環(huán)境變量:

$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

通常來(lái)說(shuō),如果在用戶的家目錄下存在名為 bin 的目錄,你就可以將 shell 腳本存儲(chǔ)在那個(gè)目錄下,因?yàn)槟莻€(gè)目錄會(huì)自動(dòng)地被包含在用戶的 $PATH  環(huán)境變量中(LCTT 譯注:在 Centos 6/7 下是這樣的,在 Debian 8 下不是這樣的,在 Ubuntu 16.04 下又是這樣的)。

因此,在你的主目錄下創(chuàng)建 bin 目錄吧(當(dāng)然這里也可以用來(lái)存儲(chǔ) Perl、Awk 或 Python 的腳本,或者其它程序):

$ mkdir ~/bin

接著,建立一個(gè)名為 lib(libraries 的簡(jiǎn)寫)的目錄來(lái)存放你自己的函數(shù)庫(kù)。你也可以在其中存放其它編程語(yǔ)言的函數(shù)庫(kù),如 C ,Python  等語(yǔ)言。在 lib 目錄下建立另一個(gè)名為 sh 的目錄,這個(gè)目錄將被用來(lái)存放你的 shell 函數(shù)庫(kù):

$ mkdir -p ~/lib/sh

創(chuàng)建你自己的 Shell 函數(shù)和函數(shù)庫(kù)

一個(gè) shell 函數(shù) 就是在腳本中能夠完成特定任務(wù)的一組命令。它們的工作原理與其他編程語(yǔ)言中的過(guò)程(LCTT 譯注:可能指的是類似 SQL  中的存儲(chǔ)過(guò)程之類的吧)、子例程、函數(shù)類似。

編寫一個(gè)函數(shù)的語(yǔ)法如下:

函數(shù)名() { 一系列的命令 }

( LCTT 校注:在函數(shù)名前可以加上 function 關(guān)鍵字,但也可省略不寫)

例如,你可以像下面那樣在一個(gè)腳本中寫一個(gè)用來(lái)顯示日期的函數(shù):

showDATE() {date;}

每當(dāng)你需要顯示日期時(shí),只需調(diào)用該函數(shù)的函數(shù)名即可:

$ showDATE

簡(jiǎn)單來(lái)說(shuō) shell 函數(shù)庫(kù)也是一個(gè) shell 腳本,不過(guò)你可以在一個(gè)函數(shù)庫(kù)中僅存儲(chǔ)其它 shell 腳本中需要調(diào)用的函數(shù)。

下面展示的是在我的 ~/lib/sh 目錄下一個(gè)名為 libMYFUNCS.sh 的庫(kù)函數(shù):

#!/bin/bash  ### Function to clearly list directories in PATH  showPATH() {    oldifs="$IFS"   ### store old internal field separator   IFS=:              ### specify a new internal field separator   for DIR in $PATH<br>  do<br>     echo $DIR<br>  done   IFS="$oldifs"    ### restore old internal field separator } ### Function to show logged user showUSERS() {   echo -e “Below are the user logged on the system:\n”   w } ### Print a user&rsquo;s details  printUSERDETS() {   oldifs="$IFS"    ### store old internal field separator   IFS=:                 ### specify a new internal field separator   read -p "Enter user name to be searched:" uname   ### read username   echo ""   ### read and store from a here string values into variables   ### using : as  a  field delimiter   read -r username pass uid gid comments homedir shell <<< "$(cat /etc/passwd | grep   "^$uname")"   ### print out captured values   echo -e "Username is            : $username\n"   echo -e "User's ID                 : $uid\n"   echo -e "User's GID              : $gid\n"   echo -e "User's Comments    : $comments\n"   echo -e "User's Home Dir     : $homedir\n"   echo -e "User's Shell             : $shell\n"   IFS="$oldifs"         ### store old internal field separator }

保存文件并且給腳本添加執(zhí)行權(quán)限。

如何從函數(shù)庫(kù)中調(diào)用函數(shù)

要使用某個(gè) lib 目錄下的函數(shù),首先你需要按照下面的形式 將包含該函數(shù)的函數(shù)庫(kù)導(dǎo)入到需要執(zhí)行的 shell 腳本中:

$ . /path/to/lib 或$ source /path/to/lib

(LCTT 譯注:***行的 . 和路徑間必須是有空格的)

這樣你就可以像下面演示的那樣,在其它的腳本中使用來(lái)自 ~/lib/sh/libMYFUNCS.sh 的 printUSERDETS 函數(shù)了。

在下面的腳本中,如果要打印出某個(gè)特定用戶的詳細(xì)信息,你不必再一一編寫代碼,而只需要簡(jiǎn)單地調(diào)用已存在的函數(shù)即可。

創(chuàng)建一個(gè)名為 test.sh 的新文件:

#!/bin/bash  ### include lib .  ~/lib/sh/libMYFUNCS.sh ### use function from lib printUSERDETS ### exit script exit 0

保存這個(gè)文件,并使得這個(gè)腳本可被執(zhí)行,然后運(yùn)行它:

$ chmod 755 test.sh $ ./test.sh

Linux下怎么編寫和使用自定義的Shell函數(shù)和函數(shù)庫(kù)

編寫 shell 函數(shù)

在本文中,我們介紹了在哪里可靠地存儲(chǔ) shell 腳本,如何編寫自己的 shell 函數(shù)和函數(shù)庫(kù),以及如何在一個(gè)普通的 shell  腳本中從函數(shù)庫(kù)中調(diào)用庫(kù)中的某些函數(shù)。

到此,相信大家對(duì)“Linux下怎么編寫和使用自定義的Shell函數(shù)和函數(shù)庫(kù)”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI