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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/4/15 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bash脚本编程之一 变量、变量类型等 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

變量的內容

1、變量命名:

? ? ? ? ? ?1、只能包含字母、數字和下劃線,并且不能以數字開頭,
????2、不應該跟系統中已有的環境變量重名
????3、最好能見名知意

?

2、變量賦值:

設置變量:
變量名稱=值

fld_name=value?等號兩邊不能有空格

注意:用echo 顯示變量名的值時,需要用$符號。?

?

?

針對數字,你可以可以這樣為變量賦值,定義一個變量的類型:

?

?

3、變量類型:

環境變量:
????本地變量(局部變量):
????位置變量:
????特殊變量(系統變量):

本地變量:作用域為整個bash進程
????varname=value
局部變量:作用域只對當前代碼段有效
????local?varname=value

環境變量:作用域為當前shell進程及其子進程
????export?varname=value?"導出“

任意腳本在執行時會啟動一個子shell進程,
????????命令行中啟動的腳本會繼承當前shell的環境變量
????????系統自動執行的腳本(跟命令行無關)就需要自我定義需要的各環境變量
位置變量:
????$1,$2,....

特殊變量:保持某些特殊數據
????????$??上一個命令執行狀態返回值
????????$#?參數的個數
????????$*?參數列表
????????$@?參數列表
????????$0??命令本身??腳本本身

????執行腳本時的腳本路徑及名稱

程序執行一般有兩類返回值??
????程序執行結果;
????執行狀態返回代碼(0-255)
????????????0表示正確
????????????1-255:錯誤執行?1,2,127?系統預留?有特殊意義

?

4、變量取消:

unset ? varname

撤銷fld_name域的值?

?查看當前shell中的變量

?set??不帶任何參數和選

?

?

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

?

?

?

?

?

5、取得變量值:

$變量名稱
${變量名稱}??$(x)?這個可以用來當做命令調用

如果變量在語句當中被引用,必須要使用${x}才可以,取得數組的變量值時候也需要使用${}來調用

?

?關于變量和引號的關系:

????單引號:所見即所得
????雙引號:使特殊符號生效

?

?


?

6、調整變量的屬性:

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

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

?

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

?

?

?2、declare?命令?

????????-r:設定只讀變量
????????-p:顯示變量的屬性
????????-a:變量是一個數組
????????-f:搜尋命令時,只找函數
????????-i:變量是一個整數
????????-F:顯示所有的函數式名稱及其屬性
????????-t:設立變量具有trace屬性
????????-x:設定環境變量

?

7、數組:??

?

?是一種數據結構,有相關的數據項組成,每個數據項,稱為數組的元素,且可采用索引的方式取得個元素的值
數組賦值:

1、單個賦值,以index作為索引號,索引號從0開始

# 為數組賦值

?

?#顯示數組中所有值方法一

$echo ?${a[*]}?

?

?

?#顯示數組中所有值方法二

$echo ?${a[@]}?

?

?

#為數組添加數據項

?

?

2、使用小括號為數組賦值

?

? ? a=(1000 2000 3000)?默認空格隔開

?#為數組b賦值? 記住是小括號,不是大括號

?

?

#打印出第一個和第4個數據項

?

?

?

3、為數組中的某一個數據項賦值,默認是從0開始,如果中間出現未比標示的索引項,則從前一個索引項開始計算

?

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

#為數組賦值 ?#打印出數組中所有值 ??

?

?

#驗證中間出現的數值是從哪個索引項開始算起的

?

?數組d[7]測試:

?

?

?顯示賦值:

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

?

?數組元素及個數:

?

?

?

?8.高級變量

${變量名稱}??變量擴展
$(命令)??????命令替換
$((算術式))??算術擴展

?

?

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

?

?

?測試變量不存在或為空,傳回一個默認值

?${myname:-'nick'}?如果待測變量不存在或為空,傳回-后的值,存在則傳回變量的

賦值給變量chen:?

?

?

測試變量不存在或為空,給變量設定一個默認值
????${count:=100}?若變量coutn沒有值或為空,則把待測變量設定為默認值,

測試變量不存在或為空,傳回錯誤信息
????${myname:?"your?input?error"}

?

?

?

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

?

? ? ?:??空??????????????測空置
????-???負向 ? ? ? ? ? ? ? ? 測不存在
????+???正向 ? ? ? ? ? ? ? ? 測存在
???????有問題????????????檢查是否完備后再來執行吧
????=???設值 ? ? ? ? ? ? ? ? 給控值變量設定一個默認值

?

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

?

?

$((算術式))算術擴展:

?

?

?


?----借鑒:

字符串切片是從0開始的?在使用${}的時候?大括號內的變量引用前面的$可以不寫
????????${變量:位置起點}???${myname:3}
????????${變量:位置起點:長度}

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

????

取部分參數:
????????命令行參數是從$1開始的依次類推,$@代表所有參數,命令本身使用$0來表示
????????${@:起點}:由點開始,取得后面的所有的位置參數
????????${@:起點:個數}:由起點開始,取得指定個數的位置參數
示例腳本

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

?

執行結果:

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

?

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

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

?

變量擴展:對比樣式
????由字符串前面對比,刪除最短的
?????????${變量#樣式}
????由字符串前面對比,刪除最長的
?????????${變量##樣式}

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


????由字符串后面對比,刪除最短的
?????????${變量%樣式}
????由字符串后面對比,刪除最長的
??????????${變量%%樣式}

12345#使用此對比樣式可以取得路徑名[root@lovelace 51cto]# echo ${path%/*}/home/scripts#使用此對比樣式沒有任何數據輸出[root@lovelace 51cto]# echo ${path%%/*}

?

至于對比樣式可以根據自己的思考來獲得,這個沒有固定的格式

?


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

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

?


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

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


變量擴展:取變量名稱列表、數組索引列表
取變量名稱列表:
????????${!開頭字符串@}或${!開頭字符串*}

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

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

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

?

?

轉載于:https://www.cnblogs.com/client-server/p/5519935.html

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。