O nome do caminho do arquivo é dado como um parâmetro . Isso significa que é dado na linha de comando do script. Isso significa que você não deve perguntar ao usuário de forma interativa.
#!/bin/sh
grep -wF -e "$LOGNAME" "$1"
Como alternativa, se você realmente quiser usar whoami
:
#!/bin/sh
grep -wF -e "$(whoami)" "$1"
Ou, para o requisito "duas linhas":
#!/bin/sh
name=$(whoami) # or: name=$LOGNAME
grep -wF -e "$name" "$1"
Ou, se quisermos fazer algo útil nessa primeira linha:
#!/bin/sh
[ ! -f "$1" ] && { printf 'No such file: %s\n' "$1" >&2; exit 1; }
grep -wF -e "$(whoami)" "$1"
A opção -w
para grep
faz corresponder apenas palavras completas. grep -w 'AA'
corresponderia a AA
, mas não AAA
.
A opção -F
para grep
faz o utilitário usar a expressão fornecida como uma string fixa e não como uma expressão regular.
A opção -e
significa que a próxima cadeia na linha de comando é o padrão. Sem ele, um padrão começando com um traço pode ser interpretado erroneamente como um conjunto de opções de linha de comando.
A variável $LOGNAME
(ou $USER
em muitos sistemas) contém o nome de usuário atual.
O valor de $1
é o primeiro argumento de linha de comando fornecido ao script na linha de comando.
Observe também que podemos executar isso com /bin/sh
em vez de bash
, pois este script não usa extensões especiais de shell bash
-specific. Ele obviamente funcionaria bem abaixo de bash
...
Note que o acima não pesquisa por arquivos mencionando um usuário em particular (como no título da pergunta), mas procura por linhas em um arquivo que menciona este usuário.
Para procurar por arquivos que mencionam o usuário atual em um diretório dado na linha de comando:
#!/bin/sh
find "$1" -type f -exec grep -q -wF -e "$LOGNAME" {} ';' -print
Relacionado a esta última parte:
- Entendendo a opção -exec de 'localizar'
-
man grep
no seu sistema.