您好,登錄后才能下訂單哦!
這篇文章主要介紹“shell編程中變量,字符串,數組,函數的使用方法”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“shell編程中變量,字符串,數組,函數的使用方法”文章能幫助大家解決問題。
定義變量時,變量名不加美元符號
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
推薦給所有變量加上花括號,這是個好的編程習慣。
使用 readonly
命令可以將變量定義為只讀變量,只讀變量的值不能被改變。
下面的例子嘗試更改只讀變量,結果報錯,
#!/bin/bash myUrl="//www.mlszssj.com" readonly myUrl myUrl="http://www.jb51.com"
運行腳本,結果如下,
/bin/sh: NAME: This variable is read only.
使用 unset
命令可以刪除變量,
#!/bin/sh myUrl="//www.mlszssj.com" unset myUrl echo $myUrl
以上實例執行將沒有任何輸出。
注意:unset
命令不能刪除只讀變量。
運行shell時,會同時存在三種變量:
(1)局部變量局部變量在腳本或命令中定義,僅在當前shell實例中有效,其他shell啟動的程序不能訪問局部變量。
(2)環境變量所有的程序,包括shell啟動的程序,都能訪問環境變量,有些程序需要環境變量來保證其正常運行。
必要的時候shell腳本也可以定義環境變量。(3)shell變量shell變量是由shell程序設置的特殊變量。
shell變量中有一部分是環境變量,有一部分是局部變量,這些變量保證了shell的正常運行。
特殊變量 | 用途 |
---|---|
$0 | 當前腳本的文件名 |
$n | 傳遞給腳本或函數的參數。n 是一個數字,表示第幾個參數。例如,第一個參數是2。 |
$# | 傳遞給腳本或函數的參數個數。 |
$* | 傳遞給腳本或函數的所有參數。 |
$@ | 傳遞給腳本或函數的所有參數。被雙引號(" ")包含時,與 $* 稍有不同,下面將會講到。 |
$? | 上個命令的退出狀態,或函數的返回值。 |
$$ | 當前Shell進程ID。對于 Shell 腳本,就是這些腳本所在的進程ID。 |
字符串可以用單引號,也可以用雙引號,也可以不用引號。
(1)單引號字符串的限制單引號里的任何字符都會原樣輸出,單引號字符串中的變量是無效的;
單引號字串中不能出現單獨一個的單引號(對單引號使用轉義符后也不行),但可成對出現,作為字符串拼接使用。(2)雙引號的優點雙引號里可以有變量
雙引號里可以出現轉義字符
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.
查找字符 i
或 o
的位置(哪個字母先出現就計算哪個):
string="jb51 is a great site" echo `expr index "$string" i5` # 輸出 3
注意: 以上腳本中 `
是反引號,而不是單引號 '
。
反引號括起來的字符串被shell解釋為命令行,
在執行時,shell首先執行該命令行,并以它的標準輸出結果取代整個反引號(包括兩個反引號)部分。
OPDATE=`date`
就是把date -d '-1 day' +%Y%m%d
這條命令的結果賦給變量OPDATE
。
此外,反引號是一個老的用法,$()
才是新的用法,例如,
OPDATE=$(date)
以 #
開頭的行就是注釋,會被解釋器忽略。
通過每一行加一個 #
號設置多行注釋,
#-------------------------------------------- # 這是一個注釋 # author:xxx #-------------------------------------------- ##### 用戶配置區 開始 ##### # # # 這里可以添加腳本描述信息 # # ##### 用戶配置區 結束 #####
:<<EOF 注釋內容... 注釋內容... 注釋內容... EOF
EOF
也可以使用其他符號,
:<<' 注釋內容... 注釋內容... 注釋內容... '
:<<! 注釋內容... 注釋內容... 注釋內容... !
bash支持一維數組(不支持多維數組),并且沒有限定數組的大小。
類似于 C 語言,數組元素的下標由 0 開始編號。
在 Shell 中,用括號來表示數組,數組元素用"空格"符號分割開,
數組名=(值1 值2 ... 值n)
例如:
array_name=(value0 value1 value2 value3)
或者
array_name=( value0 value1 value2 value3 )
還可以單獨定義數組的各個分量:
array_name[0]=value0 array_name[1]=value1 array_name[n]=valuen
可以不使用連續的下標,而且下標的范圍沒有限制。
讀取數組元素值的一般格式是,
${數組名[下標]}
例如:
valuen=${array_name[n]}
使用 @
符號可以獲取數組中的所有元素,例如:
echo ${array_name[@]}
length=${#array_name[@]}
或者
length=${#array_name[*]}
取得數組單個元素的長度,
lengthn=${#array_name[n]}
#!/bin/bash demoFun(){ echo "這是我的第一個 shell 函數!" } echo "-----函數開始執行-----" demoFun echo "-----函數執行完畢-----" Plain Text -----函數開始執行----- 這是我的第一個 shell 函數! -----函數執行完畢-----
#!/bin/bash funWithReturn(){ echo "這個函數會對輸入的兩個數字進行相加運算..." echo "輸入第一個數字: " read aNum echo "輸入第二個數字: " read anotherNum echo "兩個數字分別為 $aNum 和 $anotherNum !" return $(($aNum+$anotherNum)) } funWithReturn echo "輸入的兩個數字之和為 $? !"
這個函數會對輸入的兩個數字進行相加運算... 輸入第一個數字: 1 輸入第二個數字: 2 兩個數字分別為 1 和 2 ! 輸入的兩個數字之和為 3 !
#!/bin/bash funWithParam(){ echo "第一個參數為 $1 !" echo "第二個參數為 $2 !" echo "第十個參數為 $10 !" echo "第十個參數為 ${10} !" echo "第十一個參數為 ${11} !" echo "參數總數有 $# 個!" echo "作為一個字符串輸出所有參數 $* !" } funWithParam 1 2 3 4 5 6 7 8 9 34 73
第一個參數為 1 ! 第二個參數為 2 ! 第十個參數為 10 ! 第十個參數為 34 ! 第十一個參數為 73 ! 參數總數有 11 個! 作為一個字符串輸出所有參數 1 2 3 4 5 6 7 8 9 34 73 !
關于“shell編程中變量,字符串,數組,函數的使用方法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。