1. 程式人生 > >如何在shell指令碼中使用變數

如何在shell指令碼中使用變數

本文參考LinuxTechi網站中這篇文章:How to use variables in shell Scripting(by Pradeep Kumar · Published July 27, 2014 · Updated August 4, 2017 )整理部分譯出,同時有添加了部分自己的批註。

系統定義的變數
System Defined Variables Meaning
BASH=/bin/bash Shell Name
BASH_VERSION=4.1.2(1) Bash Version
COLUMNS=80 No. of columns for our screen
HOME=/home/linuxtechi Home Directory of the User
LINES=25 No. of columns for our screen
LOGNAME=LinuxTechi LinuxTechi Our logging name
OSTYPE=Linux OS type
PATH=/usr/bin:/sbin:/bin:/usr/sbin Path Settings
PS1=[\[email protected]\h \W]$ Prompt Settings
PWD=/home/linuxtechi Current Working Directory
SHELL=/bin/bash Shell Name
USERNAME=linuxtechi User name who is currently login to system

示例:

[[email protected] ~]# echo $HOME
/root
[[email protected] ~]# echo $PATH
/opt/java/jdk1.7.0_79/bin:/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:
/usr/sbin:/usr/bin:/root/
bin

注意

請注意,指令碼執行時,echo命令中的環境變數將被其當前值替換。另請注意,我們可以將$ USER系統變數放在第一個字串的雙引號內,並且shell指令碼仍然能夠找出我們的意思。但是,使用這種方法有一個缺點。看看這個例子中會發生什麼

[[email protected] ~]# echo "The cost of the item is $15" 
The cost of the item is 5

這顯然不是我們預期的結果。只要指令碼在引號內看到美元符號,它就會假定您正在引用一個變數。在這個例子中,指令碼試圖顯示變數$ 1(未定義),然後是數字5.要顯示實際的美元符號,必須在前面加上反斜槓字元:

[[email protected] ~]# echo "The cost of the item is \$15"
The cost of the item is $15

看,上邊的結果就是我們預期到的。反斜槓允許shell指令碼$解釋為實際的美元符號,而不是變數。

使用者定義的變數

這些變數由使用者定義。shell指令碼允許我們在指令碼中設定和使用自己的變數。設定變數允許您臨時儲存資料並在整個指令碼中使用它,使得shell指令碼更像一個真正的計算機程式。

使用者變數可以是最多20個字母數字下劃線字元的任何文字字串。使用者變數區分大小寫,因此變數Var1與變數var1不同。這個小規則經常讓新手指令碼程式設計師陷入困境。

使用等號將值分配給使用者變數變數,等號和值(新手的另一個麻煩點)之間不能有空格。以下是為使用者變數賦值的幾個示例:

[root@wcl ~]# var1=10
[root@wcl ~]# var2=20
[root@wcl ~]# echo $var1
10
[root@wcl ~]# echo $var2
20
[root@wcl ~]# var3 = 30
-bash: var3: 未找到命令

shell指令碼自動確定用於變數值的資料型別。shell指令碼中定義的變數在shell指令碼的整個生命週期中保持其值,但在shell指令碼完成時刪除。

就像系統變數一樣,使用者變數可以使用美元符號來引用;

每次引用變數時,都會生成當前分配給它的值。重要的是要記住,當引用一個變數值時使用美元符號,但當引用變數來為其賦值時,不要使用美元符號。這裡是我的意思的一個例子:

當您在賦值語句中使用value1變數的時,您仍然必須使用美元符號。該程式碼產生以下輸出:

[[email protected] ~]# cat refrenced.sh 
#!/bin/bash
#Program:
#               assigning a variable value to another variable
#Author:
#       wangchunlan
#History:
#       2018/5/10
#--------------------------------------------

value1=10
value2=$value1         //... ...注意 value2=value1   [本人批註]
echo The resulting value is $value2  // ... ...注意  引用變數添加了$       [本人批註]

[[email protected] ~]# ./refrenced.sh   
The resulting value is 10       //... ...注意結果   10      [本人批註]

如果您忘記美元符號,並使value2賦值行如下所示:

[[email protected] ~]# cat refrenced.sh 
#!/bin/bash
#Program:
#               assigning a variable value to another variable
#Author:
#       wangchunlan
#History:
#       2018/5/10
#--------------------------------------------

value1=10
value2=value1               // ... ...注意value2=value1  沒有使用$       [本人批註]
echo The resulting value is $value2                    
[[email protected] ~]# ./refrenced.sh   
The resulting value is value1       //... ...注意結果 value1            [本人批註]

如果沒有美元符號,shell會將變數名稱解釋普通文字字串,這很可能不是您想要的。

在shell變數中使用反引號(`)

反引號允許你一個shell命令的輸出分配給一個變數。雖然這看起來不多,但它是指令碼程式設計中的一個主要構建塊。您必須用反引號字元圍繞整個命令列命令:

[root@wcl ~]# testing=`date`

shell在反引號內執行命令並將輸出分配給變數測試。以下是使用普通shell命令的輸出建立變數的示例:

[root@wcl ~]# testing=`date`
[root@wcl ~]# echo "date&time:"$testing
date&time:20180510日 星期四 10:33:10 CST

變數測試接收來自date命令的輸出,並將其用於echo語句中以顯示它。執行shell指令碼會產生以下輸出:

[[email protected] ~]# cat date.sh 
#!/bin/bash
testing=`date`
echo "Today's date&time is: "$testing
[[email protected] ~]# chmod 744 date.sh 
[[email protected] ~]# ./date.sh 
Today's date&time is: 2018年 05月 10日 星期四 10:36:38 CST

注意:在bash中,您還可以使用替代 $(…)語法代替反向符號(`),它具有可重入的優點。

例如:

[root@wcl ~]# test2=$(date)
[root@wcl ~]# echo "今天的時間是:"$test2
今天的時間是:20180510日 星期四 10:37:40 CST

[本人批註]
總結:

  1. 指令碼中我們想要顯示原來的$,需要在其前面新增反斜槓\;因為指令碼在引號內看到$,它就會假定您正在引用一個變數。

  2. 我麼在定義變數的時候:等號和值之間不能有空格

  3. 當引用一個變數值時使用$,但當引用變數來為其賦值時,不要使用$,否則shell會將變數名稱解釋普通文字字串
  4. 將命令列賦值給變數:使用`(反引號字元)或者使用$()來包圍命令。

    如`命令`或者$(命令)

相關推薦

什麼是shellshell指令碼結構和執行、date命令、shell指令碼變數

開發十年,就只剩下這套架構體系了! >>>   

Linux通過cat EOF新建檔案並新增或追加內容方法並在shell指令碼配置環境變數時使用

cat << EOF >實現新建檔案並新增內容 [email protected]:/opt# cat << EOF >abcd.txt > 1 > 2 > 3 > eof > EOF [email

linux下shell指令碼sed命令使用變數

用linpack做測試,寫了一個指令碼, 因為每次可修改的引數寫在了配置檔案裡,所以腳本里用sed命令來修改配置檔案#測試次數echo “Input Number of tests:”read numt#每次測試的資料規模,測試次數有多少次,這裡應該又多少組數字,中間以空格隔

shell指令碼的特殊變數

有時候在linux上釋出專案的時候,可以把釋出操作繼承在shell指令碼中,以下記錄了一些shell指令碼的變數含義,作為備註:   shell特殊變數含義 變數 含義 $0 當前指令碼的檔名

shell指令碼整數型變數自增(加1)的實現方式

在shell指令碼中,有時為了計數,需要編寫整數型變數,並用自增來顯示。 shell指令碼中的整數型變數,自增有多種實現方式,整體測試指令碼如下: #!/bin/sh #本指令碼測試shell指令碼中整型變數自增 加1的幾種方法 #定義整型變數 a=1 echo $a

Linux下批量修改檔案字尾名及shell指令碼匹配檔名稱變數寫法

rename .txt.COMPLETED  .txt   *.txt.COMPLETED 為了完整起見,我這裡再用一些例子加以說明 ${ } 的一些特異功能: 假設我們定義了一個變數為: fi

十六週二次課 2018.02.05 shell指令碼介紹、shell指令碼結構和執行、date命令用法、shell指令碼變數

20.1 shell指令碼介紹微信公眾號部落格,20.2 shell指令碼結構和執行建立目錄,然後我們進去在裡面寫指令碼第一行是他表示接下來的命令是通過這一個直譯器操作解析的的,通常都是/bin/bash(如果你是在本機上執行那麼不用寫也行,因為它知道接下來的命令能夠在這臺機

20.1 shell指令碼介紹 20.2 shell指令碼結構和執行 20.3 date命令用法 20.4 shell指令碼變數

20.1 shell指令碼介紹20.2 shell指令碼結構和執行20.3 date命令用法20.4 shell指令碼中的變數shell指令碼介紹shell是一種指令碼語言可以使用邏輯判斷、迴圈等語法可以自定義函式shell是系統命令的集合shell指令碼可以實現自動化運維,

Linux shell指令碼執行命令結果賦值給變數&&echo輸出變數是否包含換行符的問題

Linux shell指令碼中執行命令結果賦值給變數&&echo輸出變數是否包含換行符的問題 echo $ret 和 echo "$ret" 區別: 如果是echo $ret,輸出結果為一行,沒有換行符 如果是echo "$ret",輸出結果為多行,有換行符

Linux shell指令碼父子程序與變數的分析

轉載地址:https://site.douban.com/196781/widget/notes/12220452/note/261008964/ 【問題】一個 test.sh 裡面這麼寫 #! /bin/bash read test echo $test exit 0 儲

shell指令碼賦值給變數有空格, 導致命令執行失敗

功能需求 統計指定時間程式傳送的資料量(按照發送時間) 傳送時間格式2017-12-14 16:18:11, 本來向獲取小時格式 date +'%Y-%m-%d %H' --date="-

如何在shell指令碼使用變數

本文參考LinuxTechi網站中這篇文章:How to use variables in shell Scripting(by Pradeep Kumar · Published July 27, 2014 · Updated August 4, 201

shell指令碼的for迴圈和while迴圈

基礎for迴圈有三種:         ①直接寫-------例如:for  i   in  1,2,3,4(注:i 是變數; in是在什麼地方;do和done之間是迴圈體)         &n

學習Linux shell指令碼連線字串的方法

這篇文章主要介紹了Linux shell指令碼中連線字串的方法,如果想要在變數後面新增一個字元,可以用一下方法: 程式碼如下: $value1=home $value2=${value1}"=" echo $value2 把要新增的字串變數新增{},並且需要把$放到外面。 這樣輸出的結果

shell指令碼$的用處

1.$0 獲取當前執行的shell指令碼的檔名,包括路徑。[[email protected] ~]# vi test.sh[[email protected] ~]# cat test.shecho $0[[email protected] ~]# sh test.shtest

shell指令碼變數

首行:#!/bin/bash #!符號能夠被核心識別成為一個指令碼的開始,這一行必須位於指令碼的首行 註釋:# 除去第一行的# 內容:可執行結構和內容 建立檔案的方式: touch echo “” > first.sh 注:向檔案輸入””中的內容 > 是覆蓋

shell指令碼關於getopts的使用方法

例子: while getopts ":e:s:pd:l" arg; do   case $arg in   e)        ghs_env=$OPTARG       ;;   s)  

Shell 指令碼的檔名匹配和命令執行

理解下 shell 指令碼中的檔名匹配和命令執行的順序與結果。我們學習這個的目的是可以熟悉的在 shell 指令碼中寫出快速的找到檔案的命令。它可以匹配檔名中的任何字串,匹配檔名中的單個字元以及匹配檔名中的字母或數字符號。         首先我們來看看匹配檔案的符號

Shell 指令碼執行mysql語句

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Linux/Unix shell 指令碼呼叫SQL RMAN指令碼

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!