Bash
Bash:如何從數組中獲取值以從中創建命令
是否可以使用 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
並且選項通過(webserver
或database
)作為$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