国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Linux【腳本 04】Shell腳本傳遞參數(shù)的4種方式(位置參數(shù)、特殊變量、環(huán)境變量和命名參數(shù))實(shí)例說(shuō)明

這篇具有很好參考價(jià)值的文章主要介紹了Linux【腳本 04】Shell腳本傳遞參數(shù)的4種方式(位置參數(shù)、特殊變量、環(huán)境變量和命名參數(shù))實(shí)例說(shuō)明。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Shell腳本是一種命令語(yǔ)言,可以用于自動(dòng)化執(zhí)行各種任務(wù)。在腳本中,我們可以通過(guò)參數(shù)來(lái)傳遞信息,這樣腳本就可以根據(jù)這些信息來(lái)執(zhí)行特定的操作。本文將介紹如何在shell腳本中傳遞參數(shù),包括位置參數(shù)、特殊變量、環(huán)境變量和命名參數(shù)。

1.Shell基礎(chǔ)知識(shí)

1.1 解釋器

#!/bin/bash 稱為shebang或sha-bang、hashbang。是一個(gè)特殊的字符序列,由井號(hào)“#”和嘆號(hào)“!”組成,放在腳本文件的第一行開(kāi)頭。在Linux和類Unix操作系統(tǒng)中,這個(gè)字符序列用于指定腳本文件的解釋器路徑。當(dāng)一個(gè)腳本文件的第一行包含了shebang,操作系統(tǒng)在執(zhí)行該文件時(shí)會(huì)將該路徑后的所有參數(shù)傳遞給指定的解釋器,讓它來(lái)解釋執(zhí)行該腳本。

當(dāng)系統(tǒng)運(yùn)行一個(gè)腳本時(shí),首先會(huì)檢查腳本的shebang行,然后找到指定的解釋器,并把腳本傳遞給它執(zhí)行。如果shebang行不存在或格式不正確,系統(tǒng)會(huì)將腳本視為普通文本文件,并無(wú)法執(zhí)行腳本。常見(jiàn)的解釋器包括Bash shell、Python、Perl等,可以使用對(duì)應(yīng)的路徑來(lái)指定解釋器。例如,#!/usr/bin/python 表示使用Python解釋器來(lái)執(zhí)行腳本。

如果一個(gè)文件沒(méi)有shebang行,系統(tǒng)就不知道用哪個(gè)解釋器來(lái)執(zhí)行它。此時(shí),如果這個(gè)文件具有可執(zhí)行權(quán)限(例如755),系統(tǒng)會(huì)把它作為一個(gè)shell腳本來(lái)執(zhí)行,使用的是默認(rèn)的shell解釋器(在大多數(shù)Unix/Linux系統(tǒng)中,這是Bash shell)。

Shell腳本是一種編程語(yǔ)言,可以用于在Unix/Linux系統(tǒng)上編寫(xiě)自動(dòng)化任務(wù),批量處理數(shù)據(jù),系統(tǒng)管理等。下面是Shell腳本的基礎(chǔ)知識(shí):

1.2 變量

用于存儲(chǔ)數(shù)據(jù),可以使用=來(lái)賦值,例如name="kite"。

1.3 參數(shù)

Shell腳本可以接收命令行傳入的參數(shù),使用$1$2等變量來(lái)引用,例如$1表示第一個(gè)參數(shù)。這部分第二章會(huì)詳細(xì)舉例。

1.4 條件語(yǔ)句

使用if語(yǔ)句來(lái)實(shí)現(xiàn)條件判斷,例如:

# 腳本內(nèi)容script.sh【使用位置參數(shù)】
#!/bin/bash
if [ $1 -gt 18 ]; then
    echo "You are an adult."
else
    echo "You are not an adult yet."
fi
# 腳本調(diào)用
./script.sh 19

1.5 循環(huán)語(yǔ)句

使用forwhile語(yǔ)句來(lái)實(shí)現(xiàn)循環(huán),例如:

# for語(yǔ)句
for i in 1 2 3 4 5; do
    echo $i
done

# while語(yǔ)句【使用了變量】
i=0
while [ $i -lt 10 ]; do
    echo $i
    i=$((i+1))
done

1.6 函數(shù)

使用function()定義函數(shù),例如:

# 注意函數(shù)的定義和調(diào)用都是在腳本內(nèi)部的
function sayHi {
    echo "Hello, $1!"
}
sayHi "Kite"

1.7 輸入輸出

使用echo命令輸出文本,使用read命令讀取用戶輸入,例如:

# read 命令會(huì)等待輸入
echo "What's your name?"
read name
echo "Hello, $name!"

1.8 命令執(zhí)行

使用反引號(hào)或美元符來(lái)執(zhí)行命令,并將結(jié)果賦值給變量,例如:

today=`date +%Y-%m-%d`
echo "Today is $today"

1.9 運(yùn)算符

Shell腳本支持算術(shù)運(yùn)算、字符串運(yùn)算和邏輯運(yùn)算,例如:

# 算術(shù)運(yùn)算
num=$((1+2))
echo $num

# 字符串運(yùn)算
if [ "$name" == "John" ]; then
    echo "Hello, John!"
fi

# 邏輯運(yùn)算
if [ $age -gt 18 ] && [ $gender == "male" ]; then
    echo "You are a man."
fi

以上是Shell腳本的基礎(chǔ)知識(shí),掌握了這些知識(shí)可以編寫(xiě)簡(jiǎn)單的腳本來(lái)自動(dòng)化執(zhí)行任務(wù),進(jìn)一步學(xué)習(xí)可以掌握Shell腳本的高級(jí)用法,例如正則表達(dá)式、管道、重定向、進(jìn)程控制等。

2. 參數(shù)傳遞

2.1 位置參數(shù)

在shell腳本中,可以使用位置參數(shù)來(lái)傳遞信息。可以使用$1、$2、$3等來(lái)訪問(wèn)它們。例如:

#!/bin/bash
echo "The first argument is $1"
echo "The second argument is $2"

在命令行中執(zhí)行該腳本時(shí),可以傳遞兩個(gè)參數(shù),如下所示:

$ ./script.sh hello world

輸出:

The first argument is hello
The second argument is world

2.2 特殊變量

shell提供了許多特殊變量來(lái)傳遞額外的信息,例如:

  • $0:表示腳本名稱。
  • $#:表示傳遞給腳本的參數(shù)個(gè)數(shù)。
  • $@:表示所有傳遞給腳本的參數(shù)的列表。
  • $?:表示上一個(gè)命令的返回值。

這也解釋了為什么位置參數(shù)是從1開(kāi)始的了,$0經(jīng)常用在日志里,說(shuō)明當(dāng)前執(zhí)行的腳本名稱。

例如:

#!/bin/bash
echo "The script name is $0"
echo "The number of arguments is $#"
echo "The arguments are $@"
echo "The return value of the last command is $?"

在命令行中執(zhí)行該腳本時(shí),可以傳遞任意個(gè)數(shù)的參數(shù),如下所示:

$ ./script.sh a b c

輸出:

The script name is ./script.sh
The number of arguments is 3
The arguments are a b c
The return value of the last command is 0

2.3 環(huán)境變量

可以使用環(huán)境變量來(lái)傳遞信息。在shell腳本中,可以使用$VAR的形式來(lái)訪問(wèn)環(huán)境變量。例如:

#!/bin/bash
echo "The value of HOME is $HOME"
echo "The value of PATH is $JAVA_HOME"

在命令行中執(zhí)行該腳本時(shí),輸出環(huán)境變量的值,如下所示:

$ ./script.sh
The value of HOME is /root
The value of PATH is /usr/local/java/jdk1.8.0_241

在腳本里獲取環(huán)境變量,可對(duì)執(zhí)行環(huán)境進(jìn)行檢驗(yàn)。

2.4 命名參數(shù)

2.4.1 getopts

getopts是Bash shell自帶的命令行參數(shù)處理工具,它的語(yǔ)法比較簡(jiǎn)單,只支持處理單個(gè)字母選項(xiàng),例如-a、-b等。getopts只能處理短選項(xiàng),也就是只能使用一個(gè)字母來(lái)表示選項(xiàng),如果要處理長(zhǎng)選項(xiàng),需要編寫(xiě)更多的代碼。另外,getopts處理命令行參數(shù)時(shí)會(huì)把選項(xiàng)和參數(shù)分別處理,不能處理連續(xù)的選項(xiàng),例如-abc。

# 測(cè)試腳本
#!/bin/bash
while getopts n:a:g: opt
do 
	case "${opt}" in
		n) name=${OPTARG};;
		a) age=${OPTARG};;
		g) gender=${OPTARG};;
	esac
done
echo "NameVal: $name";
echo "AgeVal: $age";
echo "GenderVal: $gender";
# 腳本調(diào)用
./script.sh -n Kite -a 18 -g f
NameVal: Kite
AgeVal: 18
GenderVal: f
2.4.2 getopt

getopt是GNU工具集中的一個(gè)命令行參數(shù)處理工具,它支持更多的選項(xiàng)和語(yǔ)法,可以處理短選項(xiàng)和長(zhǎng)選項(xiàng),還可以處理連續(xù)的選項(xiàng)。getopt的語(yǔ)法比getopts更加復(fù)雜,需要指定一個(gè)選項(xiàng)字符串,包含了所有支持的選項(xiàng)和參數(shù)。getopt將解析后的選項(xiàng)和參數(shù)保存在一個(gè)數(shù)組中,需要在代碼中處理這個(gè)數(shù)組。

getopt命令有以下幾個(gè)參數(shù):

  • -o:指定單字符選項(xiàng)。選項(xiàng)之間無(wú)需分隔符。
  • --long:指定長(zhǎng)選項(xiàng)。長(zhǎng)選項(xiàng)之間使用逗號(hào)分隔。
  • ::選項(xiàng)后添加冒號(hào)說(shuō)明當(dāng)前選項(xiàng)需要參數(shù)值。
  • --:分割選項(xiàng)和參數(shù)。
  • "$@":表示將所有命令行參數(shù)作為一個(gè)字符串傳遞給getopt命令。

options=$(getopt -o n:a:g:p --long name:,age:,gender:,print -- "$@")會(huì)解析命令行選項(xiàng)和參數(shù),并將轉(zhuǎn)換后的選項(xiàng)和參數(shù)存儲(chǔ)在變量options中。這個(gè)變量通常會(huì)傳遞給一個(gè)eval命令進(jìn)行處理,例如:

eval set -- "$options"
# 測(cè)試腳本
#!/bin/bash
# 解析命令行參數(shù)
options=$(getopt -o n:a:g:p --long name:,age:,gender:,print -- "$@")
eval set -- "$options"

# 提取選項(xiàng)和參數(shù)
while true; do
  case $1 in 
  	-a | --age) shift; age=$1 ; shift ;;
    -n | --name) shift; name=$1 ; shift ;;
    -g | --gender) shift; gender=$1 ; shift ;;
    -p | --print) print=true; shift ;;
    --) shift ; break ;;
    *) echo "Invalid option: $1" exit 1 ;;
  esac
done

# 檢查變量
if [ -z "$age" ]; then
    echo "Error: age is required"
    exit 1
fi
if [ -z "$name" ]; then
    echo "Error: name is required"
    exit 1
fi
if [ -z "$gender" ]; then
    echo "Error: gender is required"
    exit 1
fi

# 判斷開(kāi)關(guān)選項(xiàng)
if [ "$print" = true ]; then
    echo "NameVal: $name; AgeVal: $age; GenderVal: $gender";
fi
# 腳本調(diào)用(長(zhǎng)選項(xiàng))
./script.sh --name Kite --age 18 --gender f -p
NameVal: Kite; AgeVal: 18; GenderVal: f
# 腳本調(diào)用(單字符選項(xiàng))
./script.sh -n Kite -a 18 -g f -p
NameVal: Kite; AgeVal: 18; GenderVal: f

3.總結(jié)

如果能夠靈活運(yùn)用shell腳本,也是很強(qiáng)大的。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-457768.html

到了這里,關(guān)于Linux【腳本 04】Shell腳本傳遞參數(shù)的4種方式(位置參數(shù)、特殊變量、環(huán)境變量和命名參數(shù))實(shí)例說(shuō)明的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Day6: Shell函數(shù)和參數(shù)傳遞

    學(xué)習(xí)目標(biāo) 學(xué)習(xí)內(nèi)容 1. 函數(shù)的定義和調(diào)用 2. 參數(shù)傳遞 3. 返回值 4. 練習(xí)任務(wù) 大樹(shù)哥個(gè)人信息 學(xué)習(xí)Shell中函數(shù)的概念和用法。 理解如何在函數(shù)中定義和調(diào)用命令序列。 掌握如何傳遞參數(shù)給函數(shù)并獲取返回值。 練習(xí)編寫(xiě)腳本,使用函數(shù)進(jìn)行模塊化編程。 今天我們將學(xué)習(xí)如何在

    2024年02月15日
    瀏覽(38)
  • bat 腳本-參數(shù)傳遞

    bat 腳本-參數(shù)傳遞

    結(jié)論: 參數(shù)長(zhǎng)度9個(gè)以內(nèi)不用特殊操作,超過(guò)9個(gè)時(shí)引用需要特殊操作(shift)。 參考: https://blog.csdn.net/xijinno1/article/details/129760609 引用變量用%var%,調(diào)用程序外部參數(shù)用%0至%9等等 %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %*為命令行傳遞給批處理的參數(shù) %0批處理文件本身,包括完整的路徑和擴(kuò)展名

    2024年02月03日
    瀏覽(24)
  • 【Python】函數(shù)進(jìn)階 ① ( 函數(shù)返回多個(gè)返回值 | 函數(shù)參數(shù)傳遞類型簡(jiǎn)介 | 位置參數(shù) | 關(guān)鍵字參數(shù) )

    在函數(shù)中 , 如果要 返回 多個(gè)返回值 , 可以 在 return 語(yǔ)句中 , 設(shè)置多個(gè)返回值 , 這些返回值之間使用 逗號(hào) 隔開(kāi) , 這些返回值的類型是 元組 tuple 類型的 ; 在下面的代碼中 , 返回了 3 個(gè)返回值 , 其 本質(zhì)上是返回了一個(gè)包含 3 個(gè)元素的 元組 數(shù)據(jù)容器 , 可以使用多重賦值將返回的

    2024年02月11日
    瀏覽(23)
  • Java參數(shù)傳遞方式詳解

    Java中參數(shù)傳遞的方式是什么樣的呢?是值傳遞還是引用傳遞呢? 答案是值傳遞。 為什么呢? 先來(lái)了解一些基礎(chǔ)。。。。。 Java中參數(shù)傳遞方式是值傳遞,且只有值傳遞,沒(méi)有引用傳遞。 JavaGuide Java值傳遞詳解

    2024年02月07日
    瀏覽(23)
  • shell腳本中main函數(shù)中$#獲取不到腳本傳入?yún)?shù)個(gè)數(shù)淺析

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

    2024年03月14日
    瀏覽(26)
  • Pytest fixture參數(shù)傳遞的4種方式

    最近使用Pytest中的fixture和conftest時(shí),遇到需要在conftest中的setup和teardown方法里傳遞參數(shù)。這里記錄以下4種實(shí)現(xiàn)的方式。 結(jié)果: 結(jié)果: 結(jié)果:

    2024年02月16日
    瀏覽(19)
  • 若依框架前后端各個(gè)請(qǐng)求方式參數(shù)傳遞示例

    封裝方法getBanner getBanner方法調(diào)用(customerBannerId是一個(gè)數(shù)字) 后端接口(@PathVariable 注解取得請(qǐng)求路徑中的參數(shù),注意此處的三個(gè)參數(shù)名要一致) 封裝方法getBanner getBanner 方法調(diào)用(customerBannerId是一個(gè)對(duì)象,這里屬性名與屬性值一致,簡(jiǎn)寫(xiě)) 后端接口(前端傳遞的對(duì)象的屬性

    2024年02月03日
    瀏覽(15)
  • 小程序跨頁(yè)面?zhèn)鬟f參數(shù)的幾種方式

    當(dāng)我們?cè)陂_(kāi)發(fā)小程序時(shí),經(jīng)常會(huì)遇到需要在不同頁(yè)面之間傳遞數(shù)據(jù)的情況。為了實(shí)現(xiàn)頁(yè)面間的數(shù)據(jù)傳遞,小程序提供了多種方法。下面將介紹幾種常用的傳遞數(shù)據(jù)的方法。 URL參數(shù)傳遞:這是一種簡(jiǎn)單直接的傳遞數(shù)據(jù)的方式。在跳轉(zhuǎn)頁(yè)面時(shí),可以在URL中添加參數(shù)來(lái)傳遞數(shù)據(jù)。在

    2024年02月08日
    瀏覽(33)
  • python中的形參和實(shí)參以及參數(shù)傳遞方式

    在編程語(yǔ)言中,函數(shù)定義時(shí)用的是形參,調(diào)用時(shí)用的是實(shí)參。 形參,全稱為\\\"形式參數(shù)\\\",不是實(shí)際存在的變量,又稱虛擬變量。形參是在定義函數(shù)名和函數(shù)體的時(shí)候使用的參數(shù), 目的是用來(lái)接收調(diào)用該函數(shù)時(shí)傳入的參數(shù) 。 實(shí)參,全稱為\\\"實(shí)際參數(shù)\\\",是在調(diào)用時(shí)傳遞給函數(shù)的

    2024年02月02日
    瀏覽(23)
  • axios 傳遞參數(shù)的方式(data 與 params)

    axios 傳遞參數(shù)的方式(data 與 params)

    提示:這里可以添加系列文章的所有文章的目錄,目錄需要自己手動(dòng)添加 工作案例:在 vue 項(xiàng)目使用 axios 傳遞參數(shù)的方式(data 與 params) 提示:寫(xiě)完文章后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔 提示:這里可以添加本文要記錄的大概內(nèi)容: 工作中,用到的傳遞

    2024年04月17日
    瀏覽(16)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包