2017-01-08 2 views
0

Я запускаю свой сценарий оболочки на нескольких машинах, и все эти машины могут находиться в разных датацентрах.разделил строку и вытащил из нее третье последнее поле?

  • Если машина находится в abc центре обработки данных, то я не хочу спать вообще и двигаться вперед к следующей строке в сценарии оболочки.
  • Если машина находится в def датацентре, то я хочу спать в течение 30 минут, после чего перейду к следующей строке в сценарии оболочки.
  • Если машина находится в pqr датацентре, то я хочу спать в течение 60 минут, после чего перейду к следующей строке в сценарии оболочки.

Мое имя машины похоже на это, и оно будет всегда и, как вы можете видеть, имя датацентра всегда до .host.com, и все будет так.

machineA.abc.host.com 
machineB.def.host.com 
machineC.pqr.host.com 
machinef-12341.testra.abc.host.com 
..... 

В моем ниже скрипте, я уже имя машины хранится в HOSTNAME переменных так, как я могу извлечь имя центра обработки данных от этого в сценарии оболочки и применять выше условия? Мне нужно извлечь имя центра обработки данных, которое находится непосредственно перед .host.com, поэтому мне нужно начать с конца?

#!/usr/bin/env bash 

HOSTNAME=$hostname 

..... 

// I want to execute this line after the above if/else if logic 
echo "Hello World" 

Каков наилучший способ для этого? Я могу разделить строки на переменные, но как получить соответствующую часть, которая мне нужна, а затем применить if/elseif логику здесь?

ответ

0

два различных решения в testloop:

hosts="machineA.abc.host.com machineB.def.host.com machineC.pqr.host.com machinef-12341.testra.abc.host.com" 
for testhost in ${hosts}; do 
    echo "sed ${testhost}: $(sed 's/.*\.\([^.]*\).host.com$/\1/' <<< "${testhost}")" 
    echo "cut ${testhost}: $(rev <<< "${testhost}"|cut -d"." -f3 | rev)" 
done 
+0

В моем случае, я извлекая имя хоста, где скрипт работает так нет жёстко списка хостов .. так что я могу хранить выход этого в переменная, а затем база, которую я могу сделать, если/else, если логика и сон соответственно. –

+0

Все в порядке. Или используйте 'case $ {mysubstring} в ... esac'. –

+0

'rev' - это хороший трюк, делающий' cut' работу в этом случае! Спасибо @WalterA. – codeforester

Смежные вопросы