bash的一些特性

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

(0)
M20-1馬星M20-1馬星
上一篇 2016-08-24
下一篇 2016-08-24

相關推薦

  • N25-第四周作業

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其他用戶均沒有任何訪問權限。 1.  [root@jizo etc]# ls –d skel 2.  skel 3.  [root@jizo etc]# cd /home 4.  [root@jizo …

    Linux干貨 2016-12-26
  • bash特性及配置文件

    bash配置文件     兩類:         profile:為交互式登錄shell提供配置         bashrc:為非交互式登錄shell提供配置…

    Linux干貨 2016-08-31
  • Linux基礎 & bash基礎特性

    Q1:描述計算機的組成及其功能。 計算機的組成:運算器、控制器、存儲設備、輸入設備、輸出設備。 運算器: 運算器是計算機中執行各種算術和邏輯運算操作的部件。運算器的基本操作包括加、減、乘、除四則運算,與、或、非、異或等邏輯操作,以及移位、比較和傳送等操作,亦稱算術邏輯部件。 存儲設備: 計算機總是需要記錄與讀取數據的,而這些數據當然不可能每次都由用戶經過鍵盤…

    Linux干貨 2016-10-30
  • lamp平臺 php解析器基于模塊和php-fpm

    首先,我先介紹一下實驗環境: http服務器:192.168.236.128(php解析器基于modules) mysql服務器:192.168.236.129 編譯和配置http服務器,http版本是2.4以上的。 由于http依賴于apr apr-util這兩個包,但是我們系統上的rpm包版本比較低,我們也需要下載這兩個源碼包來編譯,解決依賴關系。 還要…

    Linux干貨 2015-08-31
  • sed文本處理工具

    Sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個文件,簡化對文件的反復操作,編寫轉…

    Linux干貨 2017-12-02
  • N26——第三周作業

    一、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可 [root@localhost ~]# who | cut -d ' ' -f1 | uniq root zhaoyujia 二、取出最后登錄到當前系…

    Linux干貨 2017-01-14
欧美性久久久久