SHELL編程之數組運用及YUM軟件包管理

SHELL編程中,當要引用到多個值的時候,一個一個地進行變量賦值會讓我們的腳本變得繁瑣,不利于代碼的優化,所以,就需要通過數組進行定義,優化代碼,減少不必要的定義和命令操作。

SHELL中的數組:存儲多個元素的連續內存空間

數組名:整個屬組只有一個名字

數組索引: 編號從0開始

  數組名[索引]

  ${array_name[index]}

注:bash-4及之后的版本,支持自定義索引,而不僅僅是0,1,2,3.。。數字格式

  此類屬組稱之為”關聯數組”

blob.png

聲明數組:

  Declare -a 聲明一個索引數組

        -A 聲明一個關聯數組

數組中元素賦值方式

  1.一次只賦值一個元素

    Array_name[index]=value

    直接引用數組名,顯示第一個元素

  2. 一次賦值全部元素

    Array_name=(“val1” “val2” “val3” …)

  3.只賦值特定元素

    Array_name=([1]=”val1” [3]=”val2” …)

    稀疏格式的屬組                 

blob.png

  4. read –a array

    引用數組中的元素:${array_name[index]}

    引用時,只給數組名,表示引用下標為0的元素

    ${array_name[*]/[@]}引用數組中的所有元素

數組長度(數組中元素個數)

     ${#array_name}

    ${#array_name[*]/[@]}

    $(#array_name)不加[]表示顯示屬組中第一個元素的長度

blob.png

Declare –A 聲明關聯數組

引用數組中所有元素

    ${array_name[*]/[@]}

數組元素切片:${array_name[@]:offset:number}

   Offset 要跳過的元素個數

   Number: 要取出的元素個數,省略number,表示取偏移量后面的所有元素

向非稀疏格式數組中追加元素

   Array_name[${#array_name[*]}]=

刪除數組中某個元素

   Unset array_name[index]

關聯數組

     Declare –A array_name

   Array_name=([index_name1]=”val1” [index_name2]=”val2” …)

    

Bash的內置字符串處理工具

   字符串切片:

   ${var:offset:number}

   取字符串子串

   ${var: -4} 有空格

   取字符串的最右側的幾個字符 冒號后面有一個空白字符

   基于模式取子串

   ${var#*word} word是指遞歸的分隔符,功能:自左而右,查找var變量所存儲的字符串第一次出現word的分隔符,刪除字符串開頭至此分隔符之間的所有字符

   ${var##*word} word是指遞歸的分隔符,功能:自左而右,查找var變量所存儲的字符串直到最后一次出現word的分隔符,刪除字符串開頭至此分隔符之間的所有字符

    mypath=”/etc/init.d/functions”

    echo ${mypath##*/}: functions

    echo ${mypath#*/}: etc/init.d/functions     

   ${var%word*} : word是指遞歸的分隔符,功能:自右而左,查找var變量所存儲的字符串直到第一次出現word的分隔符,刪除此分隔符至字符串尾部之間的所有字符

   ${var%%word*}: word是指遞歸的分隔符,功能:自右而左,查找var變量所存儲的字符串直到最后一次出現word的分隔符,刪除此分隔符至字符串尾部之間的所有字符

    mypath=”/etc/init.d/functions”

   ${mypath%/*}: /etc/init.d

     blob.png   

   

查找替換:

     ${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風格的通配符

    blob.png

 

查找刪除

     ${var/pattern}: 以pattern查找為模式,查找var字符串中第一次的匹配,并刪除值

    ${var//pattern}:以pattern查找為模式,查找var字符串中所有的匹配,并刪除值

    ${var/#pattern}:以pattern查找為模式,查找var字符串中行首第一次匹配,并刪除值                

    ${var/%pattern}:以pattern查找為模式,查找var字符串中行尾第一次匹配,并刪除值

 

大小寫轉換

     ${var^^} 把var中所有小寫字符轉換為大寫

    ${var,,} 把var中所有大寫轉換為小寫

         blob.png

變量賦值

     ${var:-value} 如果var變量為空,或未設置,那么返回為value, var不為空,則返回var

    ${var:=value} 如果var變量為空,或未設置,那么返回為value,并將value賦值給var變量, var不為空,則返回var

    ${var:+value} 如果var變量為不為空,那么返回為value

    ${var:?ERROR_INFO} 如果var為空,或未設置,那么返回ERROR_INFO為錯誤提示,否則返回var的值

     blob.png            

Declare 變量聲明

    -i 聲明為數值類型   declare -i a=awed 則a的值變為0

    -r 聲明為只讀變量   declare -r a=hello

    -a 聲明為普通數組   declare -a a  a[0]=value  索引默認從0開始的數字

    -A 聲明為關聯數組   declare -A a  a[a]=value  索引可以自己指定

    -f 查看聲明的函數及內容    declare –f

    -F 查看聲明的函數名       declare -F

    -l 將聲明的變量字符全轉化為大寫   declare –l a=XYZ  則a的值為xyz

    -u將生命的變量字符全轉化為小寫    declare –u a=xyz  則a的值為XYZ

    echo ${a^^} 將數組中的小寫全轉化為大寫

    echo ${a,,} 將數組中的大寫全轉化為小寫

blob.png

YUM軟件包管理    

   YUM(Yellowdog Update Modifer),rpm的前端程序,用來解決程序的依賴性,可以在多個庫之間定位軟件包。

blob.png

   搜索:

    search string1 [string2]…

    以指定的關鍵字搜索程序包名及summary信息

   查看指定包所依賴的capability

    deplist package1 [package2]…

   查看yum事物歷史

    history [info|list|package-list|package-info|summary|addon-info|undo|rollback|new|sync|stats] 

   軟件包組管理

    groupinstall group1 [group2]…

    groupupdate group1 [group2]…

    grouplist [hidden] …

    groupremove group1 [group2]…

    groupinfo group1 [group2]… 

   YUM的命令行選項

    –nogpgcheck 禁止gpg檢查

    -y 默認回答yes

    -q 靜默模式

    –disablerepo=repoidglob 臨時禁止此處指定的repo

    –enablerepo=repoidglob 臨時啟用此處指定的repo

    –noplugins 禁止所有插件

    

程序包編譯

   程序包編譯安裝:

    Application-Version-release.src.rpm安裝后,使用rpmbuild命令制作成二進制格式的rpm包,而后再安裝

    源代碼–>預處理–>編譯–>匯編–>鏈接–>執行

   

   C代碼編譯安裝三步驟

    1. ./configure 

      1)通過選項傳遞參數,指定啟用特性,安裝路徑等,執行時會參考用戶的指定以及makefile.in文件生成makefile

      2)檢查依賴到的外部環境

    2. make 根據makefile文件構建應用程序

    3. make install 復制文件到相應路徑

    注意:安裝前查看install readme文件,獲取相關信息

源碼安裝http服務

    1.先從ftp服務器上下載相應要安裝的源碼包

    blob.png

    2.解壓縮源碼包

    blob.png、

    3.編譯安裝前先查看其install和readme文檔,獲取相關信息

    blob.png

    blob.png

    4. ./configure –help可以獲取相關選項的參數

    blob.png

    5. ./configure編譯 –prefix指定安裝路徑

    blob.png

    6 make

    blob.png

    7 make install

    blob.png

    8 編譯安裝完成后,可以查看相應安裝的文件

    blob.png

    9 將編譯的程序導入到環境變量中

    blob.png

    10 將程序使用的庫文件導入到庫中,ldconfig重新加載庫緩存

    blob.png

    blob.png

    11 導入頭文件

    blob.png

    12 導入幫助文件

    blob.png

    13 啟動服務

    blob.png

    14 訪問ip對應80端口 如links

    blob.png    

緊急模式恢復受損的kernel文件

    1.查看kernel版本信息

    blob.png

    2.rpm -e kernel –nodeps 進入救援模式

    blob.png

    blob.png

    3 查看分區掛在情況

    blob.png

    4 rpm -ivh /run/install/repo/Packages/kerner*.rpm –root=/mnt/sysimage

    blob.png

    

    5 重啟

    blob.png

輸入若干個數值存入數組中,采用冒泡算法進行升序或降序排序

    blob.png

    blob.png

原創文章,作者:Stupid_L,如若轉載,請注明出處:http://www.www58058.com/39280

(0)
Stupid_LStupid_L
上一篇 2016-08-24 10:12
下一篇 2016-08-24 10:12

相關推薦

  • Puppet 的使用與進階

    Puppet 基于puppet 可實現自動化重復任務, 快速部署關鍵性應用以及在本地或云端完成主動管理變更和快速擴展架構規模.基于master/agent 模型. 基于RPC 的通信, 基于xml 進行數據交換 define : 使用puppet 語言來定義資源的狀態模擬 : 根據資源關系圖, puppet 可以模擬部署無損運行測試代碼強制 : 對比客戶端主…

    2016-12-04
  • DNS詳解

    概述     互聯網訪問絕大多數都是基于域名的訪問,互聯網訪問的基礎是基于IP來實現的,因此,需要有一種將域名解析成IP的機制,讓用戶在利用域名訪問時,自動將域名轉換成為對應的IP,這就是DNS的功能,本章將介紹一些DNS相關的內容,具體分為:     1、DNS的基礎概念 &n…

    Linux干貨 2016-10-08
  • N25第一周作業

    個人習慣用導圖寫的作業

    Linux干貨 2016-12-04
  • Linux第五周總結

    1、顯示當前系統上root、fedora或user1用戶的默認shell 2、找出/etc/rc.d/init.d/functions文件中某單詞后面跟一組小括號的行,形如:hello(); 3、使用echo命令輸出一個絕對路徑,使用gerp取出其基名;     擴展:取出其路徑名 4、找出ifconfig命令結果中的…

    2017-07-30
  • 文件查找工具之——find

        前言:Linux一切皆文件,在linux的系統中如果我們需要找到所需的文件,除了一步一步慢慢找,還有一種辦法就是要使用Linux中查找文件工具命令,能讓我們很快定位到我們所需的文件。所以我們必須要學好文件查找工具 一、首先我們先要了解文本搜索和文件查找的區別     文本…

    Linux干貨 2015-07-06
  • Linux發展史

    Linux發展史 摘要:因為學習linux過程中對整個linux發展歷史只有一些模糊的理解,以本文來對linux發展史進行梳理來加深學習。   一、linux是什么 linux就是一套操作系統,如下圖操作系統就是內核與系統調用接口那 Linux只是一套操作系統并不包含其他應用程序。 Linux提供了一個完整的操作系統當中最底層的硬件控制和資源管理的…

    Linux干貨 2016-10-14
欧美性久久久久