Bash Tutorial
Empezando con Bash
Buscar..
Versiones
Versión | Fecha de lanzamiento |
---|---|
0.99 | 1989-06-08 |
1.01 | 1989-06-23 |
2.0 | 1996-12-31 |
2.02 | 1998-04-20 |
2.03 | 1999-02-19 |
2.04 | 2001-03-21 |
2.05b | 2002-07-17 |
3.0 | 2004-08-03 |
3.1 | 2005-12-08 |
3.2 | 2006-10-11 |
4.0 | 2009-02-20 |
4.1 | 2009-12-31 |
4.2 | 2011-02-13 |
4.3 | 2014-02-26 |
4.4 | 2016-09-15 |
Hola mundo usando variables
Cree un nuevo archivo llamado hello.sh
con el siguiente contenido y chmod +x hello.sh
permisos ejecutables con chmod +x hello.sh
.
Ejecutar / Ejecutar vía:
./hello.sh
#!/usr/bin/env bash
# Note that spaces cannot be used around the `=` assignment operator
whom_variable="World"
# Use printf to safely output the data
printf "Hello, %s\n" "$whom_variable"
#> Hello, World
Esto imprimirá Hello, World
a la salida estándar cuando se ejecute.
Para decirle a bash dónde está el script, debe ser muy específico, apuntándolo al directorio que contiene, normalmente con ./
si es su directorio de trabajo, dónde .
Es un alias del directorio actual. Si no especifica el directorio, bash
intenta localizar el script en uno de los directorios contenidos en la $PATH
entorno $PATH
.
El siguiente código acepta un argumento $1
, que es el primer argumento de la línea de comando, y lo envía en una cadena con formato, siguiendo a Hello,
Ejecutar / Ejecutar vía:
./hello.sh World
#!/usr/bin/env bash
printf "Hello, %s\n" "$1"
#> Hello, World
Es importante tener en cuenta que $1
debe cotizarse entre comillas dobles, no comillas simples. "$1"
expande al primer argumento de la línea de comando, según lo deseado, mientras que '$1'
evalúa como una cadena literal $1
.
Nota de seguridad:
Lea las implicaciones de seguridad de olvidarse de citar una variable en las bases para entender la importancia de colocar el texto de la variable entre comillas dobles.
Hola Mundo
Shell interactivo
El shell Bash se usa comúnmente de forma interactiva: le permite ingresar y editar comandos y luego ejecutarlos cuando presiona la tecla Retorno . Muchos sistemas operativos basados en Unix y similares a Unix usan Bash como su shell predeterminado (en particular, Linux y macOS). El terminal ingresa automáticamente un proceso de shell Bash interactivo en el inicio.
Salida Hello World
escribiendo lo siguiente:
echo "Hello World"
#> Hello World # Output Example
Notas
Puede cambiar el shell simplemente escribiendo el nombre del shell en la terminal. Por ejemplo:
sh
,bash
, etc.echo
es un comando incorporado de Bash que escribe los argumentos que recibe en la salida estándar. Añade una nueva línea a la salida, por defecto.
Shell no interactivo
El shell Bash también se puede ejecutar de forma no interactiva desde un script, lo que hace que el shell no requiera interacción humana. El comportamiento interactivo y el guión deben ser idénticos: una consideración de diseño importante para el shell Bourne de Unix V7 y el tránsito de Bash. Por lo tanto, cualquier cosa que se pueda hacer en la línea de comandos se puede poner en un archivo de script para su reutilización.
Siga estos pasos para crear un script de Hello World
:
Crea un nuevo archivo llamado
hello-world.sh
touch hello-world.sh
Haz el script ejecutable ejecutando
chmod
+x hello-world.sh
Añade este código:
#!/bin/bash echo "Hello World"
Línea 1 : la primera línea del script debe comenzar con la secuencia de caracteres
#!
, referido como shebang 1 . El shebang le indica al sistema operativo que ejecute/bin/bash
, el shell Bash, y le pasa la ruta del script como argumento.Por ejemplo,
/bin/bash hello-world.sh
Línea 2 : utiliza el comando
echo
para escribirHello World
en la salida estándar.
Ejecute el script
hello-world.sh
desde la línea de comando usando uno de los siguientes:-
./hello-world.sh
- más comúnmente usado y recomendado -
/bin/bash hello-world.sh
-
bash hello-world.sh
- asumiendo que/bin
está en tu$PATH
-
sh hello-world.sh
-
Para un uso de producción real, .sh
extensión .sh
(que de todas formas es engañosa, ya que se trata de un script Bash, no de un script sh
) y tal vez mueva el archivo a un directorio dentro de su PATH
para que esté disponible sin importar su directorio de trabajo actual, al igual que un comando del sistema como cat
o ls
.
Los errores comunes incluyen:
Olvidarse de aplicar el permiso de ejecución en el archivo, es decir,
chmod +x hello-world.sh
, dando como resultado la salida de./hello-world.sh: Permission denied
.Edición del script en Windows, que produce caracteres de final de línea incorrectos que Bash no puede manejar.
Un síntoma común es
: command not found
donde el retorno de carro ha forzado el cursor al principio de la línea, sobrescribiendo el texto antes de los dos puntos en el mensaje de error.El script se puede arreglar usando el programa
dos2unix
.Un ejemplo de uso:
dos2unix hello-world.sh
dos2unix
edita el archivo en línea.Usando
sh ./hello-world.sh
, no mesh ./hello-world.sh
cuenta de quebash
ysh
son carcasas distintas con características distintas (aunque Bash es compatible con versiones anteriores, el error opuesto es inofensivo).De todos modos, simplemente confiar en la línea shebang del script es sumamente preferible a escribir explícitamente
bash
osh
(opython
operl
oawk
oruby
o ...) antes del nombre de archivo de cada script.Una línea shebang común para usar con el fin de hacer que tu script sea más portátil es usar
#!/usr/bin/env bash
lugar de codificar de forma rígida una ruta a Bash. De esa manera,/usr/bin/env
tiene que existir, pero más allá de ese punto,bash
solo necesita estar en suPATH
. En muchos sistemas,/bin/bash
no existe, y debe usar/usr/local/bin/bash
o alguna otra ruta absoluta; este cambio evita tener que averiguar los detalles de eso.
1 También conocido como sha-bang, hashbang, pound-bang, hash-pling.
Visualización de información para Bash incorporados
help <command>
Esto mostrará la página de ayuda (manual) de Bash para la función incorporada especificada.
Por ejemplo, help unset
mostrará:
unset: unset [-f] [-v] [-n] [name ...] Unset values and attributes of shell variables and functions. For each NAME, remove the corresponding variable or function. Options: -f treat each NAME as a shell function -v treat each NAME as a shell variable -n treat each NAME as a name reference and unset the variable itself rather than the variable it references Without options, unset first tries to unset a variable, and if that fails, tries to unset a function. Some variables cannot be unset; also see `readonly'. Exit Status: Returns success unless an invalid option is given or a NAME is read-only.
Para ver una lista de todas las incorporaciones con una breve descripción, use
help -d
Hola mundo con entrada de usuario
Lo siguiente le pedirá a un usuario que ingrese información, y luego la almacenará como una cadena (texto) en una variable. La variable se utiliza para dar un mensaje al usuario.
#!/usr/bin/env bash
echo "Who are you?"
read name
echo "Hello, $name."
El comando read
aquí lee una línea de datos de la entrada estándar en el name
la variable. Luego se hace referencia a esto usando $name
y se imprime a una salida estándar usando echo
.
Ejemplo de salida:
$ ./hello_world.sh
Who are you?
Matt
Hello, Matt.
Aquí el usuario ingresó el nombre "Matt", y este código se usó para decir Hello, Matt.
.
Y si desea agregar algo al valor de la variable mientras lo imprime, use corchetes alrededor del nombre de la variable como se muestra en el siguiente ejemplo:
#!/usr/bin/env bash
echo "What are you doing?"
read action
echo "You are ${action}ing."
Ejemplo de salida:
$ ./hello_world.sh
What are you doing?
Sleep
You are Sleeping.
Aquí, cuando el usuario ingresa una acción, se agrega "ing" a esa acción mientras se imprime.
Manejo de argumentos con nombre
#!/bin/bash
deploy=false
uglify=false
while (( $# > 1 )); do case $1 in
--deploy) deploy="$2";;
--uglify) uglify="$2";;
*) break;
esac; shift 2
done
$deploy && echo "will deploy... deploy = $deploy"
$uglify && echo "will uglify... uglify = $uglify"
# how to run
# chmod +x script.sh
# ./script.sh --deploy true --uglify false
Hola mundo en modo "depurar"
$ cat hello.sh
#!/bin/bash
echo "Hello World"
$ bash -x hello.sh
+ echo Hello World
Hello World
El argumento -x
permite caminar a través de cada línea en el script. Un buen ejemplo es aquí:
$ cat hello.sh
#!/bin/bash
echo "Hello World\n"
adding_string_to_number="s"
v=$(expr 5 + $adding_string_to_number)
$ ./hello.sh
Hello World
expr: non-integer argument
El error anterior no es suficiente para rastrear el script; sin embargo, el uso de la siguiente manera le da una mejor idea de dónde buscar el error en el script.
$ bash -x hello.sh
+ echo Hello World\n
Hello World
+ adding_string_to_number=s
+ expr 5 + s
expr: non-integer argument
+ v=
Importancia de citar en cuerdas
Las citas son importantes para la expansión de cadenas en bash. Con estos, puedes controlar cómo el bash analiza y expande tus cadenas.
Hay dos tipos de citas:
- Débil : utiliza comillas dobles: "
- Fuerte : usa comillas simples: '
Si quiere golpear para expandir su argumento, puede usar Weak Quoting :
#!/usr/bin/env bash
world="World"
echo "Hello $world"
#> Hello World
Si no quiere golpear para expandir su argumento, puede usar Strong Quoting :
#!/usr/bin/env bash
world="World"
echo 'Hello $world'
#> Hello $world
También puedes usar escape para evitar la expansión:
#!/usr/bin/env bash
world="World"
echo "Hello \$world"
#> Hello $world
Para obtener información más detallada además de los detalles para principiantes, puede continuar leyendo aquí .