日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux Shell——函数的使用

發布時間:2023/12/1 linux 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux Shell——函数的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文/一介書生,一枚碼農。

scripts are for lazy people.

函數是存在內存里的一組代碼的命名的元素。函數創建于腳本運行環境之中,并且可以執行。
函數的語法結構為:

function <function-name> {<code to execute> }

創建函數不需要do或 done這些關鍵字,只需要大括號來界定函數的作用范圍。
我們可以在命令行中創建一個簡單的函數:

function show_system {echo "The uptime is:"uptimeechoecho "Current dir:"pwdechoecho "Date:"date }

在命令行定義上面的函數:

然后執行函數:

最后,我們可以使用type命令查看函數的定義:

方法可以有傳遞的參數。在此之前,我們先簡單介紹 sed命令,下面的腳本用來移除文件中的注釋行和空白行。

sed -i.bak '/^\s*#/d;/^$/d' <filename>

詳細介紹一下上面的腳本:

  • sed -i.bak:sed 命令會創建一個以.bak結尾的備份文件,用來備份原始的文件。
  • /^:表示行首。
  • \s*:匹配任何不可見字符,包括空格、制表符、換頁符等。
  • #/:shell 腳本中的注釋標記。/^\s*#/一起使用用來查找注釋行和帶有不可見字符的注釋行。
  • d:用來刪除匹配的行。
  • ;/^$/d:;是表達式的分隔符,后面的表達式跟前面的表達式意思很像,用來刪除空白行, "$"匹配輸入字符串的結束位置。

我們把上面的腳本移到函數中,創建一個名為clean_file的函數:

function clean_file {sed -i.bak '/^\s*#/d;/^$/d' "$1" }

上面的代碼中,我們使用位置參數$1來接收命令行里傳遞的參數,需要注意的是$1 用大括號來括起來。

下面,我們完善clean_file方法,新建一個腳本文件 clean.sh。代碼如下:

#!/bin/bash # Script will prompt for filename # And remove commented and blank linesfunction is_file {if [ ! -f "$1" ] ; thenecho "$1 does not seem to be a file"exit 2fi }function clean_file {is_file "$1"BEFORE=$(wc -l "$1")echo "The file $1 starts with $BEFORE"sed -i.bak '/^\s*#/d;/^$/d' "$1"AFTER=$(wc -l "$1")echo "The file $1 is now $AFTER" }read -p "Enter a file to clean: " clean_file "$REPLY" exit 1

其中,wc -l命令用來打印文件行數。
現在,我們新建一個用來測試的文件 test.txt,里面隨便寫些內容:

# This file is just for testing.Hello.World.# new comment.$The end.

在 test 文件所在的目錄下,執行 clean.sh腳本:

然后查看 test 文件和 test.bak 文件,發現空白行和注釋行已經刪除。

這里需要注意的是,shell 腳本是從上至下來執行的,如果在一個函數中調用了另一個函數,那么被調用的函數要定義在調用函數的前面。

當然,除了函數可以傳遞參數外,還可以有返回值。默認情況下,在執行完函數內的最后一行代碼后,方法會返回一個狀態的數字,你可以使用$?變量來查看函數執行的狀態。如果返回值為0,表示方法正常退出,非0表示程序發生錯誤或其他非正常退出。
我們使用return關鍵字來返回一個整數。這里需要注意兩點:

  • 函數一旦執行完就會返回狀態代碼。
  • 狀態代碼的范圍為0到255。

如果不想返回函數的狀態代碼,而是想返回一個字符串或是其他類型,可以使用 echo 變量的方式來返回值。

下面創建腳本文件 translate.sh,用來把文件中的大寫字符轉換為小寫字符:

#!/bin/bash # Script that translates upper letter to low letterfunction to_lower () {input="$1"output=$(tr '[A-Z]' '[a-z]' <<< "$input")echo $output }while true doread -p "Enter c to continue or q to exit: "result=$(to_lower $REPLY)echo "After translate: $result"if [ $result = "q" ] ; thenbreakfidone echo "Finished"

代碼會把輸入的大寫字符變成小寫字符,當輸入"Q"或"q"時程序退出。

轉載于:https://www.cnblogs.com/IcanFixIt/p/6796453.html

總結

以上是生活随笔為你收集整理的Linux Shell——函数的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。