成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linux下如何編寫和使用自定義的Shell函數和函數庫

系統 Linux 系統運維
在本指南中,我們將向 Linux 新手展示如何可靠地存儲自定義的 shell 腳本,解釋如何編寫 shell 函數和函數庫,以及如何在其它的腳本中使用函數庫中的函數。

[[185650]]

在 Linux 系統下,Shell 腳本可以在各種不同的情形下幫到我們,例如展示信息,甚至 自動執行特定的系統管理任務,創建簡單的命令行工具等等。

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

Shell 腳本要存儲在何處

為了在執行你自己的腳本時不必輸入腳本所在位置的完整或絕對路徑,腳本必須被存儲在 $PATH 環境變量所定義的路徑里的其中一個。

使用下面的命令可以查看你系統中的 $PATH 環境變量:

  1. $ echo $PATH 
  2. /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games 

通常來說,如果在用戶的家目錄下存在名為 bin 的目錄,你就可以將 shell 腳本存儲在那個目錄下,因為那個目錄會自動地被包含在用戶的 $PATH 環境變量中(LCTT 譯注:在 Centos 6/7 下是這樣的,在 Debian 8 下不是這樣的,在 Ubuntu 16.04 下又是這樣的)。

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

  1. $ mkdir ~/bin 

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

  1. $ mkdir -p ~/lib/sh 

創建你自己的 Shell 函數和函數庫

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

編寫一個函數的語法如下:

  1. 函數名() { 一系列的命令 } 

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

例如,你可以像下面那樣在一個腳本中寫一個用來顯示日期的函數:

  1. showDATE() {date;} 

每當你需要顯示日期時,只需調用該函數的函數名即可:

  1. $ showDATE 

簡單來說 shell 函數庫也是一個 shell 腳本,不過你可以在一個函數庫中僅存儲其它 shell 腳本中需要調用的函數。

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

  1. #!/bin/bash  
  2. ### Function to clearly list directories in PATH  
  3. showPATH() {  
  4.   oldifs="$IFS"   ### store old internal field separator 
  5.   IFS=:              ### specify a new internal field separator 
  6.   for DIR in $PATH<br>  do<br>     echo $DIR<br>  done 
  7.   IFS="$oldifs"    ### restore old internal field separator 
  8. ### Function to show logged user 
  9. showUSERS() { 
  10.   echo -e “Below are the user logged on the system:\n” 
  11.   w 
  12. ### Print a user’s details  
  13. printUSERDETS() { 
  14.   oldifs="$IFS"    ### store old internal field separator 
  15.   IFS=:                 ### specify a new internal field separator 
  16.   read -p "Enter user name to be searched:" uname   ### read username 
  17.   echo "" 
  18.   ### read and store from a here string values into variables 
  19.   ### using : as  a  field delimiter 
  20.   read -r username pass uid gid comments homedir shell <<< "$(cat /etc/passwd | grep   "^$uname")" 
  21.   ### print out captured values 
  22.   echo -e "Username is            : $username\n" 
  23.   echo -e "User's ID                 : $uid\n" 
  24.   echo -e "User's GID              : $gid\n" 
  25.   echo -e "User's Comments    : $comments\n" 
  26.   echo -e "User's Home Dir     : $homedir\n" 
  27.   echo -e "User's Shell             : $shell\n" 
  28.   IFS="$oldifs"         ### store old internal field separator 

保存文件并且給腳本添加執行權限。

如何從函數庫中調用函數

要使用某個 lib 目錄下的函數,首先你需要按照下面的形式 將包含該函數的函數庫導入到需要執行的 shell 腳本中:

  1. $ . /path/to/lib 
  2. $ source /path/to/lib 

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

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

在下面的腳本中,如果要打印出某個特定用戶的詳細信息,你不必再一一編寫代碼,而只需要簡單地調用已存在的函數即可。

創建一個名為 test.sh 的新文件:

  1. #!/bin/bash  
  2. ### include lib 
  3. .  ~/lib/sh/libMYFUNCS.sh 
  4. ### use function from lib 
  5. printUSERDETS 
  6. ### exit script 
  7. exit 0 

保存這個文件,并使得這個腳本可被執行,然后運行它:

  1. $ chmod 755 test.sh 
  2. $ ./test.sh  

 

 

編寫 shell 函數

在本文中,我們介紹了在哪里可靠地存儲 shell 腳本,如何編寫自己的 shell 函數和函數庫,以及如何在一個普通的 shell 腳本中從函數庫中調用庫中的某些函數。

在之后,我們還會介紹一種相當簡單直接的方式來將 Vim 配置為一個編寫 Bash 腳本的 IDE(集成開發環境)。在那之前,記得要經常關注我們 ,如果能和我們分享你對這份指南的想法就更好了。

作者簡介:

Aaron Kili 是一名 Linux 和 F.O.S.S 愛好者、一名未來的 Linux 系統管理員、web 開發者,目前是一名 TecMint 上的內容創造者,他喜歡計算機相關的工作,并且堅信知識的分享。 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2018-08-27 14:50:46

LinuxShellBash

2018-03-16 08:41:16

Oracle存儲函數

2010-10-25 16:05:07

oracle自定義函數

2009-09-17 13:15:12

NIS函數庫

2010-09-14 16:47:23

SQL自定義函數

2020-07-25 16:33:02

tmuxGitLinux終端

2021-07-15 16:41:21

Swift查詢函數

2010-05-11 13:16:21

Unix awk

2010-09-14 16:59:39

SQL自定義函數

2021-05-28 08:58:41

Golang網卡metrics

2009-06-22 15:07:45

原則和技巧JSF自定義復合組件

2019-12-02 21:29:45

Keras神經網絡TensorFlow

2010-04-28 12:33:36

Oracle自定義函數

2009-11-25 14:36:39

PHP函數usort(

2023-10-31 09:10:39

2022-11-29 08:07:23

CSSJavaScript自定義

2009-12-08 19:34:26

PHP拼寫檢查函數庫

2011-05-17 13:32:04

oracle

2015-03-26 11:51:22

2023-06-28 08:05:46

場景vue3自定義
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩国产精品一区二区三区 | 久久久久成人精品免费播放动漫 | 国产精品海角社区在线观看 | 成人在线观看网站 | 欧美成人精品一区二区男人看 | 成人午夜免费在线视频 | 成人国产精品久久 | 97精品久久| 久久国产精品久久久久久 | 久久激情五月丁香伊人 | 在线视频一区二区三区 | 日韩视频精品在线 | 午夜精品一区二区三区在线观看 | 欧美日韩在线观看一区二区三区 | 天天色天天色 | 久久久久亚洲精品中文字幕 | 亚洲精品国产成人 | 97国产精品 | 玖玖视频国产 | 国产成人99av超碰超爽 | 国产成人精品一区二区三 | 日韩三 | 国产区一区二区三区 | 国产精品毛片一区二区在线看 | 日日天天 | 亚洲一区二区久久 | 日本一区二区三区在线观看 | 日日操夜夜操视频 | 成人免费视频网站在线观看 | 欧美高清视频 | 国产精品久久久久久久久久久新郎 | 日韩中文一区二区 | 91在线视频一区 | 亚洲国产精品久久久久秋霞不卡 | 国产一区二区视频在线观看 | 久久亚洲美女 | 激情婷婷 | 久草免费在线 | 国产区高清 | 亚洲国产情侣 | 久久这里只有精品首页 |