Bash , c-shell o simplemente shell scripting es un lenguaje de script creado a fines de la década de 1980 por un programador llamado Brian Fox, que trabajaba para la Free Software Foundation . Fue pensado como una alternativa de software libre para el shell Bourne (de hecho, su nombre es un acrónimo de Bourne Again SHell ), e incorpora todas las características de ese shell, así como nuevas características como la aritmética de enteros y el control de trabajo
Bash es un “shell de Unix”, es decir una interfaz de línea de comandos para interactuar con el sistema operativo por lo que está ampliamente disponible, siendo el shell predeterminado en muchas distribuciones de GNU / Linux y en Mac OSX, con puertos existentes para muchos otros sistemas.
En post anteriores hemos hablado en una primera aproximación al lenguaje c-sheall con el primer ejemplo famoso de Hello world y avanzando comandos ,tuberías ,variables ,parámetros y salidas posibles y en un segundo post sobre el uso de las Tuberías , sustitución de comandos,operadores ,asignación de variables ,Bucles , literales , variables y aritmética no entera
Asimismo en un post anterior continuamos avanzando en el conocimiento de este lenguaje con el uso de las funciones, subshells y las variables de entorno
En esta ocasión vamos a ver el uso de funciones de shell, funciones de e/s y la redirección shell
Funciones de shell
Programas externos
Bash, como un shell, es en realidad un lenguaje de «pegamento». Ayuda a los programas a cooperar entre sí, y se beneficia de ello. Siempre busque en Internet lo que desea: hay muchas utilidades de línea de comandos disponibles.
Usando whiptail
Whiptail es un programa que permite que los scripts de shell muestren cuadros de diálogo al usuario con fines informativos, o para obtener información del usuario de manera amigable. Whiptail se incluye de forma predeterminada en Debian y en varias otras distribuciones de GNU / Linux.
- Desde el diccionario GNU / Linux : whiptail es un reemplazo de «diálogo» que usa newt en lugar de ncurses.
- Desde su README: whiptail está diseñado para ser compatible con el cuadro de diálogo (1), pero tiene menos funciones: algunos cuadros de diálogo no están implementados, tales como caja de cola, caja de tiempo, caja de calendario, etc.
Usando man, info y ayuda
Estos tres programas son donde puede encontrar ayuda o referencia de. man muestra las páginas de manual de roff , la información muestra las documentaciones de texinfo, mientras que la ayuda muestra las ayudas integradas.
Al añadir --long-ayuda , --help o --usage a un programa de línea de comandos puede también le da la información de uso. Posibles sinónimos incluyen -H y -h .
Solo prueba estos:
man --help
man man
info --help
man info
info info
help help
Presionar h en las interfaces de man and info también puede darle alguna dirección.
Entrada / Salida
La lectura incorporada
De la ayuda leída :
read: read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
Lea una línea de la entrada estándar y divídala en campos. La lectura es excelente tanto para las entradas del usuario como para la lectura de entradas / tuberías estándar.
Un ejemplo de entrada de usuario:
# 'readline' pronuncie el nombre de la variable predeterminada
read -e -p "Haga esto:" -i "destruye el comando " commmand
echo "$command "
O incluso más simple:
pause () { read -n 1 -p "Presione cualquier tecla para continuar ..." ; }
Ejemplo de nivel de Hola-mundo de la operación stdout:
echo 'Hola mundo!' | { read hola
echo $hola }
Solo se creativo. Por ejemplo, en muchos sentidos, leer puede reemplazar el látigo. Aquí hay un ejemplo, extraído del script de shell de Arthur200000 :
# USAGE
# yes_or_no "title" "text" width ["yes text"] ["no text"]
# INPUTS
# $ LINE = (y / n) - Si debemos usar el estilo de entrada basado en líneas (lectura)
# $ _DEFAULT = (opcional) - El valor predeterminado para leer yes_or_no () {
yes_or_no() {
if [ "$LINE" == "y" ]; then
echo -e "\e[1m$1\e[0m"
echo '$2' | fold -w $4 -s
while read -e -n 1 -i "$_DEFAULT" -p "Y for ${5:-Yes}, N for ${6:-No}[Y/N]" _yesno; do
case $_yesno in
[yY]|1)
return 0
;;
[nN]|0)
return 1
;;
*)
echo -e "\e[1;31mINVALID INPUT\x21\e[0m"
esac
else whiptail --title "${1:-Huh?}" --yesno "${2:-Are you sure?}" ${3:-10} ${4:-80}\
--yes-button "${5:-Yes}" --no-button "$6{:-No}"; return $?
fi
}
# USAGE # user_input var_name ["title"] ["prompt"] [altura] [ancho]
# ENTRADAS # $ LINE = (y / n) - Si debemos usar el estilo de entrada basado en líneas (lectura)
# $ _DEFAULT = ( opcional) - El valor predeterminado para leer; por defecto a nada. user_input ()
user_input(){
if [ "$LINE" == "y" ]; then
echo -e "\e[1m${2:-Please Enter:}\e[0m" | fold -w ${4:-80} -s
read -e -i "${_DEFAULT}" -p "${3:->}" $1
else
eval "$1"=$(whiptail --title "$2" --inputbox "$3" 3>&1 1>&2 2>&3)
fi
}
Redirección de shell
En shells, la redirección se usa para la E / S de archivos. El uso más común de es redirigir secuencias estándar (stdin, stdout y stderr) para aceptar la entrada de otro programa a través de tuberías, para guardar la salida del programa como un archivo, y para suprimir la salida del programa redireccionando una secuencia a / dev / null .
Índice de símbolos
Símbolo | Explicación |
---|---|
! |
|
"..." |
|
# |
|
#! |
|
PS |
|
PS |
|
PS |
|
% | El operador de módulo. Devuelve el resto resultante de la división entera. Ej. 5% 2 = 1 |
Y | Ampersand Comúnmente se utiliza para iniciar un comando en el fondo. Ej. Firefox & |
' | Una frase. Se utiliza para citar texto literalmente. |
( | Paréntesis abiertos. Se utiliza para denotar el comienzo de una subshell, entre otras cosas. |
) | Paréntesis de cierre. Se utiliza para denotar el «EOF» de una subshell. |
* | Asterisco. Denota multiplicación. Ej. 5 * 2 = 10 |
+ | Más.Denota la suma. Ej. 5 + 2 = 7 |
, | Coma. Utilizado para la separación. Ej. Archivo ls {1,2,3} |
- | Guión. Denota la resta. Ej. 5-2 = 3 |
. | Parada completa. |
/ | Barra inclinada. Indica división entera (por ejemplo, 5/2 = 2) o parte de una ruta (por ejemplo, / home / usuario) |
: | Colon. |
; | Punto y coma. Separa las líneas si no existe una nueva línea / EOL. Ej. Echo hola; mundo eco |
< | Soporte de ángulo abierto. Utilizado para la redirección de entrada |
= | Signo de igualdad Se utiliza para asignar variables y comprobar la igualdad. |
> | Ángulo de cierre del soporte. Se utiliza para la redirección de salida. |
? | Signo de interrogación. |
@ | A la señal. Normalmente se utiliza como una variable que contiene todos los argumentos pasados al entorno como $ @ |
El | Abra el corchete. Utilizado como una alternativa visualmente más atractiva para probar. Por ejemplo, si [condición]; entonces etc |
\ | Barra invertida Más comúnmente utilizado para escapar. Por ejemplo, archivo rm \ con \ a \ manojo \ de \ espacios.txt |
] | Cierre corchete. Cierra los recintos de prueba. |
^ | Signo de intercalación. |
_ | Guion bajo. |
`…` |
|
{ | Abra el apoyo rizado. Utilizado para expansión de variable específica. Por ejemplo, (donde var = «hola») echo «$ {var} world» imprimirá «hola mundo», echo «$ varworld» generará un error, esperando una variable llamada varworld. |
| | Tubo. Se utiliza para redireccionar la entrada a la salida. Específicamente, toma la salida del comando en el lado izquierdo, ejecuta el programa en el lado derecho y luego pasa el contenido de la salida del primer comando al segundo, como si se estuviera escribiendo desde un teclado. ‘ls -l | grep Desk ‘es equivalente a ejecutar «grep Desk», y luego escribir manualmente lo que ls -l tendría salida. Cada vez que se presiona la tecla de retorno, se activará grep hasta que se presione ^ D para pasar el EOF. |
} | Cierre corsé. |
~ | Tilde. Normalmente se utiliza para referirse al directorio de inicio. Registrado como «mrwhite», cd ~ (o simplemente cd) iría a / home / mrwhite. Al iniciar sesión como otro usuario, se podría lograr el mismo efecto con ‘cd ~ mrwhite’. |
Enlaces externos en ingles
- Manual de referencia de Bash – gnu.org
- Manual de referencia de GNU Bash para Bash 3.2 – network-theory.co.uk
- «Sección – ¿Qué significa {algún nombre de comando de Unix extraño}?»
- Washedge BashGuide
- Guía avanzada de Bash-Scripting , por Mendel Cooper
- Salta hacia arriba↑ «Bash – Proyecto GNU – Free Software Foundation» . Consultado el 28 de noviembre de 2017 .
- Bash↑ http://www.sal.ksu.edu/faculty/tim/unix_sg/bash/math.html
- Fuente https://en.wikibooks.org/wiki/Bash_Shell_Scripting