最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

shell腳本中main函數(shù)中$#獲取不到腳本傳入?yún)?shù)個(gè)數(shù)淺析

 更新時(shí)間:2024年03月18日 10:58:24   作者:瀟湘隱者  
Linux的shell腳本,有時(shí)候我們在運(yùn)行shell腳本時(shí)會(huì)給腳本傳入?yún)?shù),出于邏輯上的嚴(yán)謹(jǐn),在腳本中可能會(huì)做一些邏輯判斷或處理,例如判斷腳本傳入?yún)?shù)的個(gè)數(shù),這篇文章主要介紹了shell腳本中main函數(shù)中$#獲取不到腳本傳入?yún)?shù)個(gè)數(shù)淺析,需要的朋友可以參考下

Linux的shell腳本,有時(shí)候我們在運(yùn)行shell腳本時(shí)會(huì)給腳本傳入?yún)?shù),出于邏輯上的嚴(yán)謹(jǐn),在腳本中可能會(huì)做一些邏輯判斷或處理,例如判斷腳本傳入?yún)?shù)的個(gè)數(shù)。一般我們會(huì)用$#獲取傳入?yún)?shù)的個(gè)數(shù),假如,我們在shell腳本的main函數(shù)中去判斷腳本傳入?yún)?shù)的個(gè)數(shù),類似如下所示:

.........
function main()
{
    if [ $# != 1 ]; then
      echo "This script must be run with one parameter"
      echo "Usage:mysql_slowlog_monitor.sh 6h"
      exit 1
    fi
    check_enviroment;
    send_slow_rpt;
    return 0;
}
main;

如果你去調(diào)試這個(gè)shell腳本的話,就會(huì)發(fā)現(xiàn)main函數(shù)中$#的值永遠(yuǎn)是0, 如果將腳本調(diào)整一下,將判斷傳入?yún)?shù)個(gè)數(shù)的腳本放到main函數(shù)外(不能放在其它函數(shù)中),如下所示,這樣就Ok了

.............
if [ $# != 1 ]; then
  echo "This script must be run with one parameter"
  echo "Usage:mysql_slowlog_monitor.sh 6h"
  exit 1
fi
.............
function main()
{
    check_enviroment;
    send_slow_rpt;
    return 0;
}
main;

那么為什么會(huì)出現(xiàn)這種情況呢?在解答這個(gè)問題前,我們先來了解一下$#的用途,$#表示腳本傳入?yún)?shù)的個(gè)數(shù),也表示一個(gè)函數(shù)(function)調(diào)用時(shí),傳入函數(shù)的參數(shù)(arguments)個(gè)數(shù),而且它也是有作用域范圍,如果在函數(shù)(function)內(nèi)部的話,它表示的函數(shù)調(diào)用時(shí),傳入?yún)?shù)的個(gè)數(shù)。

那么再來解答這個(gè)問題,上面shell腳本中,main函數(shù)調(diào)用時(shí)寫法為main;意味著函數(shù)調(diào)用時(shí)沒有傳入任何參數(shù),所以$#在main中值為0,而在腳本mysql_slowlog_monitor.sh中獲取傳入的參數(shù)個(gè)數(shù),應(yīng)該在腳本中,而且在腳本中的函數(shù)外面獲取它的值。

那么怎么解決這個(gè)問題呢?

解決方案1:

將判斷腳本調(diào)用時(shí)傳入的參數(shù)的腳本放到函數(shù)外面,就像上面示例腳本那樣處理。

解決方案2:

借助全局變量,先在函數(shù)外獲取腳本傳入?yún)?shù)的個(gè)數(shù),將其賦值為全局變量,然后在mian函數(shù)中,進(jìn)行邏輯判斷和處理。

.............
ARGS=$#
.............
function main()
{
    if [ $ARGS != 1 ]; then
      echo "This script must be run with one parameter"
      echo "Usage:mysql_slowlog_monitor.sh 6h"
      exit 1
    fi
    check_enviroment;
    send_slow_rpt;
    return 0;
}
main;

到此這篇關(guān)于shell腳本中main函數(shù)中$#獲取不到腳本傳入?yún)?shù)個(gè)數(shù)淺析的文章就介紹到這了,更多相關(guān)shell腳本傳入?yún)?shù)個(gè)數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

九台市| 邵武市| 山西省| 轮台县| 大厂| 金阳县| 永吉县| 沁水县| 长寿区| 志丹县| 昭通市| 宜兰县| 台北县| 彩票| 霍山县| 清水河县| 阿合奇县| 绥江县| 合江县| 洞口县| 榕江县| 精河县| 颍上县| 龙泉市| 南宫市| 平南县| 航空| 那曲县| 濮阳市| 神池县| 阿勒泰市| 莲花县| 凤山县| 鲁山县| 肇庆市| 太仆寺旗| 泗洪县| 新疆| 永靖县| 开化县| 香格里拉县|