日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

bash脚本编程之一 变量、变量类型等

發(fā)布時(shí)間:2024/4/15 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bash脚本编程之一 变量、变量类型等 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

變量的內(nèi)容

1、變量命名:

? ? ? ? ? ?1、只能包含字母、數(shù)字和下劃線(xiàn),并且不能以數(shù)字開(kāi)頭,
????2、不應(yīng)該跟系統(tǒng)中已有的環(huán)境變量重名
????3、最好能見(jiàn)名知意

?

2、變量賦值:

設(shè)置變量:
變量名稱(chēng)=值

fld_name=value?等號(hào)兩邊不能有空格

注意:用echo 顯示變量名的值時(shí),需要用$符號(hào)。?

?

?

針對(duì)數(shù)字,你可以可以這樣為變量賦值,定義一個(gè)變量的類(lèi)型:

?

?

3、變量類(lèi)型:

環(huán)境變量:
????本地變量(局部變量):
????位置變量:
????特殊變量(系統(tǒng)變量):

本地變量:作用域?yàn)檎麄€(gè)bash進(jìn)程
????varname=value
局部變量:作用域只對(duì)當(dāng)前代碼段有效
????local?varname=value

環(huán)境變量:作用域?yàn)楫?dāng)前shell進(jìn)程及其子進(jìn)程
????export?varname=value?"導(dǎo)出“

任意腳本在執(zhí)行時(shí)會(huì)啟動(dòng)一個(gè)子shell進(jìn)程,
????????命令行中啟動(dòng)的腳本會(huì)繼承當(dāng)前shell的環(huán)境變量
????????系統(tǒng)自動(dòng)執(zhí)行的腳本(跟命令行無(wú)關(guān))就需要自我定義需要的各環(huán)境變量
位置變量:
????$1,$2,....

特殊變量:保持某些特殊數(shù)據(jù)
????????$??上一個(gè)命令執(zhí)行狀態(tài)返回值
????????$#?參數(shù)的個(gè)數(shù)
????????$*?參數(shù)列表
????????$@?參數(shù)列表
????????$0??命令本身??腳本本身

????執(zhí)行腳本時(shí)的腳本路徑及名稱(chēng)

程序執(zhí)行一般有兩類(lèi)返回值??
????程序執(zhí)行結(jié)果;
????執(zhí)行狀態(tài)返回代碼(0-255)
????????????0表示正確
????????????1-255:錯(cuò)誤執(zhí)行?1,2,127?系統(tǒng)預(yù)留?有特殊意義

?

4、變量取消:

unset ? varname

撤銷(xiāo)fld_name域的值?

?查看當(dāng)前shell中的變量

?set??不帶任何參數(shù)和選項(xiàng)

?

?

如果查看當(dāng)前shell中的環(huán)境變量
????????env
????????export
????????printenv
字符串變量添加新的變量
?PATH添加新的路徑
export?PATH=$PATH:/usr/local/apsch/bin

?

?

?

?

?

5、取得變量值:

$變量名稱(chēng)
${變量名稱(chēng)}??$(x)?這個(gè)可以用來(lái)當(dāng)做命令調(diào)用

如果變量在語(yǔ)句當(dāng)中被引用,必須要使用${x}才可以,取得數(shù)組的變量值時(shí)候也需要使用${}來(lái)調(diào)用

?

?關(guān)于變量和引號(hào)的關(guān)系:

????單引號(hào):所見(jiàn)即所得
????雙引號(hào):使特殊符號(hào)生效

?

?


?

6、調(diào)整變量的屬性:

1、readonly?命令?:定義只讀變量
????????-p:顯示目前具有只讀屬性的變量列表
????????-f:設(shè)定函數(shù)不可修改
????????-a:定義數(shù)組不可修改

?count環(huán)境變量readonly之前可以修改,之后變成只讀變量,不可以在修改。

?

?readonly ?-p 讀取只讀變量,顯示在終端。

?

?

?2、declare?命令?

????????-r:設(shè)定只讀變量
????????-p:顯示變量的屬性
????????-a:變量是一個(gè)數(shù)組
????????-f:搜尋命令時(shí),只找函數(shù)
????????-i:變量是一個(gè)整數(shù)
????????-F:顯示所有的函數(shù)式名稱(chēng)及其屬性
????????-t:設(shè)立變量具有trace屬性
????????-x:設(shè)定環(huán)境變量

?

7、數(shù)組:??

?

?是一種數(shù)據(jù)結(jié)構(gòu),有相關(guān)的數(shù)據(jù)項(xiàng)組成,每個(gè)數(shù)據(jù)項(xiàng),稱(chēng)為數(shù)組的元素,且可采用索引的方式取得個(gè)元素的值
數(shù)組賦值:

1、單個(gè)賦值,以index作為索引號(hào),索引號(hào)從0開(kāi)始

# 為數(shù)組賦值

?

?#顯示數(shù)組中所有值方法一

$echo ?${a[*]}?

?

?

?#顯示數(shù)組中所有值方法二

$echo ?${a[@]}?

?

?

#為數(shù)組添加數(shù)據(jù)項(xiàng)

?

?

2、使用小括號(hào)為數(shù)組賦值

?

? ? a=(1000 2000 3000)?默認(rèn)空格隔開(kāi)

?#為數(shù)組b賦值? 記住是小括號(hào),不是大括號(hào)

?

?

#打印出第一個(gè)和第4個(gè)數(shù)據(jù)項(xiàng)

?

?

?

3、為數(shù)組中的某一個(gè)數(shù)據(jù)項(xiàng)賦值,默認(rèn)是從0開(kāi)始,如果中間出現(xiàn)未比標(biāo)示的索引項(xiàng),則從前一個(gè)索引項(xiàng)開(kāi)始計(jì)算

?

? ? a={51?[3]=5??cto??[6]=8}

#為數(shù)組賦值 ?#打印出數(shù)組中所有值 ??

?

?

#驗(yàn)證中間出現(xiàn)的數(shù)值是從哪個(gè)索引項(xiàng)開(kāi)始算起的

?

?數(shù)組d[7]測(cè)試:

?

?

?顯示賦值:

????echo?${a[1]}
取出數(shù)組中所有的值:
????echo?${a[@]}??或者echo?${a[*]}
取得數(shù)組元素的個(gè)數(shù):
????echo?${#a[@]}?或者?echo?${#a[*]}

?

?數(shù)組元素及個(gè)數(shù):

?

?

?

?8.高級(jí)變量

${變量名稱(chēng)}??變量擴(kuò)展
$(命令)??????命令替換
$((算術(shù)式))??算術(shù)擴(kuò)展

?

?

$(命令)?命令替換:
?測(cè)試變量存在與否:
????${countor:-'num'}?判斷條件,如果countor存在,就返回值,如果countor不存在,就把-后接的字符串當(dāng)做整個(gè)變量擴(kuò)展的結(jié)果,并傳回

?

?

?測(cè)試變量不存在或?yàn)榭?#xff0c;傳回一個(gè)默認(rèn)值

?${myname:-'nick'}?如果待測(cè)變量不存在或?yàn)榭?#xff0c;傳回-后的值,存在則傳回變量的

賦值給變量chen:?

?

?

測(cè)試變量不存在或?yàn)榭?#xff0c;給變量設(shè)定一個(gè)默認(rèn)值
????${count:=100}?若變量coutn沒(méi)有值或?yàn)榭?#xff0c;則把待測(cè)變量設(shè)定為默認(rèn)值,

測(cè)試變量不存在或?yàn)榭?#xff0c;傳回錯(cuò)誤信息
????${myname:?"your?input?error"}

?

?

?

測(cè)試變量的存在性:
????${myname:+Ture}?若變量存在且值非空,則符合判斷

?

? ? ?:??空??????????????測(cè)空置
????-???負(fù)向 ? ? ? ? ? ? ? ? 測(cè)不存在
????+???正向 ? ? ? ? ? ? ? ? 測(cè)存在
???????有問(wèn)題????????????檢查是否完備后再來(lái)執(zhí)行吧
????=???設(shè)值 ? ? ? ? ? ? ? ? 給控值變量設(shè)定一個(gè)默認(rèn)值

?

$(命令)?命令替換??此命令等同于··?(esc下的按鍵,不是單引號(hào))這個(gè)在編寫(xiě)腳本的時(shí)候很有用

?

?

$((算術(shù)式))算術(shù)擴(kuò)展:

?

?

?


?----借鑒:

字符串切片是從0開(kāi)始的?在使用${}的時(shí)候?大括號(hào)內(nèi)的變量引用前面的$可以不寫(xiě)
????????${變量:位置起點(diǎn)}???${myname:3}
????????${變量:位置起點(diǎn):長(zhǎng)度}

12345678#定義變量[root@lovelace 51cto]# myname=lovelace#取得變量字符串從第三個(gè)字符開(kāi)始到字符串結(jié)尾的所有字符[root@lovelace 51cto]# echo ${myname:3}elace#取得變量字符串中從第四個(gè)字符開(kāi)始,長(zhǎng)度為2的字符[root@lovelace 51cto]# echo ${myname:4:2}la

????

取部分參數(shù):
????????命令行參數(shù)是從$1開(kāi)始的依次類(lèi)推,$@代表所有參數(shù),命令本身使用$0來(lái)表示
????????${@:起點(diǎn)}:由點(diǎn)開(kāi)始,取得后面的所有的位置參數(shù)
????????${@:起點(diǎn):個(gè)數(shù)}:由起點(diǎn)開(kāi)始,取得指定個(gè)數(shù)的位置參數(shù)
示例腳本

12345678910#!/bin/bash#Verson:0.1#Auther:lovelace#Pragram:test argument#取得程序名echo?$0#取得變量的所有值echo?${@:1}#取得變量的個(gè)數(shù)echo?$#

?

執(zhí)行結(jié)果:

1234[root@lovelace 51cto]# ./argument.sh 12 32 45./argument.sh12 32 453

?

計(jì)算字符串長(zhǎng)度:
????${#變量名稱(chēng)}:傳回變量值的字符串長(zhǎng)度
????expr:也可以統(tǒng)計(jì)字符串的長(zhǎng)度
????????1、str="here?you?are."
???????????len$(expr?length?"$str")
???????????echo?"str?字符串長(zhǎng)度是:$len"
????????2、expr?"字符串“:‘。*’
????????????str="here?you?are."
????????????len=$(expr?"$str":'.*')
????????????echo?"str字符串長(zhǎng)度是:$len"

12345678910111213[root@lovelace 51cto]# echo $mynamelovelace#使用${#變量名}取得字符串長(zhǎng)度? 比較常用[root@lovelace 51cto]# echo ${#myname}8#使用${expr length “$變量名”}取得字符串長(zhǎng)度[root@lovelace 51cto]# len=$(expr length "$myname")[root@lovelace 51cto]# echo $len8#使用${expr “$變量名” : '.*'}取得字符串長(zhǎng)度[root@lovelace 51cto]# len=$(expr "$myname" : '.*')[root@lovelace 51cto]# echo $len8

?

變量擴(kuò)展:對(duì)比樣式
????由字符串前面對(duì)比,刪除最短的
?????????${變量#樣式}
????由字符串前面對(duì)比,刪除最長(zhǎng)的
?????????${變量##樣式}

1234567891011#定義一個(gè)變量[root@lovelace 51cto]# path=$(pwd)#查看變量值[root@lovelace 51cto]# echo $path/home/scripts/51cto#使用對(duì)比樣式[root@lovelace 51cto]# echo ${path#*/}home/scripts/51cto#此對(duì)比樣式可以取得目錄名[root@lovelace 51cto]# echo ${path##/*/}51cto


????由字符串后面對(duì)比,刪除最短的
?????????${變量%樣式}
????由字符串后面對(duì)比,刪除最長(zhǎng)的
??????????${變量%%樣式}

12345#使用此對(duì)比樣式可以取得路徑名[root@lovelace 51cto]# echo ${path%/*}/home/scripts#使用此對(duì)比樣式?jīng)]有任何數(shù)據(jù)輸出[root@lovelace 51cto]# echo ${path%%/*}

?

至于對(duì)比樣式可以根據(jù)自己的思考來(lái)獲得,這個(gè)沒(méi)有固定的格式

?


取代或刪除部分字符串:
????只替換第一個(gè)對(duì)比符合的字符串
????????${變量/樣式/替換字符串}
????替換所有符合的字符串
????????${變量//樣式/替換字符串}

123456789#定義一個(gè)變量[root@lovelace 51cto]# echo $mynamelovelace#替換第一次出現(xiàn)的l為F[root@lovelace 51cto]# echo ${myname/l/F}Fovelace#替換字符串中所有l(wèi)為F[root@lovelace 51cto]# echo ${myname//l/F}FoveFace

?


刪除對(duì)比符合的字符串
????只刪一個(gè)
????????${變量/樣式/}
????刪除全部
????????${變量//樣式/}
????#T??行首位置
????%LE??最后面
???

123456789#定義一個(gè)變量獲取IP地址相關(guān)的信息[root@lovelace 51cto]# tmp=$(ifconfig eth0 | grep 'inet addr')#刪除對(duì)比樣式成功的字符串 然后賦值給變量r[root@lovelace 51cto]# r=${tmp/inet addr:/}#刪除對(duì)比樣式成功的字符串 然后賦值給變量ip[root@lovelace 51cto]# ip=${r/ Bcast*/}#打印出變量ip 查看是不是我們想要的結(jié)果[root@lovelace 51cto]# echo $ip192.168.2.54


變量擴(kuò)展:取變量名稱(chēng)列表、數(shù)組索引列表
取變量名稱(chēng)列表:
????????${!開(kāi)頭字符串@}或${!開(kāi)頭字符串*}

12345[root@lovelace 51cto]# myname=lovelace;mytest=51cto[root@lovelace 51cto]# echo ${!my@}myname mytest[root@lovelace 51cto]# echo ${!my*}myname mytest

取數(shù)組索引列表:
????????${!數(shù)組變量[@]}或${!數(shù)組變量[*]}

123456#取得數(shù)組a的所有值[root@lovelace 51cto]# echo ${a[@]}hello 2 3 nick#取得數(shù)組a的索引項(xiàng)[root@lovelace 51cto]# echo ${!a[@]}0 1 2 3

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/client-server/p/5519935.html

總結(jié)

以上是生活随笔為你收集整理的bash脚本编程之一 变量、变量类型等的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。