
Tenho uma tarefa para entregar na aula e não consigo encontrar nada sobre 'admiração'?
A tarefa diz para criar um script com uma função chamada 'awe' que ecoa as palavras "Porque o Linux é incrível!" depois de 3 perguntas.
Sou muito novo em tudo isso e gostaria muito de ajuda. Eu tentei awk
, mas pelo que vi nos vídeos que assisti sobre isso, não é isso que ele quer. Obrigado.
Responder1
Responda usando o shell Bash:
A tarefa diz para criar um script com uma função chamada 'awe' que ecoa as palavras "Porque o Linux é incrível!" depois de 3 perguntas.
A tarefa diz para criar uma função, então vamos ver o queo manual do Bashnos conta sobrefunções:
As funções Shell são uma forma de agrupar comandos para execução posterior usando um único nome para o grupo. Eles são executados como um comando “normal”. Quando o nome de uma função shell é usado como um nome de comando simples, a lista de comandos associados a esse nome de função é executada. As funções do shell são executadas no contexto do shell atual; nenhum novo processo é criado para interpretá-los.
As funções são declaradas usando esta sintaxe:
name () compound-command [ redirections ]
ou
function name [()] compound-command [ redirections ]
Isso define uma função shell chamadanome. A palavra reservada
function
é opcional. Se afunction
palavra reservada for fornecida, os parênteses serão opcionais. Ocorpoda função é o comando compostocomando composto(verComandos compostos). Esse comando geralmente é umlistaentre { e }, mas pode ser qualquer comando composto listado acima, com uma exceção: se afunction
palavra reservada for usada, mas os parênteses não forem fornecidos, os colchetes serão obrigatórios.comando compostoé executado sempre quenomeé especificado como o nome de um comando.
Resumindo, uma função é um conjunto de comandos agrupados sob um determinado nome fornecido por você, que é o nome da função.
A atribuição informa como a função deve ser nomeada ( awe
), bem como o que esta função deve fazer (resultado "Porque o Linux é incrível!"). Para gerar essa mensagem, você pode usar echo
. O echo
comando, que o Bash fornece como um shell integrado, é usado para enviar parastdout
(console). Dadas essas informações, você pode escrever sua função:
awe(){
echo "Because Linux is Awesome!"
}
O próximo passo na tarefa é executá-lo depois de fazer três perguntas. Para isso você pode usar o read
comando, que pode aceitar vários flags de opção. Vamos ver o quemanual do bashdiga-nossobreread
:
read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name …]
Uma linha é lida da entrada padrão ou do descritor de arquivofd fornecido como um argumento para a
-u
opção, dividido em palavras conforme descrito acima emDivisão de palavras, e a primeira palavra é atribuída ao primeironome, a segunda palavra para a segundanome, e assim por diante. Se houver mais palavras do que nomes, as palavras restantes e seus delimitadores intermediários serão atribuídos ao últimonome. Se houver menos palavras lidas no fluxo de entrada do que nomes, os nomes restantes receberão valores vazios. Os caracteres no valor daIFS
variável são usados para dividir a linha em palavras usando as mesmas regras que o shell usa para expansão (descritas acima emDivisão de palavras). O caractere de barra invertida '\
' pode ser usado para remover qualquer significado especial para o próximo caractere lido e para continuação de linha. Se nenhum nome for fornecido, a linha lida será atribuída à variávelREPLY
.
read
aceita diversas opções. Nesse caso, dois são mais relevantes, pois você deseja fazer uma pergunta ao usuário e obter informações para ele. Essas opções são:
-r
→ Se esta opção for fornecida, a barra invertida não atua como caractere de escape. A barra invertida é considerada parte da linha. Em particular, um par barra invertida-nova linha não pode ser usado como continuação de linha.-p prompt
→ Exibiçãoincitar, sem uma nova linha final, antes de tentar ler qualquer entrada. O prompt será exibido somente se a entrada vier de um terminal.
Embora esta não seja a pior situação para esquecer -r
, quase sempre você deseja incluí-la para evitar \
que aja como um personagem de fuga. -p
mostra ao usuário um prompt. Você pode colocar as duas opções depois de um single -
, então você pode escrever algo assim:
read -rp "Question? " variable
A entrada do usuário foi armazenada em variable
. Não, queremos usar essa entrada, incluindo-a em uma frase que enviamos de volta ao usuário. Para expandir variable
o valor que ele contém, você coloca um $
na frente dele. Isso funciona mesmo entre aspas duplas.
echo "This is a reply to the user and it contains $variable!"
Normalmente, isso é tudo que você precisa para resolver esta tarefa. No meu script de exemplo, adicionei um pequeno toque, para usar uma if
condição para agir de acordo com a resposta "sim" ou "não" na última pergunta. Então novamente vamos vero que o manual nos diz sobre if
as condições:
A sintaxe do
if
comando é:if test-commands; then consequent-commands; [elif more-test-commands; then more-consequents;] [else alternate-consequents;] fi
Ocomandos de testelist é executada e se seu status de retorno for zero, ocomandos consequenteslista é executada. Secomandos de testeretorna um status diferente de zero, cada
elif
lista é executada por vez e, se seu status de saída for zero, o correspondentemais consequênciasé executado e o comando é concluído. Se ' ' estiver presente e o comando final na cláusula final ou tiver um status de saída diferente de zero, entãoelse alternate-consequents
if
elif
consequências alternativasÉ executado. O status de retorno é o status de saída do último comando executado ou zero se nenhuma condição for testada como verdadeira.
O test-command
que usei no meu exemplo abaixo é [
, que é um shell integrado que testa condicional verdadeiro ou falso. Ao usar [
, você deve passar um argumento final ]
. =
testa variáveis para igualdade como strings.
Então, aqui está o script de exemplo:
#!/bin/bash
# function 'awe' to output "Because Linux is Awesome!"
awe(){
echo "Because Linux is Awesome!"
}
# asking three questions
read -rp "Enter your name!: " name
echo "Well, hello then $name!"
read -rp "How old are you?: " age
echo "Being $age makes you nearly as old as I am"
read -rp "Do you like Linux?: " likes_linux
# acting on if the last input is yes or something else in which case we assume no
if [ "$likes_linux" = "yes" ];then
awe
else
echo "Why don't you like Linux?"
fi