bash的字符串處理工具
字符串切片:
${var:offset:number}
取字符串的子串;
取字符串的最右側的幾個字符:${var: -length}
注意:冒號后必須有一個空白字符;
基于模式取子串;
${var#*word}:
其中word是指定的分隔符;功能:自左而右,查找var變量中所存儲的字符串中,第一次出現word分隔符,刪除字符串開頭至此分隔符之間的所有字符;
${var##*word}:
其中word是指定的分隔符;功能:自左而右,查找var變量中所存儲的字符串中,最后一次出現word分隔符,刪除字符串開頭至此分隔符之間的所有字符;
mypath="/etc/init.d/funtions"
${mypath##*/}:funtions
${mypath#/}:etc/init.d/functions
${var%word*}:
其中word是指定的分隔符;功能:自右而左,查找var變量中所存儲的字符串中,第一次出現word分隔符,刪除此分隔符至字符串尾部 的所有字符;
${var%%word*}:
其中word是指定的分隔符;功能:自右而左,查找var變量中所存儲的字符串中,最后一次出現word分隔符,刪除此分隔符至字符串尾部 的所有字符;
=================================
mypath="/etc/inita.d/functions"
${mypath$/*}:/etc/init.d
url=http://www.magedu.com:80
${url##*:}
${url%%:*}
================================
查找替換:
${var/pattern/substi}:
查找var所表示的字符串中,第一次被pattern所匹配到的字符串,將其替換為substi所表示的字符串;
${var//pattern/substi}:
查找var所表示的字符串中,所有被pattern所匹配到的字符串,全部替換為substi所表示的字符串;
${var/#pattern/substi}:
查找var所表示的字符串中,行首被pattern所匹配到的字符串,將其替換為substi所表示的字符串;
${var/%pattern/substi}:
查找var所表示的字符串中,行尾被pattern所匹配到的字符串,將其替換為substi所表示的字符串;
注意:pattern中使用glob風格和通配符;
查找刪除:
${var/pattern}:
以pattern為模式查找var字符串中第一次的匹配,并且刪除之
${var//pattern}:
以pattern為模式查找var字符串中所有匹配到的字符串,并且刪除之
${var/#pattern}:
以pattern為模式查找var字符串中行首所匹配到的字符串,并且刪除之
${var/%pattern}:
以pattern為模式查找var字符串中行尾所匹配到的字符串,并且刪除之
字符大小寫轉換:
${var^^}:
把var中的所有小寫字符轉換為大寫;
${var,,}:
把var中的所有大寫字符轉換為小寫;
變量賦值:
${var:-value}:
如果var變量為空或未設置;那么返回value,否則,則返回var變量的值
${var:=value}:
如果var變量為空或未設置;那么返回value,并將value賦值給var變量;否則,則返回var變量的值
${var:+value}:
如果var變量不空;則返回value;
${var:?ERROR_INFO}:
如果var為空,或未設置,那么返回error_info為錯誤提示;否則,返回var值
高級變量用法
hell變量一般是無類型的,但是bash Shell提供了declare和
typeset兩個命令用于指定變量的類型,兩個命令是等價的
declare [選項] 變量名
-r 將變量設置為只讀屬性
-i 將變量定義為整型數
-a 將變量定義為數組
-A 將變量定義為關聯數組
-f 顯示此腳本前定義過的所有函數名及其內容
-F 僅顯示此腳本前定義過的所有函數名
-x 將變量聲明為環境變量
-l 將變量值轉為小寫字母 declare –l var=UPPER
-u 將變量值轉為大寫字母 declare –u var=lower
間接變量引用
如果第一個變量的值是第二個變量的名字,從第一個變量引
用第二個變量的值就稱為間接變量引用
variable1=variable2
variable2=value
variable1的值是variable2,而variable2又是變量名,
variable2的值為value,間接變量引用是指通過variable1獲
得變量值value的行為
bash Shell提供了兩種格式實現間接變量引用
eval tempvar=\$$variable1
tempvar=${!variable1}
示例:
[root@server ~]# N=NAME
[root@server ~]# NAME=ali
[root@server ~]# N1=${!N}
[root@server ~]# echo $N1
ali
[root@server ~]# eval N2=\$$A
[root@server ~]# echo $N2
ali
命令行展開
把命令行分成單個命令詞
展開別名
展開大括號種的聲明( {})
展開波浪符聲明( ~)
命令替換$() 和 “)
再次把命令行分成命令詞
展開文件通配( *、 ?、 [abc]等等)
準備I/0重導向( <、 >)
運行命令
防止擴展
反斜線( \)會使隨后的字符按原意解釋
$ echo Your cost: \$5.00
Your cost: $5.00
加引號來防止擴展
單引號( ’)防止所有擴展
雙引號( ”)也防止所有擴展,但是以下情況例外:
$(美元符號) - 變量擴展
`(反引號) - 命令替換
\(反斜線) - 禁止單個字符擴展
!(嘆號) - 歷史命令替換
bash的配置文件
按生效范圍劃分,存在兩類:
全局配置:
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
個人配置:
~/.bash_profile
~/.bashrc
shell登錄兩種方式
交互式登錄:
(1)直接通過終端輸入賬號密碼登錄;
(2)使用“ su – UserName” 切換的用戶
執行順序:
/etc/profile –> /etc/profile.d/*.sh –>
~/.bash_profile –> ~/.bashrc –> /etc/bashrc
非交互式登錄:
(1)su UserName
(2)圖形界面下打開的終端
(3)執行腳本
執行順序:
~/.bashrc –> /etc/bashrc –> /etc/profile.d/*.sh
Profile類
按功能劃分,存在兩類:
profile類和bashrc類
profile類:為交互式登錄的shell提供配置
全局: /etc/profile, /etc/profile.d/*.sh
個人: ~/.bash_profile
功用:
(1) 用于定義環境變量
(2) 運行命令或腳本
Bashrc類
bashrc類:為非交互式和交互式登錄的shell提供配置
全局: /etc/bashrc
個人: ~/.bashrc
功用:
(1) 定義命令別名和函數
(2) 定義本地變量
編輯配置文件生效
修改profile和bashrc文件后需生效
兩種方法:
1重新啟動shell進程
2 . 或source
例:
~/.bashrc
Bash 退出任務
保存在~/.bash_logout文件中(用戶)
在退出登錄shell時運行
用于
創建自動備份
清除臨時文件
原創文章,作者:M20-1馬星,如若轉載,請注明出處:http://www.www58058.com/39405