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

내가 올바르게 이해했다면 운영 체제를 입력으로 사용하고 표시된 표를 읽어 올바른 설치 명령을 반환하는 명령이 필요합니다. 테이블이 실제로 인간에게는 좋지만 기계에는 쓸모가 없는 합계를 포함하여 표시되는 형식인 경우 |다음 -을 수행하여 웹 서버에 접근할 수 있습니다.

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

관련 정보