1. 程式人生 > >bash的基礎特性 數值運算 數值大小比較 環境變量 位置變量 正則表達式

bash的基礎特性 數值運算 數值大小比較 環境變量 位置變量 正則表達式

標準 實現 自動 面試 .... count 輸入 expr 都是

變量類型:
數據存儲格式,儲存空間大小,參與變量種類
字符型
數值型:
整數型
浮點型
強類型的:定義變量時必須指定變量類型,參與運算必須符合類型要求。
弱類型的:定義變涼時無需指定類型,所有的全是字符型,參與運算會自動進行隱式類型轉換。變量無需定義,可直接使用...
bash中的變量種類:
根據變量的生效範圍等標準
本地變量:生效範圍為當前shell的生命周期,對當前shell其他之外的shell和當前shell的子shell都不生效,重啟也失效。
環境變量:生效範圍為,當前shell進程和其子shell都生效。
局部變量:生效範圍為當前shell的某代碼片段(通常指定函數)
位置變量:類似於grep中 前面I() 後面使用 \1, \2...這樣的表達式,$1 $2 .....來表示 用於讓腳本在腳本代碼中調用通過命令傳遞給他的參數...
特殊變量:$? $0 其中$0在腳本中使用的話 為輸出腳本名稱

本地變量:
    變量賦值: name=“vlove”
                可以使用引號
                    1)可以直接給與字符串 name=usermane,如果有空格加雙引號
                    2)也可是使用變量的值: name=$name 也可以使用雙引號
                    3)可以直接使用命令的值:name=$(COMMAND)
                            第三個引用了命令執行的結果.... 必須使用小括號 或者使用反引號
                            name=·(command)·
            變量引用  $name  $(name)
                            強引用:單引號 ‘ ’  所見如所得,輸出字符串,如果字符串中有變量,也不會輸出變量的值
                            弱引用:雙引號,“” 如果雙引號裏面的變量,會先輸出變量的值。。。

技術分享圖片

    查看系統定義的所有變量:set
    取消定義的變量 unset “name”

    環境變量:
    變量聲明,賦值
    就是比本地變量的時候多了一個聲明
                    聲明可以使用 export,declare
                    export name=username 或者 declare -x name=username
        引用變量和本地變量是一樣的
        查看環境變量 export
                                                            env
                                                            printenv 也可以把本地變量追加為環境變量 export Uname
    銷毀變量 也是 unset name

    bash有許多內建的環境變量
                PATH SHELL UID HOME  等等

變量命名法則:
            1、不能使用程序中的保留字,如:if for等
            2、只能使用大小寫字謎,下劃線數字,但是不能使用數字開頭
            3、見名知意  ,有些編程人員的壞習慣,隨便復制隨便起名,現在知道可能明天就不知道了,所以起名要有特殊含義!

變量引用: $name , $(name)
" "弱引用 強引用‘ ’ 和上面類似
位置變量《》
在腳本代碼中請用通過命令行傳遞給腳本的參數。。
$1 $2.......對應調用第1,第2.....等參數。
shift[n] 刪除參數。。。也有一些特殊的參數
$*:傳遞給腳本的所有參數
$@:傳遞給腳本的所有參數
br/>也有一些特殊的參數
$*:傳遞給腳本的所有參數
$@:傳遞給腳本的所有參數
實例:判斷給出的文件的行數
#!/bin/bash
linecount="$(wc -l $1| cut -d‘ ‘ -f1)
echo "$1 hai $linecount lines"

bash的配置文件
            全局配置:對所有shell user都生效的
                    /etc/profile
                                    /etc/profile.d/*.sh結尾的所有文件
                /etc/bashrc
            個人配置:只對當前用戶生效
                    ~/.bashrc
                    ~/.bash_profile
按照功能劃分 也是兩類
        profile類別  為交互式登錄的shell提供配置
        全局 /etc/paofile 、 /etc/profile.d/*.sh
        個人:  ~/.bash_profile
            功用:
                            (1),用於定義環境變量
                            (2)、運行命令或者腳本
        bashrc類:為非交互式登錄的shell提供配置
                        全局:/etc/bashrc
                        個人:~/.bashrc
                        功能使用:
                                    (1)、定義命令別名
                                    (2)、定義本地變量
                    交互式登錄:直接通過終端輸入賬號密碼登錄
                                                            :使用su - username這樣切換的用戶
                    非交互式登錄:su Username切換的
                                                                :圖形界面下打開的終端(都是偽終端)
                                                                :執行腳本
                    後期編譯安裝mysql或者是apache的時候需要把他們的環境變量定義到系統的環境變量中,要不總得去他們自己的絕對路徑中調用
                    這就需要修改/etc/profile配置文件 或者是其.d下面的配置文件
                    如:PATH=$PATH:/usr/local/mysql/bin
                    export PATH
                    修改完成後直接保存
                    但是必須要重新交互式登錄shell 才能生效
                    當然也可是使用 . /etc/profile.d/*.sh來生效
                    也可以使用 source 絕對路徑來生效 但是source會有一個副作用,就是source一次就會多一次路徑

算數運算表達式(也是賦值後變量的引用)
            num1=1
            num2=2
                                算他們的合 則是 
                                var= $[$num1+num2]var=$(($num1+num2))
在一個數值範圍內隨機取出數字,(好像有的面試題中有)
                                這個就用到了bash中的內建變量
                                隨機數生成器$RANDOM
        在80以內隨機取值 例如:
        echo $[$RANDOM%80+1]後面的+1  是因為前面的80 只到79
        其實也是算數運算表達式

增強型賦值(符號)
+=,-=,*=,/=,%=

let 變量 符號

條件測試:
判斷某需求是否滿足,需要由測試機制來實現:
專用的測試命令表達式需要由測試命令輔助完成測試過程:

                測試命令:
                            text EXPRESSION
                            [ EXPRESSION ]
                                [[ EXPROSSION ]]
        中括號之間前後必須要有空格
        數值測試:
        gt大於
        ge大於等於 
        eq 是否等於 
        ne 是否不等於 
        lt 小於 
        le是否小於等於
        字符串測試:(在使用for循環的時候會用到,判斷字符串是否為空等)
        ==:是否等於
        >:是否大於
        <:是否小於
        -z:是否為空,空為真
        -n:測試字符串是否不空,不空則為真
        !=:是否不等於
        =~:左側字符串是否能被右側的PATHERN所匹配
                        此表達式一般要使用[[  ]]  雙中括號           

技術分享圖片
以上判斷了變量name的第一個字母是否為f
***用於字符串比較的其中的操作數都要使用引號

技術分享圖片
練習:寫一個腳本
接受一個文件路徑作為參數
如果參數個數小於1,則提示用戶至少給一個參數。。。
如果岑姝個數不小於1,則顯示第一參數所指向的文件中的空白行的行數

技術分享圖片

bash的基礎特性 數值運算 數值大小比較 環境變量 位置變量 正則表達式