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

歡迎訪問 生活随笔!

生活随笔

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

linux

你该认识这样的Linux_shell函数使用案例

發布時間:2024/9/27 linux 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 你该认识这样的Linux_shell函数使用案例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Linux shell之函數

聲明與簡介

Shell是系統的用戶界面,它提供了用戶跟內核進行交互的橋梁。Shell是一個命令解釋器,它接收用戶輸入的命令并送到內核去執行。

本文主要介紹Shell里函數的常見使用方法。

使用函數

函數概述

函數shell腳本執行時的代碼塊,它實際上為了完成特定任務而構建出來的命令集。比如我們之前介紹的代碼段可以定義在一個函數里,方面重復調用。

# 編寫函數,讀取當前文件pip_3.txt里的每一行內容并顯示行號。 #!/bin/bash getcontent() { local num=0 while read line do let num++ echo -e "文件$file的第$num行是:\t$line" done < ./pip_3.txt } getcontent#調用及結果 ./shell_ifs.sh 文件的第1行是: Package Version 文件的第2行是: attrs 19.3.0 文件的第3行是: Automat 0.8.0 文件的第4行是: boto3 1.10.28

定義和使用參數

#編寫函數,讀取當前文件指定文件里的每一行內容并顯示行號。 #!/bin/bash getcontent() { local num=0 while read line do let num++ echo -e "文件$file的第$num行為:\t$line" done < $file } file=$1 getcontent#調用及結果 ./shell_ifs.sh pip_3.txt 文件的第1行是: Package Version 文件的第2行是: attrs 19.3.0 文件的第3行是: Automat 0.8.0 文件的第4行是: boto3 1.10.28

返回控制

#編寫函數,讀取當前文件指定文件里的每一行內容并顯示行號。這里讀取到第3行即截止。 getcontent() { local num=0 while read line do let ++num; echo -e "文件$file的第$num行是:\t$line"; if ([ $num -eq 3 ]);then #if (($num -eq 3));then echo "結束在第三行" return fi done < $file } file=$1 getcontent#調用及結果 ./shell_ifs.sh pip_3.txt 文件的第1行是: Package Version 文件的第2行是: attrs 19.3.0 文件的第3行是: Automat 0.8.0 文件的第4行是: boto3 1.10.28注:1 這里算數比較時如果用-eq方式,則中括號“[、]”兩邊都得有空格。 2 shell的if判斷需要兩個括號。

返回值結合判斷

#對文件行數遍歷,超過4行的打印行數并提示超過,反之則反。 #!/bin/bash getcontent() { local num=0 while read line do let ++num; done < $1 echo $num return $num } #result=0 result=$(getcontent $1) if (( $result > 4 ));then echo "當前$result行超過4行" else echo "當前$result行小于等于4行" fi#執行及結果 ./del.sh pip_3.txt 當前4行小于等于4行 ./del.sh emp.txt 當前18行超過4行

局部變量

# 通過局部變量方式訪問文件。這里定義file變量為局部變量。#!/bin/bash getcontent() { local num=0 local file=$1 while read line do let ++num; echo -e "文件$file的第$num行是:\t$line"; if ([ $num -eq 3 ]);then #if (($num -eq 3));then echo "結束在第三行" return fi done < $file } getcontent $1# 調用及結果 ./shell_ifs.sh pip_3.txt文件的第1行是: Package Version 文件的第2行是: attrs 19.3.0 文件的第3行是: Automat 0.8.0 文件的第4行是: boto3 1.10.28

函數式環境變量

我們知道環境變量一般是預定義的值,比如$JAVA_HOME。而函數也是可以定義在環境變量里的。

# 將獲取文件行和內容的函數定義在環境變量里,直接在shell里輸入函數的整體內容。 # Step1 定義函數 getfilecontent() > { > local num=0 > while read line > do > let ++num; > echo -e "文件$file的第$num行是:\t$line"; > if ([ $num -eq 3 ]);then > echo "結束在第三行" > return > fi > done < $1 > }# Step2定義函數環境變量 export -f getfilecontent# Step3 子shell調用,比如在another.sh里定義如下: #!/bin/bash getfilecontent emp.txt#結果 ./another.sh文件的第1行是: 7369,smith,clerk,7902,'1980-12-17',800,null,20 文件的第2行是: 7499,allen,salesman,7698,'1981-2-20',1600,300,30 文件的第3行是: 7521,ward,salesman,7698,'1981-2-22',1250,500,30 結束在第三行延展: 1 這種函數式環境變量僅在定義的shell內有效,其它shell無效。 ./ another.sh:行3: getfilecontent: 未找到命令2 取消函數式環境變量的定義可通過unset命令 unset -f getfilecontent如果再次執行之前的shell則會報如下錯: ./del.sh:行3: getfilecontent: 未找到命令3 查看函數式環境變量的定義,可通過env命令查看:

變量范圍

# 局部變量僅作用于函數內,如果與全局變量重名,那么在函數內以局部變量為準。如下是示例代碼。num既定義為全局變量又定義為局部變量,而函數體內以局部變量為準。getfilecontent() { local num=0 echo -e "num的值:\t $num" #local file=$1 while read line do let ++num; echo -e "文件$file的第$num行是:\t$line"; if ([ $num -eq 3 ]);then #if (($num -eq 3));then echo "結束在第三行" return fi done < $filename } filename=$1 num=10 getfilecontent echo -e "num的值:\t $num"#調用及結果 ./shell_ifs.sh emp.txt num的值: 0 文件的第1行是: 7369,smith,clerk,7902,'1980-12-17',800,null,20 文件的第2行是: 7499,allen,salesman,7698,'1981-2-20',1600,300,30 文件的第3行是: 7521,ward,salesman,7698,'1981-2-22',1250,500,30 結束在第三行 num的值: 10

位置參數

位置參數即按照函數從左到右的順序傳遞參數,一般有$1到$10,10個參數,如果超過10個,用${n}來代替,可通過循環遍歷。

#位置參數的例子,見 #!/bin/bash getfilecontent() { local num=0 while read line do let ++num; echo -e "文件$file的第$num行是:\t$line"; if ([ $num -eq 3 ]);then echo "結束在第三行" return fi done < $1} getfilecontent $1#調用及結果 ./shell_ifs.sh demo.txt 文件的第1行是: 1 name 文件的第2行是: 2 addr 文件的第3行是: 3 school 結束在第三行

SET內置參數

#通過set設置內置參數#!/bin/bash getfilecontent() { set ./demo.txt 2 local num=0 while read line do let ++num; echo -e "文件$file的第$num行是:\t$line"; if ([ $num -eq $2 ]);then echo "結束在第$2行" return fi done < $1 } num=10 getfilecontent $1 $2#調用與結果,未指定任何參數,使用內置的值。./shell_ifs.sh 文件的第1行是: 1 name 文件的第2行是: 2 addr 結束在第2行

遞歸調用

遞歸是一種函數的返回值作為輸入反復調用的一種特殊函數。

#計算一個數的累加值。 #!/bin/bash cal_add(){ if [ $1 -eq 1 ] then echo 1 else local tmp=$(( $1 -1 )) local result=$(cal_add $tmp) echo $(( $result + $1 )) fi } read -p "請輸入一個數:" num f=$(cal_add $num) echo -e "數$num的累加值:\t $f"#執行及結果 ./accuadd.sh 請輸入一個數:3 數3的累加值: 6

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的你该认识这样的Linux_shell函数使用案例的全部內容,希望文章能夠幫你解決所遇到的問題。

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