Teste se uma string tiver um ponto nela com o bash

4

Eu quero executar um comando bash na saída da interface de linha de comando do drupal drush. drush site-alias retorna uma lista de webroots, mostrando primeiro o nome do grupo e, em seguida, cada site desse grupo. O site em si é aliado no formato group.site . Por exemplo, você pode obter

interno internal.site1 internal.site2 externo external.site1 external.site2 marketing marketing.site1 marketing.site2

Eu quero fazer um comando em cada um dos aliases do site, mas não no próprio alias do grupo. Eu preciso testar se a string tem um período, e se sim, execute:

for i in $(drush site-alias); do {if no period) drush $i command; done;

Como posso executar este teste?

    
por user394 01.02.2013 / 16:00

5 respostas

5

Você pode usar correspondência de padrões:

for i in $(drush site-alias) ; do
    if [[ $i == *.* ]] ; then
        drush "$i" command
    fi
done
    
por 01.02.2013 / 16:14
5

Com qualquer shell parecido com o Bourne, você o escreveria:

case $i in
  *.*) drush "$i" command;;
esac
    
por 01.02.2013 / 21:04
2

Você pode fazer isso com uma expansão de substituição de padrão:

for i in $(drush site-alias); do
  if [ -z "${i//[^.]/}" ]; then
     # no period
     drush "$i" command
  fi
done

Sim, eu citei "$i" , que é provavelmente algo que você deve fazer quando possível, evita surpresas. Embora neste caso não importe.

    
por 01.02.2013 / 16:16
2

Apenas para uma outra resposta independente, sugerimos o uso de expansões de parâmetros do shell .

for i in $(drush site-alias)
do
    if [[ ${i%.*} == $i ]]
    then
        drush $i command
    fi
done
    
por 01.02.2013 / 17:28
1

Usando o operador =~ bash.

for i in $(drush site-alias); do
  if ! [[ $i =~  \. ]]; then
     drush "$i" command
  fi
done
    
por 01.02.2013 / 17:10

Tags