Bash

Bash:如何從數組中獲取值以從中創建命令

  • March 26, 2016

是否可以使用 bash 從配置文件中以下語法提供的數組中獲取字元串?

|        | Version | PackageManager | Webserver | Database |
|--------|---------|----------------|-----------|----------|
| Centos | 7       | yum            | httpd     | mariadb  |
| Ubuntu | 14.04   | apt-get        | apache    | mysql    |

精確”:

從 bash 腳本(bootstrap.sh)中,我希望能夠編寫一行來安裝一個包,例如“./install.sh -webserver”,以根據伺服器作業系統安裝 httpd 或 apache .

要求

  • 在 bootstrap.sh 中,我只需呼叫 ./install.sh -webserver”,它包含檢查哪個是目前伺服器作業系統以及是否支持伺服器作業系統的邏輯

  • 檢查要安裝的內容(-webserver)

-查看轉換錶為相關作業系統選擇正確的包管理器和包名稱

  • 並在 bootstrap.sh 中返回所需的命令 (yum install httpd) 以安裝 httpd

我知道這看起來很奇怪,但是非常感謝您的幫助。

如果我理解正確,您需要一個將作業系統作為輸入的命令,並通過閱讀您顯示的表格返回正確的安裝命令。如果您的表格確實是您顯示的格式,包括對人類有用但對機器無用的格式|-,您可以執行以下操作來獲取網路伺服器:

awk -vOS="Centos" '$2==OS{print $6,"install",$8}' table 

這對於數據庫:

awk -vOS="Centos" '$2==OS{print $6,"install",$10}' table 

實際輸出將是:

$ awk -vOS="Centos" '$2==OS{print $6,"install",$8}' table 
yum install httpd

$ awk -vOS="Centos" '$2==OS{print $6,"install",$10}' table 
yum install mariadb

$ awk -vOS="Ubuntu" '$2==OS{print $6,"install",$8}' table 
apt-get install apache

$ awk -vOS="Ubuntu" '$2==OS{print $6,"install",$10}' table 
apt-get install mysql

如果您的表格採用更簡單的格式,例如:

        Version  PackageManager  Webserver  Database 
Centos  7        yum             httpd      mariadb  
Ubuntu  14.04    apt-get         apache     mysql    

以上將變為:

awk -vOS="OS_NAME" '$1==OS{print $3,"install",$4}'
awk -vOS="OS_NAME" '$1==OS{print $3,"install",$5}'

因此,在您的腳本中,假設您將作業系統保存為$os並且選項通過(webserverdatabase)作為$option,您可以執行以下操作:

case $option in
    "webserver")
        commmand=$(awk -vOS="$os" '$2==OS{print $6,"install",$8}' table ) ;;
     "database")
         command=$(awk -vOS="$os" '$2==OS{print $6,"install",$10}' table) ;;
esac

引用自:https://unix.stackexchange.com/questions/272276