Написание оператора if, который может содержать несколько условий «или»

Написание оператора 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включенная в , filexто мое ifутверждение будет выглядеть так..

...
 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 ' ' ,- печать массива, разделенного запятыми

Связанный контент