Linux Shell系列教程之(十五) Shell函數簡介

来源:http://www.cnblogs.com/waitig/archive/2016/09/13/5868415.html
-Advertisement-
Play Games

本文是Linux Shell系列教程的第(十五)篇,更多Linux Shell教程請看:Linux Shell系列教程 函數可以將一個複雜功能劃分成若幹模塊,從而使程式結構更加清晰,代碼重覆利用率更高。 高級語言都支持函數,Shell也不例外。今天就為大家介紹下Shell中函數相關用法。 一、She ...


本文是Linux Shell系列教程的第(十五)篇,更多Linux Shell教程請看:Linux Shell系列教程

函數可以將一個複雜功能劃分成若幹模塊,從而使程式結構更加清晰,代碼重覆利用率更高。

高級語言都支持函數,Shell也不例外。今天就為大家介紹下Shell中函數相關用法。

Shell函數

一、Shell函數的語法

因為函數是腳本類語言,在執行時是逐行執行的,因此,Shell 函數必須先定義後使用。

Shell 函數的定義格式如下:

[ function ] funname [()]
{
    command;
    [return int;]
}

說明:function 關鍵詞是可選項,可加可不加。

大括弧內飾函數體,最後是返回值,可以加【return】關鍵詞來指定函數返回內容,如果不加,將以最後一條命令運行結果,作為返回值。 return後跟數值n(0-255)。

二、Shell函數使用舉例

接下來我們還是通過例子來學習下Shell函數的運用。

示例1:

#!/bin/bash
# author:Linux大學
# url:www.linuxdaxue.com
#date:2016-06-01

demo(){
            echo "這是我的第一個 shell 函數!"
}
echo "-----函數開始執行-----"
demo
echo "-----函數執行完畢-----"

說明:demo是一個函數的定義,函數體只有一句:echo "這是我的第一個 shell 函數!"

然後通過函數名來調用函數。

程式輸出:

-----函數開始執行-----
這是我的第一個 shell 函數!
-----函數執行完畢-----

這個例子並沒有體現函數的入參等使用,接下來給大家介紹下Shell中函數的傳參方法。

三、Shell函數參數處理

在Shell中,調用函數時可以向其傳遞參數。

在函數體內部,通過 $n 的形式來獲取參數的值,例如,$1表示第一個參數,$2表示第二個參數,$0代表腳本本身。

Shell函數參數處理例子

示例2:

我們再看一個例子:

#!/bin/sh
#Author:Linux大學
#url:http://www.linuxdaxue.com
#date:2016-06-01
function fSum()
{
        echo "入參為:"$1,$2
        return $(($1+$2))
}
fSum 5 7
total=$(fSum 3 2)
echo "Return :"$total,$?

這個定義了一個計算參數和的函數,函數可以通過$1,$2這種形式來獲取入參值,然後通過$(($1+$2))這種形式來將兩值相加,並返回結果。

調用時,也可以通過括弧的形式來調用,Shell會調用單括弧裡面的命令。 因此,我們可以將shell中函數,看作是定義一個新的命令,它是命令,因此 各個輸入參數直接用 空格分隔。

輸出:

入參為:5,7
Return :入參為:3,2,5

註意:

註意,$10 不能獲取第十個參數,獲取第十個參數需要${10}。當n>=10時,需要使用${n}來獲取參數。

函數中用到的特殊字元

另外,還有幾個特殊字元用來處理參數:

參數 說明
$# 傳遞到腳本的參數個數
$* 以一個單字元串顯示所有向腳本傳遞的參數
$$ 腳本運行的當前進程ID號
$! 後臺運行的最後一個進程的ID號
$@ 與$*相同,但是使用時加引號,併在引號中返回每個參數。
$- 顯示Shell使用的當前選項,與set命令功能相同。
$? 顯示最後命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤。

好了,有關Shell函數的相關知識先為大家介紹到這裡,Shell中的函數非常強大,在此不再展開講,希望大家能夠自己多多練習,熟練掌握。

更多Linux Shell教程請看:Linux Shell系列教程

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 要得到一組數據的中位數(例如某個地區或某家公司的收入中位數),我們首先要將這一任務細分為3個小任務: 舉例說明: 建表語句: 小任務1的查詢語句: 小任務2的查詢語句: 小任務3的查詢語句: 至此,我們就找到瞭如何從一組數據中獲得中位數的方法。 下麵,來介紹另外一種優化排名語句的方法。 我們都知道如 ...
  • 今天在macOS 系統下搭建 Java開發環境,需要配置MySQL,按照Windows的習慣,使用Navicat for MySQL 操作比較習慣。然後找不到比較好的破解版,這裡介紹一個老版的,還是英文版的工具安裝破解說明。 1. 官網下載地址: http://download3.navicat.c ...
  • 前言 有些時候,我們可能會需要定時執行一下批處理來達到一定的目的,比如Oracle資料庫的定時備份,當然Oracle也可以通過Rman實現定時備份。我們大多數的時候是通過操作系統的計劃任務實現定時執行批處理。 但是當我們想要獲取相關執行細節,MSSQL的作業是一個很好的選擇。 具體方案 首先我們需要... ...
  • I/O: 系統設定 預設輸入設備:標準輸入,STDIN,0 預設輸出設備:標準輸出,STDOUT,1 標準錯誤輸出:STDERR,2 屬於不同的數據流 標準輸入:鍵盤 標準輸出和錯誤輸出:顯示器 I/O重定向: 輸出重定向: > :覆蓋輸出 >> :追加輸出 2>:錯誤輸出 2>>:追加錯誤輸出 正 ...
  • Nginx("engine x")是一款輕量級的HTTP和反向代理伺服器。相比於Apache、lighttpd等,它具有占有記憶體少、併發能力強、穩定性高等優勢。它最常見的用途就是提供反向代理服務。 在Linux下我們需要下載Nginx的源代碼包並且手動編譯,而不是用包管理工具,例如Yum、Aptit ...
  • 一、在伺服器上打開 22、80、9011埠: iptables -A INPUT -p tcp --dport 9011 -j ACCEPT iptables -A OUTPUT -p tcp --sport 9011 -j ACCEPT iptables -A INPUT -p tcp --dp ...
  • 本來是開始分析uboot代碼的,但是無論是教材還是網上資料都對於我最新下的 uboot原碼結構不同,對於還是小白的我不容易找到相應的文件,下麵是uboot版本中文件組織結構的改變,,,,, u-boot版本情況 網站:http://ftp.denx.de/pub/u-boot/ 1、版本號變化: 2 ...
  • Linux系統實戰項目——sudo日誌審計 由於企業內部許可權管理啟用了sudo許可權管理,但是還是有一定的風險因素,畢竟運維、開發等各個人員技術水平、操作習慣都不相同,也會因一時失誤造成誤操作,從而影響系統運行 因此,徵對sudo提權的操作,便於管理與後續維護,開啟sudo日誌審計功能對用戶執行 su ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...