Написание оператора 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

Проблема в том, что значение службы продолжает увеличиваться в filex , и я не могу расширить свой оператор if , добавив | | . Например, если у меня есть новая служба, скажем, bum_service3_bk , включенная в filex , тогда мой оператор if будет выглядеть так ..

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

, и это будет продолжаться. увеличивается для каждой новой службы , добавленной в filex

Есть ли способ написать оператор if , чтобы иметь одно условие, которое может учитывать несколько условий или или лучше для решения моей проблемы?

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

0
28.01.2020, 04:49

Избегайте циклов при обработке текста . Здесь:

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

Или:

grep 'service1
service2
service3' filex | paste -sd , -
0
28.01.2020, 04:49

Теги

Похожие вопросы