shell編程筆記,shell編程

來源:互聯網
上載者:User

shell編程筆記,shell編程
1.Bash變數
    使用者定義變數 #局部變數
    環境變數 #全域變數
    位置參數變數
    預定義變數
    
    x=val #賦值
    $x #調用
    變數預設為字元型,不能直接運算
    "$x" ${x}  變數疊加,即字串

    set #查看系統所有變數
        -u 當變數不存在時報錯
    unset #清空變數

    pstree #查看進程樹

    export x #把x變成環境變數

    PATH="$PATH":/root

    PS1變數
        \d 顯示日期 "星期 月 日"
        \H 顯示完整主機名稱
        \t "HH:MM:SS"
        \A "HH:MM"
        \u 目前使用者名
        \w 當前所在目錄的完整名稱
        \W 當前所在目錄的最後一個目錄
        \$ 提示符

    語系變數
        echo $LANG #當前語系環境
        locale -a | more #所有語系環境
        /etc/sysconfig/i18n #預設語系環境,下次開機啟用

    位置參數變數
        $n n為數字,$0表示命令本身,$1-$9表示第一到第九個參數,十個以上的${10}
        $* 代表命令列中所有的參數,一個整體
        $@ 命令列所有參數,分開看
        $# 命令列參數的個數

    預定義變數
        $? 最後一次執行的命令的返回狀態,為0則正確
        $$ 當前進程pid
        $! 後台啟動並執行最後一個進程的pid

    read [選項] [變數名]
        -p "提示資訊" : 輸出提示資訊等待輸入
        -t 秒數 : 指定等待輸入時間
        -n 字元數 : 只接受指定字元數的輸入
        -s : 輸入不回顯

2. 運算子
    declare [+/-][選項] 變數名  #變數型別宣告
        +取消變數類型屬性
        -設定類型屬性
        -a 聲明為數組
        -i 整型
        -x 環境變數
        -r 唯讀  #聲明為唯讀變數完全不能操作!!!
        -p 顯示類型

    聲明數組
        movie[0]=zp
        movie[1]=tp
        declare -a moive[2]=live
    查看數組
        echo ${movie}
        echo ${movie[2]}
        echo ${movie[*]}

    export 變數名 <==> declare -x 變數名

    declare -p #列出系統所有變數類型


    數值運算
        expr let
            dd=$(expr $aa + $bb)
        $((運算式))
            ff=$(($aa+$bb))
        $[運算式]
            gg=$[$aa+$bb]

    變數測試
        #在指令碼最佳化時使用
        #具體訪問www.imooc.com/video/6832
    
3. 環境變數設定檔(啟動時按順序載入)
    source 設定檔 #. 設定檔
    /etc/profile
    /etc/profile.d/*.sh
    ~/.bash_profile
    ~/.bashrc
    /etc/bashrc #裡面定義了PS1,即登入提示符

    umask #查看系統預設許可權----w--w-
    檔案最高許可權為666 #rw-rw-rw-
    目錄最高許可權為777 #rwxrwxrwx
    許可權不能使用數字進行換算,而必須使用字母
    umask定義的許可權,是系統預設許可權中準備丟棄的許可權~

    登出時生效的環境變數設定檔
    ~/.bash_logout #登出配置
    ~/.bash_history #儲存曆史命令,當前登入曆史命令存放在記憶體
        #/etc/profile HISTSIZE設定曆史命令儲存條數

    登入檔案 #只對本地終端有效
    /etc/issue #登入警告資訊
    可以顯示的轉義符
    \d 當前系統日期
    \s 作業系統名字
    \l 本機終端
    \m 硬體體系架構
    \n 主機名稱
    \o 網域名稱
    \r 核心版本
    \t 當前系統時間
    \u 當前登入使用者的序號

    遠程終端歡迎資訊 #不支援轉義符
    /etc/issue.net #在/etc/ssh/sshd_config加入"Banner /etc/issue.net"才能顯示(重啟sshd)

    登入後顯示資訊 #本地遠程均支援
    /etc/motd


4. 條件判斷
    檔案類型判斷,是則真
        -b 塊裝置
        -c 字元裝置
        -d 目錄
        -e 存在為真
        -f 普通檔案
        -L 連結檔案
        -p 管道檔案
        -s 非空為真
        -S 通訊端檔案
    
        test -e /root/install.log
        [ -e /root/install.log ]
        [ -d /root ] && echo yes || echo no

    檔案許可權判斷
        -r 讀
        -w 寫
        -x 執行
        -u SUID
        -g SGID
        -k SBit
    
    兩個檔案之間進行比較
        f1 -nt f2 判斷f1的修改時間是否比f2新
        f1 -ot f2 判斷f1的修改時間是否比f2舊
        f1 -ef f2 判斷Inode是否一致(判斷永久連結)

    兩個整數
        -eq -ne -gt -lt -ge -le

    字串判斷
        -z 字串 #為空白則真
        -n 字串 #非空則真
        字串1 == 字串2 #相等則真
        字串1 != 字串2 #不等則真

    條件陳述式
        if [ 條件判斷式 ];then
            程式
        fi
        #或者
        if [ 條件判斷式1 ]
            then
            條件成立,程式1
        elif [ 條件判斷式2 ]
            then
            條件不成立,程式2
        else
            程式
        fi

    case語句
        case $變數名 in
            "val1")
                part1
                ;;
            "val2")
                part2
                ;;
            *)
                part default
                ;;
        esac

    for迴圈
        for 變數 in val1 val2 val3 ...
            do
                程式
            done

        for (( i=1;i<100;i=i+1 ))
            do
                程式
            done

    while&until迴圈
        while [ 條件判斷式 ]
            do
                程式
                條件增量 #如 i=$(( $i+1 ))
            done

        until的條件判斷式與while相反

5. Regex
    grep awk sed 包含匹配 #正則
    ls find cp 完全符合 #萬用字元

    * 任意前個字元
    
    匹配日期
        [0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}
    匹配ip
        [0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}

    cut [選項] 檔案名稱 #欄位提取
        -f 欄位
        -d 分隔字元 #預設定位字元
        
    printf '輸出類型輸出格式' 輸出內容
        %ns 輸出幾個字元
        %ni 幾個數字
        %m.nf 幾位點幾的浮點數

    awk '條件1{動作1} 條件2{動作2}...' 檔案名稱 #複雜
        #df -h | grep "/dev/sda2" | awk '{print $5}' | cut -d "%" -f 1
        #awk 'BEGIN{print "..."}{...}'
        FS 指定分隔字元
        #cat /etc/passwd | grep /bin/bash | awk 'BEGIN{FS=":"}{print $1 "\t" $3}'
        #cat student.txt | grep -v Name | awk '$4>=70{print $2}'

    sed [選項] '[動作]' 檔案名稱
        #動作
            -a 追加
            -c 行替換
            -i 行前插入
            -p 列印
            -s
            -d 刪除行

    字元處理
        sort [選項] 檔案名稱
            -f 忽略大小寫
            -n 以數值型排序
            -r 反向排序
            -t 指定分隔字元
            -k n[,m] 按指定欄位排序,n開始m結束
        
        wc [選項] 檔案名稱
            -l 行
            -w 單詞
            -m 字元數

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.