溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

shell編程中變量,字符串,數(shù)組,函數(shù)的使用方法

發(fā)布時間:2022-02-07 15:09:41 來源:億速云 閱讀:192 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“shell編程中變量,字符串,數(shù)組,函數(shù)的使用方法”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強(qiáng),希望這篇“shell編程中變量,字符串,數(shù)組,函數(shù)的使用方法”文章能幫助大家解決問題。

一. 變量

變量定義

定義變量時,變量名不加美元符號

your_name="jb51.net"

注意,變量名和等號之間不能有空格。

除了顯式地直接賦值,還可以用語句給變量賦值,如, 

for file in `ls /etc`
或
for file in $(ls /etc)

已定義的變量,可以被重新定義,如,

your_name="tom"
echo $your_name
your_name="alibaba"
echo $your_name

注意,第二次賦值的時候不能寫$your_name="alibaba",使用變量的時候才加美元符($)。

使用變量

使用一個定義過的變量,只要在變量名前面加美元符號即可,如,

your_name="qinjx"
echo $your_name
echo ${your_name}

變量名外面的花括號是可選的,加不加都行,
加花括號是為了幫助解釋器識別變量的邊界,比如下面這種情況,

for skill in Ada Coffe Action Java; do
    echo "I am good at ${skill}Script"
done

推薦給所有變量加上花括號,這是個好的編程習(xí)慣。

只讀變量

使用 readonly 命令可以將變量定義為只讀變量,只讀變量的值不能被改變。
下面的例子嘗試更改只讀變量,結(jié)果報錯,

#!/bin/bash
myUrl="//www.kemok4.com"
readonly myUrl
myUrl="http://www.jb51.com"

運行腳本,結(jié)果如下,

/bin/sh: NAME: This variable is read only.

刪除變量

使用 unset 命令可以刪除變量,

#!/bin/sh
myUrl="//www.kemok4.com"
unset myUrl
echo $myUrl

以上實例執(zhí)行將沒有任何輸出。

注意:unset 命令不能刪除只讀變量。

變量類型

運行shell時,會同時存在三種變量:

(1)局部變量局部變量在腳本或命令中定義,僅在當(dāng)前shell實例中有效,其他shell啟動的程序不能訪問局部變量。

(2)環(huán)境變量所有的程序,包括shell啟動的程序,都能訪問環(huán)境變量,有些程序需要環(huán)境變量來保證其正常運行。
必要的時候shell腳本也可以定義環(huán)境變量。

(3)shell變量shell變量是由shell程序設(shè)置的特殊變量。
shell變量中有一部分是環(huán)境變量,有一部分是局部變量,這些變量保證了shell的正常運行。

特殊變量用途
$0當(dāng)前腳本的文件名
$n傳遞給腳本或函數(shù)的參數(shù)。n 是一個數(shù)字,表示第幾個參數(shù)。例如,第一個參數(shù)是shell編程中變量,字符串,數(shù)組,函數(shù)的使用方法2。
$#傳遞給腳本或函數(shù)的參數(shù)個數(shù)。
$*傳遞給腳本或函數(shù)的所有參數(shù)。
$@傳遞給腳本或函數(shù)的所有參數(shù)。被雙引號(" ")包含時,與 $* 稍有不同,下面將會講到。
$?上個命令的退出狀態(tài),或函數(shù)的返回值。
$$當(dāng)前Shell進(jìn)程ID。對于 Shell 腳本,就是這些腳本所在的進(jìn)程ID。

字符串

單引號與雙引號

字符串可以用單引號,也可以用雙引號,也可以不用引號。

(1)單引號字符串的限制單引號里的任何字符都會原樣輸出,單引號字符串中的變量是無效的;
單引號字串中不能出現(xiàn)單獨一個的單引號(對單引號使用轉(zhuǎn)義符后也不行),但可成對出現(xiàn),作為字符串拼接使用。

(2)雙引號的優(yōu)點雙引號里可以有變量
雙引號里可以出現(xiàn)轉(zhuǎn)義字符

your_name="jb51"

# 使用雙引號拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting  $greeting_1

# 使用單引號拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2  $greeting_3
hello, runoob ! hello, runoob !
hello, runoob ! hello, ${your_name} !

字符串長度

string="abcd"
echo ${#string} #輸出 4

提取子字符串

以下實例從字符串第 2 個字符開始截取 4 個字符,

string="jb51.net is a great site"
echo ${string:1:4} # 輸出 b51.

查找子字符串

查找字符 io 的位置(哪個字母先出現(xiàn)就計算哪個):

string="jb51 is a great site"
echo `expr index "$string" i5`  # 輸出 3

注意: 以上腳本中 ` 是反引號,而不是單引號 '。

反引號括起來的字符串被shell解釋為命令行,
在執(zhí)行時,shell首先執(zhí)行該命令行,并以它的標(biāo)準(zhǔn)輸出結(jié)果取代整個反引號(包括兩個反引號)部分。

OPDATE=`date`

就是把date -d '-1 day' +%Y%m%d這條命令的結(jié)果賦給變量OPDATE。

此外,反引號是一個老的用法,$()才是新的用法,例如,

OPDATE=$(date)

注釋

單行注釋

# 開頭的行就是注釋,會被解釋器忽略。

通過每一行加一個 # 號設(shè)置多行注釋,

#--------------------------------------------
# 這是一個注釋
# author:xxx
#--------------------------------------------
##### 用戶配置區(qū) 開始 #####
#
#
# 這里可以添加腳本描述信息
# 
#
##### 用戶配置區(qū) 結(jié)束  #####

多行注釋

:<<EOF
注釋內(nèi)容...
注釋內(nèi)容...
注釋內(nèi)容...
EOF

EOF 也可以使用其他符號,

:<<'
注釋內(nèi)容...
注釋內(nèi)容...
注釋內(nèi)容...
'
:<<!
注釋內(nèi)容...
注釋內(nèi)容...
注釋內(nèi)容...
!

數(shù)組

bash支持一維數(shù)組(不支持多維數(shù)組),并且沒有限定數(shù)組的大小。
類似于 C 語言,數(shù)組元素的下標(biāo)由 0 開始編號。

定義數(shù)組

在 Shell 中,用括號來表示數(shù)組,數(shù)組元素用"空格"符號分割開,

數(shù)組名=(值1 值2 ... 值n)

例如:

array_name=(value0 value1 value2 value3)

或者

array_name=(
value0
value1
value2
value3
)

還可以單獨定義數(shù)組的各個分量:

array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen

可以不使用連續(xù)的下標(biāo),而且下標(biāo)的范圍沒有限制。

讀取數(shù)組

讀取數(shù)組元素值的一般格式是,

${數(shù)組名[下標(biāo)]}

例如:

valuen=${array_name[n]}

使用 @ 符號可以獲取數(shù)組中的所有元素,例如:

echo ${array_name[@]}

取得數(shù)組元素的個數(shù)

length=${#array_name[@]}

或者

length=${#array_name[*]}

取得數(shù)組單個元素的長度,

lengthn=${#array_name[n]}

函數(shù)

無參調(diào)用

#!/bin/bash

demoFun(){
    echo "這是我的第一個 shell 函數(shù)!"
}
echo "-----函數(shù)開始執(zhí)行-----"
demoFun
echo "-----函數(shù)執(zhí)行完畢-----"

Plain Text
-----函數(shù)開始執(zhí)行-----
這是我的第一個 shell 函數(shù)!
-----函數(shù)執(zhí)行完畢-----

返回值

#!/bin/bash

funWithReturn(){
    echo "這個函數(shù)會對輸入的兩個數(shù)字進(jìn)行相加運算..."
    echo "輸入第一個數(shù)字: "
    read aNum
    echo "輸入第二個數(shù)字: "
    read anotherNum
    echo "兩個數(shù)字分別為 $aNum 和 $anotherNum !"
    return $(($aNum+$anotherNum))
}
funWithReturn
echo "輸入的兩個數(shù)字之和為 $? !"
這個函數(shù)會對輸入的兩個數(shù)字進(jìn)行相加運算...
輸入第一個數(shù)字: 
1
輸入第二個數(shù)字: 
2
兩個數(shù)字分別為 1 和 2 !
輸入的兩個數(shù)字之和為 3 !

帶參數(shù)調(diào)用

#!/bin/bash

funWithParam(){
    echo "第一個參數(shù)為 $1 !"
    echo "第二個參數(shù)為 $2 !"
    echo "第十個參數(shù)為 $10 !"
    echo "第十個參數(shù)為 ${10} !"
    echo "第十一個參數(shù)為 ${11} !"
    echo "參數(shù)總數(shù)有 $# 個!"
    echo "作為一個字符串輸出所有參數(shù) $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
第一個參數(shù)為 1 !
第二個參數(shù)為 2 !
第十個參數(shù)為 10 !
第十個參數(shù)為 34 !
第十一個參數(shù)為 73 !
參數(shù)總數(shù)有 11 個!
作為一個字符串輸出所有參數(shù) 1 2 3 4 5 6 7 8 9 34 73 !

關(guān)于“shell編程中變量,字符串,數(shù)組,函數(shù)的使用方法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI