如何在bash中使用變數

如果您想編寫指令碼並理解要從web上剪下和貼上的程式碼對Linux計算機的影響,那麼變數是至關重要的。我們會讓你開始的!...

如果您想編寫指令碼並理解要從web上剪下和貼上的程式碼對Linux計算機的影響,那麼變數是至關重要的。我們會讓你開始的!

變數101

變數是表示字串或數值的命名符號。當您在命令和表示式中使用它們時,它們將被視為您鍵入了它們所包含的值,而不是變數的名稱。

要建立變數,只需為其提供名稱和值。變數名應該是描述性的,並提醒您它們所具有的值。變數名不能以數字開頭,也不能包含空格。但是,它可以以下劃線開頭。除此之外,您還可以使用任何大小寫字母數字字元的組合。

示例

在這裡,我們將建立五個變數。格式是鍵入名稱、等號和值。注意等號前後沒有空格。給變數賦值通常被稱為給變數賦值。

今年,我們將建立四個字串變數和一個數字變數:

me=Dave my_boost=Linux him=Popeye his_boost=Spinach this_year=2019

如何在bash中使用變數

要檢視儲存在變數中的值,請使用echo命令。每當引用變數名包含的值時,必須在變數名前面加上美元符號$,如下所示:

echo $my_name echo $my_boost echo $this_year

如何在bash中使用變數

讓我們同時使用所有變數:

echo "$my_boost is to $me as $his_boost is to $him (c) $this_year"

如何在bash中使用變數

變數的值替換它們的名稱。也可以更改變數的值。要給變數myu boost賦值,只需重複賦值時的操作,如下所示:

my_boost=Tequila

如何在bash中使用變數

如果重新執行上一個命令,現在會得到不同的結果:

echo "$my_boost is to $me as $his_boost is to $him (c) $this_year"

如何在bash中使用變數

因此,可以使用引用相同變數的相同命令,如果更改變數中的值,則會得到不同的結果。

稍後我們將討論引用變數。現在,請記住以下幾點:

  • 單引號中的變數被視為文字字串,而不是變數。
  • “引號中的變數”被視為變數。
  • 要獲取變數中的值,必須提供美元符號$。
  • 沒有美元符號$的變數只提供變數的名稱。

如何在bash中使用變數

還可以建立一個變數,該變數的值來自現有變數或多個變數。下面的命令定義了一個名為drink\u of \u The \u Year的新變數,並將my\u boost和this\u Year變數的組合值賦給它:

drink_of-the_Year="$my_boost $this_year" echo drink_of_the-Year

如何在bash中使用變數

如何在指令碼中使用變數

如果沒有變數,指令碼將完全無法執行。變數提供了靈活性,使指令碼成為通用的解決方案,而不是特定的解決方案。為了說明這一區別,這裡有一個指令碼對/dev目錄中的檔案進行計數。

將其鍵入文字檔案,然後另存為fcnt.sh公司(對於“檔案計數”):

#!/bin/bash folder_to_count=/dev file_count=$(ls $folder_to_count | wc -l) echo $file_count files in $folder_to_count

在執行指令碼之前,必須使其可執行,如下所示:

chmod +x fcnt.sh

如何在bash中使用變數

鍵入以下內容以執行指令碼:

./fcnt.sh

如何在bash中使用變數

這將列印/dev目錄中的檔案數。其工作原理如下:

  • 定義了一個名為folder\ to\ count的變數,並將其設定為儲存字串“/dev”
  • 定義了另一個變數,稱為file\u count。此變數的值來自命令替換。這是括號$()之間的命令短語。注意在第一個括號前有一個美元符號$。這個構造$()計算括號內的命令,然後返回它們的最終值。在本例中,該值被分配給file\u count變數。就file\u count變數而言,它傳遞了一個要儲存的值;它不關心該值是如何獲得的。
  • 在命令替換中計算的命令在資料夾\u to \u count變數中的目錄上執行ls檔案列表,該變數已設定為“/dev”。因此,指令碼執行命令“ls/dev”
  • 此命令的輸出透過管道傳輸到wc命令。l(行計數)選項使wc計算ls命令輸出中的行數。由於每個檔案都列在單獨的一行中,因此這是“/dev”目錄中檔案和子目錄的計數。此值被分配給file\u count變數。
  • 最後一行使用echo輸出結果。

但這隻適用於“/dev”目錄。如何使指令碼與任何目錄一起工作?只需要一點零錢。

如何在指令碼中使用命令列引數

許多命令(如ls和wc)採用命令列引數。它們向命令提供資訊,以便它知道您希望它做什麼。如果希望ls在主目錄上工作並顯示隱藏檔案,可以使用以下命令,其中tilde~和-a(all)選項是命令列引數:

ls ~ -a

我們的指令碼可以接受命令列引數。第一個引數引用為$1,第二個引數引用為$2,依此類推,第九個引數引用為$9。(實際上,還有一個0美元,但這是保留的,以便始終儲存指令碼。)

可以在指令碼中引用命令列引數,就像引用常規變數一樣。讓我們修改指令碼,如下所示,並使用新名稱fcnt2.sh儲存它:

#!/bin/bash folder_to_count=$1 file_count=$(ls $folder_to_count | wc -l) echo $file_count files in $folder_to_count

這一次,folder_to_count變數被分配了第一個命令列引數$1的值。

指令碼的其餘部分和以前完全一樣。您的指令碼現在是通用的,而不是特定的解決方案。您可以在任何目錄上使用它,因為它不是硬編碼的,只能與“/dev”一起使用

下面是如何使指令碼可執行的:

chmod +x fcnt2.sh

如何在bash中使用變數

現在,用幾個目錄試試。您可以先執行“/dev”以確保得到與以前相同的結果。鍵入以下內容:

./fnct2.sh /dev ./fnct2.sh /etc ./fnct2.sh /bin

如何在bash中使用變數

對於“/dev”目錄,您將得到與之前相同的結果(207個檔案)。這是令人鼓舞的,對於其他每個命令列引數,都會得到特定於目錄的結果。

為了縮短指令碼,您可以省去變數folder\u To\u count,整個過程只引用$1,如下所示:

#!/bin/bash file_count=$(ls $1 wc -l) echo $file_count files in $1

使用特殊變數

我們提到了$0,它總是設定為指令碼的檔名。這允許您使用指令碼來執行諸如正確列印其名稱之類的操作,即使它已重新命名。這在日誌記錄情況下很有用,在這種情況下,您需要知道添加了條目的程序的名稱。

以下是其他特殊預設變數:

  • $#:傳遞給指令碼的命令列引數數。
  • $@:傳遞給指令碼的所有命令列引數。
  • $?:要執行的最後一個程序的退出狀態。
  • $$:當前指令碼的程序ID(PID)。
  • $USER:執行指令碼的使用者的使用者名稱。
  • $HOSTNAME:執行指令碼的計算機的主機名。
  • $SECONDS:指令碼已執行的秒數。
  • $RANDOM:返回一個隨機數。
  • $LINENO:返回指令碼的當前行號。

你想在一個劇本里看到所有這些,是嗎?你可以!將以下內容另存為名為,特殊.sh:

#!/bin/bash echo "There were $# command line parameters" echo "They are: $@" echo "Parameter 1 is: $1" echo "The script is called: $0" # any old process so that we can report on the exit status pwd echo "pwd returned $?" echo "This script has Process ID $$" echo "The script was started by $USER" echo "It is running on $HOSTNAME" sleep 3 echo "It has been running for $SECONDS seconds" echo "Random number: $RANDOM" echo "This is line number $LINENO of the script"

鍵入以下內容使其可執行:

chmod +x special.sh

如何在bash中使用變數

現在,您可以使用一系列不同的命令列引數來執行它,如下所示。

如何在bash中使用變數

環境變數

Bash使用環境變數來定義和記錄它在啟動時建立的環境的屬性。這些儲存資訊Bash可以隨時訪問,例如您的使用者名稱、區域設定、歷史檔案可以儲存的命令數、預設編輯器等等。

要檢視Bash會話中的活動環境變數,請使用以下命令:

env | less

如何在bash中使用變數

如果您在列表中滾動,您可能會找到一些有用的指令碼參考。

如何在bash中使用變數

如何匯出變數

當一個指令碼執行時,它在自己的程序中,並且它使用的變數在該程序之外是看不到的。如果要與指令碼啟動的另一個指令碼共享一個變數,則必須匯出該變數。我們將用兩個指令碼向您展示如何實現這一點。

首先,用檔名指令碼儲存以下內容_一個.sh:

#!/bin/bash first_var=alpha second_var=bravo # check their values echo "$0: first_var=$first_var, second_var=$second_var" export first_var export second_var ./script_two.sh # check their values again echo "$0: first_var=$first_var, second_var=$second_var"

這將建立兩個變數,第一個變數和第二個變數,並分配一些值。它將這些輸出到終端視窗,匯出變數,並呼叫指令碼_兩個.sh.When指令碼_兩個.sh終止,並且程序流返回到此指令碼,它再次將變數列印到終端視窗。然後,你可以看看他們是否改變了。

我們將使用的第二個指令碼是指令碼_兩個.sh。這是那個指令碼_一個電話. 鍵入以下內容:

#!/bin/bash # check their values echo "$0: first_var=$first_var, second_var=$second_var" # set new values first_var=charlie second_var=delta # check their values again echo "$0: first_var=$first_var, second_var=$second_var"

第二個指令碼列印兩個變數的值,為它們指定新值,然後再次列印它們。

要執行這些指令碼,必須鍵入以下內容才能使其可執行:

chmod +x script_one.sh chmod +x script_two.sh

如何在bash中使用變數

現在,鍵入以下命令啟動指令碼_一個.sh:

./script_one.sh

如何在bash中使用變數

這是輸出告訴我們的:

  • 指令碼_一個.sh列印變數的值,即alpha和bravo。
  • 指令碼_兩個.sh在收到變數(alpha和bravo)時列印它們的值。
  • 指令碼_兩個.sh換成查理和德爾塔。
  • 指令碼_一個.sh列印變數的值,仍然是alpha和bravo。

在第二個劇本里發生的事,留在第二個劇本里。這就像變數的副本被髮送到第二個指令碼,但是當指令碼退出時它們被丟棄。第一個指令碼中的原始變數不會被第二個指令碼中的副本所發生的任何更改。

如何引用變數

您可能已經注意到,當指令碼引用變數時,它們在引號中。這允許正確引用變數,因此在指令碼中執行行時使用它們的值。

如果指定給變數的值包含空格,則在將空格指定給變數時,空格必須位於引號中。這是因為,預設情況下,Bash使用空格作為分隔符。

舉個例子:

site_name=How-To Geek

如何在bash中使用變數

Bash認為“Geek”前面的空格表示新命令正在啟動。它報告沒有這樣的命令,並放棄該行。echo告訴我們site\u name變數不包含任何內容,甚至包括“How To”文字。

用引號將值括起來,再試一次,如下所示:

site_name="How-To Geek"

如何在bash中使用變數

這一次,它被識別為單個值並正確地分配給site\u name變數。

echo是你的朋友

可能需要一些時間來習慣命令替換、引用變數以及記住何時包含美元符號。

在按Enter鍵並執行一行Bash命令之前,請在它前面使用echo進行嘗試。這樣,你就可以確定接下來發生的事情是你想要的。您還可以發現語法中可能犯的任何錯誤。

  • 發表於 2021-04-03 02:34
  • 閱讀 ( 58 )
  • 分類:網際網路

你可能感興趣的文章

頂級網站和書籍,讓您成為linux命令列英雄

...bash是什麼、不同的模式(互動式和非互動式)以及它是如何產生的基礎知識開始,這個站點提供了一個全面的背景知識來幫助您理解命令列的機制。 ...

  • 發佈於 2021-03-14 07:04
  • 閲讀 ( 58 )

最好的,最快的,最堅固的usb快閃記憶體驅動器,你可以現在購買

...更多的特性。瞭解更多關於Bash-on-Windows的資訊,從您應該如何以及為什麼安裝它,到您可能不知道的隱藏特性。 ...

  • 發佈於 2021-03-17 01:06
  • 閲讀 ( 51 )

如何使用applescript將bash指令碼轉換為可單擊的應用程式

...為輸入執行它。這些特殊的應用程式被稱為水滴。下面是如何建立一個: ...

  • 發佈於 2021-03-21 09:39
  • 閲讀 ( 52 )

如何定製mac終端並使其更有用

...個新手,現在堅持預設的bashshell是可以的。但你應該知道如何在需要的時候切換它們。 ...

  • 發佈於 2021-03-21 20:13
  • 閲讀 ( 47 )

在linux中,“bash”是什麼意思?

...在這篇短文中,我們將探討Bash是什麼,它做什麼,以及如何開始使用它。 ...

  • 發佈於 2021-03-28 13:14
  • 閲讀 ( 61 )

關於linux中bash for loops的所有知識

... 第一行告訴執行這個程式的人如何執行它(即使用bash直譯器)。第二個命令與您在命令列中輸入的任何其他命令一樣。將該檔案另存為hello_世界.sh,然後: ...

  • 發佈於 2021-03-29 06:22
  • 閲讀 ( 59 )

如何使用受限shell來限制linux使用者可以做什麼

...改其目錄,您可以控制他們可以訪問哪些命令。下面介紹如何在Linux上設定受限shell。 受限炮彈 受限shell不是另一個shell。這是標準外殼的另一種模式。Bash、Korn、Fish和其他shell都可以在受限shell模式下啟動。在本文中,我們將...

  • 發佈於 2021-03-31 10:57
  • 閲讀 ( 55 )

如何使用chsh在linux上更改預設shell

Bash不是唯一的Linux shell。很容易嘗試其他的shell,比如非常流行的Zsh。找到一個您喜歡的shell後,使用chsh命令將其設定為預設shell。我們會教你怎麼做。 為什麼貝殼很重要 shell位於您和作業系統之間。它在終端視窗內提供環境...

  • 發佈於 2021-04-02 06:04
  • 閲讀 ( 64 )

如何在linux上使用cd命令

...小又簡單。 在使用Linux計算機的第一個小時內,您將學習如何使用Bash和其他shell附帶的cd命令。也許您以前有在其他作業系統上使用它的經驗,不需要解釋。它會改變當前的工作目錄,對嗎?還有什麼要知道的? 好吧,比你想象...

  • 發佈於 2021-04-02 08:58
  • 閲讀 ( 65 )

linux下如何使用which命令

...在shell中的,因此Bash不必費勁地查詢這些命令。 但是Bash如何定位其他命令、程式和外部獨立二進位制檔案呢?Bash使用路徑,實際上是一組路徑,每個路徑指向一個目錄。然後,它在每個目錄中搜索與您試圖執行的命令或程式匹...

  • 發佈於 2021-04-02 20:07
  • 閲讀 ( 50 )
wqo11894
wqo11894

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章

相關推薦