Bash 基礎知識系列 #2:在 Bash 中使用變數
在 Bash 基礎知識系列的第一部分中,我簡要提到了變數。現在是時候在本章中詳細了解它們了。
如果你曾經進行過任何類型的編碼,你一定熟悉術語「變數」。
如果沒有,請將變數視為保存信息的盒子,並且該信息可以隨著時間的推移而改變。
讓我們看看如何使用它們。
在 Bash shell 中使用變數
打開終端並使用一個隨機的數字 4 初始化變數:
var=4
現在你有一個名為 var
的變數,它的值為 4
。想驗證一下嗎? 通過在變數名前添加 $
來訪問變數的值。這稱為參數擴展。
[abhishek@itsfoss]:~$ echo The value of var is $var
The value of var is 4
? 變數初始化時
=
前後不能有空格。
如果需要,你可以將該值更改為其他值:
在 Bash shell 中,變數可以是數字、字元或字元串(包括空格在內的字元)。
? 與 Linux 中的其他事物一樣,變數名稱也區分大小寫。它們可以由字母、數字和下劃線 「
_
」 組成。
在 Bash 腳本中使用變數
你是否注意到我沒有運行 shell 腳本來顯示變數示例? 你可以直接在 shell 中做很多事情.當你關閉終端時,你創建的那些變數將不再存在。
但是,你的發行版通常會添加全局變數,以便可以在所有腳本和 shell 中訪問它們。
讓我們再寫一些腳本.你應該之前創建了腳本目錄,但無論哪種情況,此命令都會處理該目錄:
mkdir -p bash_scripts && cd bash_scripts
基本上,如果 bash_scripts
目錄尚不存在,它將創建它,然後切換到該目錄。
這裡讓我們使用以下文本創建一個名為 knock.sh
的新腳本。
#!/bin/bash
echo knock, knock
echo "Who's there?"
echo "It's me, $USER"
更改文件許可權並運行腳本。你在上一章中已經學到了。
這是它為我生成的內容:
你是否注意到它如何自動將我的名字添加到其中? 這就是包含用戶名的全局變數 $USER
的魔力。
你可能還注意到,我有時將 "
與 echo
一起使用,但其他時候則不使用。這是故意的。bash 中的引號 有特殊含義。它們可用於處理空格和其他特殊字元。讓我展示一個例子。
處理變數中的空格
假設你必須使用一個名為 greetings
的變數,其值為 hello and welcome
。
如果你嘗試像這樣初始化變數:
greetings=Hello and Welcome
你會得到這樣的錯誤:
Command 'and' not found, but can be installed with:
sudo apt install and
這就是為什麼你需要使用單引號或雙引號:
greetings="Hello and Welcome"
現在你可以根據需要使用該變數。
將命令輸出分配給變數
是的!你可以將命令的輸出存儲在變數中並在腳本中使用它們。這稱為命令替換。
var=$(command)
這是一個例子:
[abhishek@itsfoss]:~$ today=$(date +%D)
[abhishek@itsfoss]:~$ echo "Today's date is $today"
Today's date is 06/19/23
[abhishek@itsfoss]:~$
舊語法使用反引號而不是 $()
進行命令替換。雖然它可能仍然有效,但你應該使用新的推薦符號。
? 變數會更改值,除非你聲明一個「常量」變數,如下所示:
readonly pi=3.14
。在這種情況下,變數pi
的值無法更改,因為它被聲明為readlonly
。
?️ 練習時間
是時候練習你所學到的東西了。這裡有一些練習來測試你的學習情況。
練習 1:編寫一個 bash 腳本,以以下格式列印你的用戶名、當前工作目錄、主目錄和默認 shell。
Hello, there
My name is XYZ
My current location is XYZ
My home directory is XYZ
My default shell is XYZ
提示:使用全局變數 $USER
、$PWD
、$HOME
和 $SHELL
。
練習 2: 編寫一個 bash 腳本,聲明一個名為 price
的變數.使用它來獲取以下格式的輸出:
Today's price is $X
Tomorrow's price is $Y
其中 X 是變數 price
的初始值,並且明天價格翻倍。
提示:使用
。 轉義特殊字元
$
練習的答案可以在社區的這個專用帖子中討論。
在 Bash 基礎知識系列的下一章中,你將了解如何通過傳遞參數和接受用戶輸入來使 bash 腳本具有交互性。
(題圖:MJ/37c5c26e-3289-4ebd-b8ae-88eb8a3b2eb1)
via: https://itsfoss.com/bash-use-variables/
作者:Abhishek Prakash 選題:lkxed 譯者:geekpi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive