여러 OR 조건을 수용할 수 있는 if 문 작성

여러 OR 조건을 수용할 수 있는 if 문 작성

servces에서 사용 가능한 값 목록의 값만 포함하는 새 변수를 만드는 시나리오가 있습니다 filex.

$ cat filex

all_name1_db
all_name2_dm
alm_service1_ax
all_name3_du
alz_name4_dx
ali_name5_dk
alk_service2_av
alf_name6_df
alj_name7_dq

services이것은 포함 서비스의 값만 포함하는 변수를 생성하는 데 사용하는 코드입니다 .

for x in $filex
do
 if [[ $x == *"service1"* ]] || [[ $x == *"service2"* ]];then
   Services+=$x","
 fi
done

내 최종 결과는 아래와 같이 쉼표로 구분된 값이 됩니다.

$ cat $Services

alm_service1_ax,alk_service2_av

이제 문제는 service값이 계속 증가 filex하고 if. ||예를 들어, 새 서비스가 bum_service3_bk포함된 경우 filexif선언은 다음과 같습니다.

...
 if [[ $x == *"service1"* ]] || [[ $x == *"service2"* ]] || [[ $x == *"service3"* ]] ;then
...

service새로운 기능이 추가될 때마다 계속해서 성장할 것입니다.filex

if여러 조건을 보유할 수 있는 단일 조건을 갖도록 명령문을 작성하는 방법이나 문제를 해결하는 더 좋은 방법이 있습니까 ?

답변1

텍스트 반복 방지. 여기:

grep 'service[123]' filex | paste -sd , -

또는:

grep 'service1
service2
service3' filex | paste -sd , -

답변2

한 줄 답변이 필요한 경우 다음을 사용하세요.

grep "service" filex | xargs echo | sed 's/ /, /g'

또는

조건부 구문이 필요한 경우 다음을 수행할 수 있습니다.

while read -r line
do
if [[ $line == *"service"* ]]
then
   Services+=("$line")
fi
done < "/tmp/filex"

echo "${Services[@]}" | tr ' ' ,

그것은 다음과 같은 것을 줄 것입니다:

alm_service1_ax,alk_service2_av,alk_service5_av,alk_service3_aff,alk_service5_afds

/tmp/filex- 파일의 경로입니다

echo "${Services[@]}" | tr ' ' ,- 쉼표로 구분된 배열 인쇄

관련 정보