shell腳本返回值問題


如果學習過高級語言比如java和c語言等,此時你要是獲取一個函數的返回值,直接在函數里面寫上return即可,然后在函數執行時將返回結果賦值給某個變量即可。但是在shell腳本中限制較多,因此如果我們想實現這樣的功能的話,稍微困難一些,本人在實踐中做了一些該方面的實驗,並做筆記分享。

shell腳本的返回值可以使用return參數,但是return只能返回整數類型的值。因此實現比較復雜的功能的話shell腳本可能不太友好。

比如下面這個例子:

#!/bin/bash
function in_path(){
        cmd=$1
        path=$2
        oldIFS=$IFS
        IFS=":"
        retval=1
        for directory in $path
        do
         if [ -x $directory/$cmd ];then
                return 0
         fi
        done
        IFS=$oldIFS
        return 1
}
in_path ls $PATH
if [ $? -eq 0 ];then
  echo "yes"
else
  echo "no"
fi

這個腳本實現的功能是在PATH環境變量中查找ls命令是否存在且可執行,如果是,就返回0,否則就返回1。返回0表示為真,此時if語句判斷為真的話輸出yes,為0的話輸出no。

有時候希望實現的功能是返回一些其他類型的變量值,比如字符串等等,此時我們在shell腳本中就不能再使用return關鍵字了,可以這么寫。

#!/bin/bash
function in_path(){
        cmd=$1
        path=$2
        oldIFS=$IFS
        IFS=":"
        retval=1
        for directory in $path
        do
         if [ -x $directory/$cmd ];then
                echo yes
         fi
        done
        IFS=$oldIFS
        echo no
}
aa=$(in_path $1 $PATH)
if [[ $aa =~ "yes" ]];then
        echo "the path has this bianliang"
else
        echo "no no no"
fi

這也是一種實現獲取返回值結果的功能,還是挺好用的。但是如果你要是把if語句替換成case語句使用的話,那么函數中的echo語句和return語句返回的這個邏輯要明白的,和return不一樣的,比如:

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM