
¿Tengo una tarea pendiente para clase y no encuentro nada sobre "asombro"?
La tarea dice crear un script con una función llamada 'awe' que haga eco de las palabras "¡Porque Linux es increíble!" después de 3 preguntas.
Soy muy nuevo en todo esto y me gustaría mucho la ayuda. Lo intenté, awk
pero por lo que he visto en los videos que vi sobre esto, esto no es lo que él quiere. Gracias.
Respuesta1
Responda usando el shell Bash:
La tarea dice crear un script con una función llamada 'awe' que haga eco de las palabras "¡Porque Linux es increíble!" después de 3 preguntas.
La tarea dice crear una función, así que veamos quéel manual de bashnos cuenta sobrefunciones:
Las funciones de Shell son una forma de agrupar comandos para su posterior ejecución utilizando un único nombre para el grupo. Se ejecutan como un comando "normal". Cuando el nombre de una función de Shell se utiliza como un nombre de comando simple, se ejecuta la lista de comandos asociados con ese nombre de función. Las funciones del Shell se ejecutan en el contexto actual del Shell; no se crea ningún nuevo proceso para interpretarlos.
Las funciones se declaran utilizando esta sintaxis:
name () compound-command [ redirections ]
o
function name [()] compound-command [ redirections ]
Esto define una función de shell llamadanombre. La palabra reservada
function
es opcional. Sifunction
se proporciona la palabra reservada, los paréntesis son opcionales. Elcuerpode la función es el comando compuestocomando compuesto(verComandos compuestos). Ese comando suele ser unlistaencerrado entre { y }, pero puede ser cualquier comando compuesto enumerado anteriormente, con una excepción: sifunction
se usa la palabra reservada, pero no se proporcionan los paréntesis, las llaves son obligatorias.comando compuestose ejecuta siempre quenombrese especifica como el nombre de un comando.
En resumen, una función es un conjunto de comandos agrupados bajo un nombre determinado que usted proporciona, que es el nombre de la función.
La asignación le indica cómo se nombrará la función ( awe
), así como qué hará esta función (el resultado será "¡Porque Linux es increíble!"). Para generar ese mensaje, puede utilizar echo
. El echo
comando, que Bash proporciona como un shell integrado, se utiliza para generarstdout
(consola). Dada esta información puedes escribir tu función:
awe(){
echo "Because Linux is Awesome!"
}
Lo siguiente en la tarea es ejecutarla después de haber hecho tres preguntas. Para esto puede usar el read
comando, que puede aceptar varias opciones. Veamos cuál es elmanual de bashCuéntanosacerca deread
:
read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name …]
Se lee una línea de la entrada estándar o del descriptor de archivo.fd proporcionado como argumento para la
-u
opción, dividido en palabras como se describe arriba enDivisión de palabras, y la primera palabra se asigna a la primeranombre, la segunda palabra a la segundanombre, etcétera. Si hay más palabras que nombres, las palabras restantes y sus delimitadores intermedios se asignan al últimonombre. Si se leen menos palabras del flujo de entrada que nombres, a los nombres restantes se les asignan valores vacíos. Los caracteres en el valor de laIFS
variable se usan para dividir la línea en palabras usando las mismas reglas que usa el shell para la expansión (descritas arriba enDivisión de palabras). El carácter de barra invertida '\
' se puede utilizar para eliminar cualquier significado especial para el siguiente carácter leído y para la continuación de línea. Si no se proporcionan nombres, la línea leída se asigna a la variableREPLY
.
read
Acepta varias opciones. En este caso, dos son los más relevantes, ya que desea hacerle una pregunta al usuario y obtener información para él. Esas opciones son:
-r
→ Si se da esta opción, la barra invertida no actúa como carácter de escape. La barra invertida se considera parte de la línea. En particular, un par de barra invertida y nueva línea no se puede utilizar como continuación de línea.-p prompt
→ Mostrarinmediato, sin una nueva línea al final, antes de intentar leer cualquier entrada. El mensaje se muestra solo si la entrada proviene de un terminal.
Si bien esta no es la peor situación para olvidar -r
, casi siempre querrás incluirla para evitar \
que actúe como un personaje de escape. -p
muestra al usuario un mensaje. Puedes poner ambas opciones después de una sola -
, por lo que podrías escribir algo como esto:
read -rp "Question? " variable
La entrada del usuario se ha almacenado en variable
. No, queremos usar esa entrada, incluyéndola en una oración que enviamos al usuario. Para expandirse variable
al valor que tiene, se coloca una $
delante. Esto funciona incluso entre comillas dobles.
echo "This is a reply to the user and it contains $variable!"
Normalmente esto es todo lo que necesitas para resolver esta tarea. En mi script de ejemplo agregué un pequeño giro para usar una if
condición que actúe según si se respondió "sí" o "no" a la última pregunta. Así que de nuevo veamoslo que nos dice el manual sobre if
las condiciones:
La sintaxis del
if
comando es:if test-commands; then consequent-commands; [elif more-test-commands; then more-consequents;] [else alternate-consequents;] fi
Elcomandos de pruebase ejecuta la lista, y si su estado de retorno es cero, elcomandos-consecuentesse ejecuta la lista. Sicomandos de pruebadevuelve un estado distinto de cero, cada
elif
lista se ejecuta a su vez, y si su estado de salida es cero, el correspondientemás consecuenciasse ejecuta y el comando se completa. Si ' ' está presente y el comando final en la cláusula final o tiene un estado de salida distinto de cero, entonceselse alternate-consequents
if
elif
consecuencias alternativases ejecutado. El estado de retorno es el estado de salida del último comando ejecutado, o cero si ninguna condición resultó ser verdadera.
El que test-command
he usado en mi ejemplo a continuación es [
, que es un shell integrado que prueba el condicional verdadero o falso. Cuando uses [
, debes pasar un argumento final ]
. =
prueba la igualdad de las variables como cadenas.
Entonces, aquí está el script de ejemplo:
#!/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