Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

244
Visualizações
Cómo asignar una variable desde la salida grep en un ciclo while

Quería crear una variable para cada línea grep regex del archivo Usernames.txt. El texto contiene este

 mario,visitor bobmarley,staff luigi,visitor hailey,visitor

y así.

Quiero el nombre antes de la coma como nombre de usuario y el visitante como grupo para el usuario

 #!/bin/bash sudo addgroup visitor sudo addgroup staff filename='Usernames.txt' while read line; do username=$(echo $line | grep -o '^[az]*[^,]') group=$(echo $line | grep -o '[^,][az]*$') sudo useradd $username -G $group -p $username done < $filename

pero la salida dice que no se encontró el nombre de usuario del comando. Entonces, en cambio, probé un método no tan eficiente

 while read line; do sudo useradd $(echo $line | grep -o '^[az]*[^,]') -G $(echo $line | grep -o '[^,][az]*$') -p $(echo $line | grep -o '^[az]*[^,]') done < $filename

Quiero que el resultado de cada ciclo sea así.

 sudo useradd mario -G visitor -p mario

¿Cómo mejoro esto? ¡Gracias!

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

La bifurcación de múltiples procesos (por ejemplo, grep ) en cada iteración de bucle es una mala idea en general. Además, la división de palabras simple se puede hacer directamente en Bash, sin ningún proceso externo.

Opción 1:

 while IFS= read -r line; do username="${line%,*}" group="${line#*,}" echo sudo useradd "$username" -G "$group" -p "$username" done < "$filename"

Opcion 2:

 while IFS=, read -r username group; do echo sudo useradd "$username" -G "$group" -p "$username" done < "$filename"
over 4 years ago · Santiago Trujillo Relatório

0

Pruebe este enfoque

 while read -r name role; do sudo useradd $name -G $role -p $name done < <(sed 's/,/ /' $filename)

En realidad sed es suficiente:

 sudo sed 's/\(.*\),\(.*\)/useradd \1 -G \2 -p \1/e' $filename
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda