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
下一篇 2016-08-24

相關推薦

  • 文件系統磁盤管理上

    磁盤:主要作用用于存儲數據 早期一塊硬盤共有256個盤面,每個盤面有1024個磁道,每個磁道有63個扇區,每個扇區的大小是512byte 硬盤的命名: 早期IDE硬盤標記為hd scsi、usb、sas標記為sd 引用設備的方式 設備文件名 標卷 UUID 硬盤分區: 第0個磁道的第0個扇區存放的是磁盤的信息 MBR:Master Boot Record 主…

    Linux干貨 2016-08-30
  • CentOS 6啟動過程總結與GRUB問題修復

    一、CentOS 6 的啟動流程 第一步:加電自檢(POST) 主要檢查硬件設備是否存在并能正常運行,如:CPU、內存、硬盤、風扇、輸入輸出設備等。自檢功能主要是通過BIOS來實現的,BIOS程序是裝載在一個硬件芯片CMOS上的,加電過程就是給CMOS通電,然后啟動BIOS程序,BIOS程序會根據CMOS上面的一些配置信息區讀取其他的硬件設備信息并檢測其是否…

    Linux干貨 2016-09-16
  • 機器學習排序

     從使用的數據類型,以及相關的機器學習技術的觀點來看,互聯網搜索經歷了三代的發展歷程。        第一代技術,將互聯網網頁看作文本,主要采用傳統信息檢索的方法。        第二代技術,利用互聯網的超文本結構,有效…

    Linux干貨 2015-12-15
  • 馬哥教育網絡班第19期+第8周課程練習

    1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。 網橋:一種網路裝置,負責網路橋接,將網絡的多個網段在數據鏈路層連接起來。 集線器:將多條以太網線或光纖集合連接在同一段物理介質下的裝置。工作在物理層。 二層交換機:工作在數據鏈路層,交換機內部的CPU會在每個端口成功連接時,通過將MAC地址和端口對應,形成一張MAC表。在今后的通…

    Linux干貨 2016-08-22
  • IP地址的劃分及優化

    IP地址定義:互聯網協議地址(英語:Internet Protocol Address,又譯為網際協議地址),是IP Address的縮寫。IP地址是IP協議提供的一種統一的地址格式,它為互聯網上的每一個網絡和每一臺主機分配一個邏輯地址,所以它可以唯一標識IP網絡中的每臺設備,同時沒臺主機(計算機,網絡設備,外圍設備)必須具有唯一的地址。 IP地址相比于MA…

    Linux干貨 2017-07-02
  • NFS 實現wordpress同步

    NFS 0x00 NFS概述 0x01 NFS實現原理 0x02 NFS 相關配置及命令 0x03 NFS實踐作業(一) 實驗要求: 實驗環境: 實驗步驟: 0x04 NFS實踐作業(二) 實驗要求: 實驗環境: 實驗步驟: 0x05 常見問題 0x00 NFS概述 網絡文件系統(英語:Network File System,縮寫為NFS)是一種分布式文件系…

    2017-04-30
欧美性久久久久