Instruções If com instruções de código de saída

Instruções If com instruções de código de saída

Sou iniciante em Linux/Unix. Aqui está minha tarefa, é muito longo para postar tudo aqui:https://i.stack.imgur.com/v2AJR.jpg

Aqui está a lógica que eu tenho:

Este código irá verificar se o usuário inseriu um argumento ou não. Não sei o que colocar em outro lugar. Nunca falamos sobre a instrução which que aprendi com outro usuário aqui, portanto não se espera que seja usada. Apenas comandos básicos, esta não é uma tarefa superavançada.

if [ $# -ne 1 ]; then
        echo Please enter a single, valid user id: 
        read userid
else
        userid=$1
        **what goes here?**
fi

Para exibir o nome completo de um usuário (ou seja, Ben Franklin), este é o código que escrevi e testei:

grep "$userid" /etc/passwd | cut -d: -f5 | sort | sed 's/^\(.*\), \(.*\)$/\2 \1/'

Determine se o usuário está logado ou não:

Se o usuário não estiver logado (retornará o código de saída 1):who | grep $userid

  1. Em seguida, exiba grep "$userid" /etc/passwd | cut -d: -f5 | sort | sed 's/^\(.*\), \(.*\)$/\2 \1/'ANDecho is NOT currently logged on em seguida, termine o script com um código 1.

Se o usuário estiver logado (retornará o código de saída 0):who | grep $userid

  1. Em seguida, exiba grep "$userid" /etc/passwd | cut -d: -f5 | sort | sed 's/^\(.*\), \(.*\)$/\2 \1/'ANDecho is currently logged on em seguida, termine o script com um código 0.

Determinando se um usuário é válido:

Se o usuário for inválido (retornará o código de saída 1):grep $userid /etc/passwd

  1. Então ele deve exibirecho "The user you entered, $userid is not a valid user on this system."

Se o usuário for válido (retornará o código de saída 0):grep $userid /etc/passwd

Como escrevo esse script? Qual é a estrutura completa? Estou preso na estrutura/configuração.

Responder1

Como isso parece uma tarefa, darei apenas as ferramentas e algumas dicas:

  1. Se nenhum argumento foi fornecido ao script, então $1(o primeiro argumento do script) estará vazio. Você pode testar isso com [[ -z $1 ]]. Se você quiser exibir um erro paramuitosargumentos, teste o número de argumentos com [[ $# -eq 1 ]](será verdadeiro para um único argumento).

  2. O gentent passwd "$username"comando pode ser usado para obter a passwdentrada do usuário $username. O comando falhará com um status de saída diferente de zero se o usuário não existir. Isso significa que você pode usar if ! getent passwd "$username" >/dev/null; then ...; fipara reagir a um usuário inexistente $username.

  3. O 5º campo da passwdentrada para um usuáriogeralmentecontém o nome completo do usuário (não há realmente nenhuma garantia de que estará no formato "nome, sobrenome"). A entrada pode ter vírgulas extras no final que você deve excluir. Você pode analisar a saída de getent passwd "$username"using cut -d: -f 5para chegar ao quinto campo e, em seguida, excluir da primeira vírgula com name=${name%%,*}.

    Em alguns sistemas, o nome completo do usuário pode conter um &caractere. Nesses sistemas, esse &caractere deve ser substituído pelo nome de usuário (para que o nome System &do usuário operatorse torne System operator). Não tenho certeza se o Linux geralmente faz isso, mas isso poderia ser feito com o name=${name/&/$username}.

  4. O whoutilitário exibe uma lista de usuários que estão conectados no momento. Para combinar $usernamecom isso, use grep -e "^$username\>". O \>corresponde ao final de uma palavra para que, por exemplo, antonynão seja correspondido ao procurar ou anton. grep -qé útil em uma ifdeclaração.

Isso segue a estrutura do código:

  1. Verifique e trate argumentos inválidos (faltando: leia; muitos: saia ou apenas use primeiro). Uma ifdeclaração.
  2. Verifique e lide com nome de usuário inválido. Uma ifdeclaração.
  3. Obtenha o nome completo do usuário. Atribuição(ões) de variáveis ​​com substituição de comandos.
  4. Verifique se o usuário está logado (e saída). Uma ifdeclaração, possivelmente com uma elseramificação.

Não vejo um loop neste script, então haverá uma série de ifinstruções e atribuições de variáveis.

informação relacionada