Bash:配列から値を取得してコマンドを作成する方法

Bash:配列から値を取得してコマンドを作成する方法

bashを使用して、構成ファイルに次の構文を指定した配列から文字列を取得できますか?

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

精密":
bashスクリプト(bootstrap.sh)で、サーバーOSに応じてhttpdまたはapacheをインストールするために、"./install.sh -webserver"などのパッケージをインストールする行を作成できるようにしたいです。

必要
- bootstrap.shは、現在のサーバーOSが何であるか、サーバーOSがサポートされているかどうかを確認するロジックを含む./install.sh -webserver"を呼び出します。
- インストールする項目を確認します(-webserver)
-表示されます。翻訳テーブルに関連するオペレーティングシステムの正しいパッケージマネージャとパッケージ名を選択し
、bootstrap.shにhttpdをインストールするために必要なコマンドを返します(yum install httpd)。

変だと思うのは分かりますが、助けてくれて本当にありがとう。

答え1

私が正しく理解したら、オペレーティングシステムを入力として使用し、表示された表を読み、正しいインストールコマンドを返すコマンドが必要です。テーブルが実際には人間には適していますが、マシンには役に立たない合計を含む表示形式である場合は、次のようにして|Web-サーバーにアクセスできます。

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をとして保存$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

関連情報