Script para buscar 3 usuarios diferentes en línea e imprimirlo

Script para buscar 3 usuarios diferentes en línea e imprimirlo

Estoy intentando crear un script donde un usuario puede ingresar 3 argumentos diferentes (nombres de usuario) para ver si está en línea.

Actualmente tengo who | grep "^$1"lo que mostrará a quién se busca, pero cuando intento agregar $2 y $3 como

who | grep "^$1" "^$2" "^$3"

da un error que dice que no existe tal archivo o directorio, pero funciona bien cuando solo tengo un argumento único. ¿Alguna sugerencia?

Respuesta1

who | grep -e "^$1" -e "^$2" -e "^$3"debería hacer

Respuesta2

Grep se comporta de manera diferente según el tipo de motor de expresión regular que esté utilizando. Por defecto utilizaExpresiones regulares básicaspero también puede usarExpresiones regulares extendidascon -Ey, en grepversiones que admiten esta función, Expresiones regulares compatibles con Perlcon -P.

BRE sólo puede buscar dos patrones, no más. La sintaxis es:

grep 'pattern1\|pattern2'

ERE y PCRE pueden buscar un número arbitrario, su sintaxis es la misma a este respecto, solo cambia el indicador de opción:

grep -E 'pattern1|pattern2|pattern3|patternN'
grep -P 'pattern1|pattern2|pattern3|patternN'

Entonces, para tu caso, podrías hacer algo como:

who | grep -E "^$1|^$2|^$3"

Respuesta3

Recomiendo hacer algo como esto:

who | awk '{print $1}'

awk imprimirá la primera columna o los nombres de los usuarios actualmente conectados.

Como señaló terdon, para reducirlo aún más a tres argumentos:

who | awk -v one=$1 -v two=$2 -v three=$3 '$1==one||$1==two||$1==three'

información relacionada