- blucles. sh
- foo=( )
top=100000; for((i=0; i< top; i++))
do
ls -latr;
echo “ $i: Emi Winehouse”
done
- Escribe en un editor de texto (nano, mcedit, vim, nedit, etc.):
#! /bin/bash # Las líneas que empiezan por "#" son comentarios # La primera línea o #! /bin/bash asegura que se interpreta como # un script de bash, aunque se ejecute desde otro shell. echo "Este es el primer comando" echo" "Tras 5 segundos verás un listado del directorio actual" sleep 5s ls --color echo "Fin del ejemplo"
- Grábalo con un nombre cualquiera, por ejemplo “ miprimerscript”
- Ejecuta “ chmod +x mimprimerscript”
- Ejecuta “ ./miprimerscript” (el “ ./” significa “ del directorio actual” )
Como se puede comprobar, “ echo” sólo muestra mensajes en pantalla, “ sleep” hace una pausa y “ ls” nos muestra una lista de ficheros.
¿Qué se puede hacer, además de meter eso?
- Manejar variables. Se introducen asÍ:
VARIABLE=valor; export VARIABLE (en sh) export VARIABLE=valor (en bash).
- var1=’ expr’
- var2=” string”
- Se escriben tras el nombre del script y se asignan consecutivamente a $1, $2, $3, … Por ejemplo, si ejecuto “ nombre-del-script Hola” y dentro exista una orden “ echo $1” el resultado será ordenador recibe una orden “ echo Hola” . Hay otras muchas variables predeterminadas. Importantes a recordar:
- $#: num. de argumentos
- $? :Valor del ultimo comando
- $*: todos los arg de la shell
- $$: PID de la Shell (echo “ para matarme, usa kill $$” )
- $: opciones pasadas a la shell
- $! :PID del ultimo comando &
- $HOME
- $PATH
- $PS1: prompt de ‘ espera’
- $PS2: prompt de ‘ continua’
- $IFS: Lista de char que separan palabras en los argumentos
Las variable de entorno se pueden ver así:
echo $< tab> < tab> (solo los nombres de las variables env (con los valores asignados) set | less
- Ordenes condicionales ( if test $2=$var1 then … fi)
if [ "$1" = "hola" ]; then ordenes elif [ ]; then ordenes else ordenes fi
Aprendiendo shell scripting en Linux: variables y parámetros
En el articulo Introducción a los scripts en Linux nos adentramos en el mundo de los shell scripts, explicamos para que sirven, como se crean y como ejecutarlos, pero esto solamente fue una pequeña introducción, ya que la shell y por consecuencia los shell scripts, no son solamente simples interpretes de comandos, disponen de herramientas típicas de los lenguajes de programación como las variables, las operaciones aritméticas, los controles de flujo y bucles, etc. En esta ocasión vamos a hablar de dos herramientas imprescindibles a la hora de escribir nuestros scripts, las variables y los parámetros.
Las variables
Las variables son una herramienta que nos va a permitir guardar valores numéricos o cadenas de caracteres en memoria, pudiendo acceder a esta mediante el nombre que le asignemos. Estas nos van a ser de gran utilidad a la hora de dar mas complejidad a nuestros scripts y realizar operaciones mas elaboradas. Lo primero que tenemos que conocer sobre las variables es como declararlas, como asignarles un valor y como acceder a su contenido.
En muchos lenguajes de programación es posible declarar una variable y después darle un valor, pero en el caso de los shell scripts, la declaración de la variable se efectuá en el momento en el que le asignamos un valor. Esta asignación se efectuá mediante el carácter =.
var1=ovtoaster
En este comando estamos creando una variable con el nombre var1 y el valor ovtoaster.
El acceso a una variable es tan sencillo como poner el signo $ antes del nombre, la shell cuando encuentra este símbolo entiende que la palabra que le precede es una variable.
echo $var1
Resultado:
ovtoaster
Evidentemente las variables las podemos utilizar como parámetro para cualquier comando, no solamente para echo
Si deseamos borrar una variable lo aremos mediante el comando unset de forma que con la instrucción:
unset var1
estamos borrando tanto la variable var1 como su contenido.
Cuando creamos variables de la forma que hemos indicado, sus valores son guardados como una cadena de caracteres, pero en muchas ocasiones necesitaremos operar con números y hacer cuentas con ellos, para esto tenemos el comando typeset. Pasandole el parámetro -i ( integer ) y la variable que queremos convertir a tipo numérico, crearemos esta variable de tipo integer.
Un ejemplo:
#! /bin/bash typeset -i suma suma=4+6 echo $suma
resultado:
10
Cuidado, si asignamos un valor no numérico a estás variables obtendremos un error.
Es posible leer un valor por la entrada estándar ( el teclado si no utilizamos una redireccion ) de forma dinámica y guardar esta lectura en una variable con el comando read. El comando read nos va a crear una nueva variable con el valor que se le asigne por la entrada estándar.
Ejemplo:
#! /bin/bash echo "Introduce tu ciudad: " read ciudad echo "tu ciudad es: " echo $ciudad
Si la entrada estándar es el teclado ( lo es por defecto ), el resultado y el valor de $ciudad sera el valor que introduzcamos.
Ademas de las variables que podemos definir nosotros mismos, disponemos de unas cuantas variables especiales predefinidas que nos pueden ser de gran utilidad, estas variables son las variables de sistema y las especiales. Las primeras son variables que se inician con la shell y que pueden ser modificadas (con cuidado), mientras que las segundas son variables unicamente de acceso ( su valor no se puede modificar ). Os dejo una lista de las variables de sistema y otra de las variables especiales:
Los arrays nos van a permitir crear estructuras de datos en la que vamos a poder almacenar 1024 variables, se declaran mediante los corchetes [ ] o asignando los valores de forma directa, siendo el 0 la primera posición y 1023 la ultima. Si queremos acceder a las variables del array lo aremos con el símbolo $ precedido del nombre de la variable con la posición a la que queremos acceder entre [ ] y estos dos elementos dentro de { }.
Ejemplos:
#! /bin/bash
ciudad[0]="Madrid"
ciudad[1]="Tokyo"
ciudad[2]="Berlin"
ciudad[4]="Lima"
echo ${ciudad[4]}
Lima
Resultado:
Lima
También es posible listar todos los elementos de una vez mediante el carácter *:
#! /bin/bash
ciudad[0]="Madrid"
ciudad[1]="Tokyo"
ciudad[2]="Berlin"
ciudad[4]="Lima"
echo ${ciudad[*]}
Resultado:
Madrid Tokyo Berlin Lima
O inicializar el array en una sentencia:
#! /bin/bash
ciudad=(Madrid Tokyo Berlin Lima)
echo ${ciudad[4]}
Resultado:
Lima
Los parámetros
En muchas ocasiones necesitamos que nuestros scripts reciban información a la hora de ejecutarlos, y para esto vamos a utilizar los parámetros de posición. Los parámetros de posición son argumentos que pasamos en el momento de ejecución del script, estos se denominan de esta manera por el hecho que toman un numero como nombre de variable según su posición, de forma que el argumento numero 1 que pasemos al script sera la variable $1. Dentro del script estas son las variables que vamos a utilizar para interactuar con los parámetros:
$1 … $9: Argumentos pasados al programa. Si usamos las llaves “{}” para nombrar las variables el limite se puede extender, pues ${11} es el undécimo argumento y no $1 y un 1.
$0: Nombre del programa que se está ejecutando.
$#: Número de argumentos que se han pasado al programa.
$* : Todos los argumentos pasados al programa.
$@: Todos los argumentos pasados al programa pero teniendo en cuenta su separación.
Con el comando set vamos a poder asignar nuevos valores a los parámetros de posición, la mejor forma de verlo es mediante un ejemplo:
Código del script pruebaSet. sh
#! /bin/bash echo "Todos: $*" set ov toaster punto com echo "todos después de set: $*"
De forma que ejecutándolo de la siguiente manera:
./pruebaSet. sh uno dos tres cuatro cinco
El resultado es el siguiente:
Todos: uno dos tres cuatro cinco todos después de set: ov toaster punto com
En este cambio se sustituyen las cuatro primeras variables y la quinta se borra.
Por otra parte el comando shift nos va permitir cambiar de posición los parámetros, una llamada al método shift desplaza una posición hacia abajo todas las variables, de forma que si tenemos $1 = ov, $2 = toaster, $3 = punto y $4 = com, al ejecutar el comando shift la variable $1 tendrá el valor toaster, $2 = punto y $3 = com, perdiendo el valor de la variable $1. También podemos ejecutar el comando shift pasando un numero n para hacer el desplazamiento n posiciones.
Espero que haya quedado claro como funcionan estas dos herramientas tan imprescindibles, sin ellas los scripts no pueden adquirir complejidad y realizar funciones mas elaboradas. Si tienes interés en aprender mas sobre el shell scripting en Linux estate atento a ovtoaster, tenemos pensado ir profundizando en el tema con nuevos artículos ( puedes recibir un aviso de nuestros nuevos artículos mediante las redes sociales o vía e-mail ), aquí están los artículos sobre el tema que hemos escrito hasta el momento:
Linea de comandos:
1- Introducción a la linea de comandos de Linux
2- Linea de comandos de Linux: Entrada y salida estándar
3- Explainshell, comprendiendo los comandos de Linux
Shell Scripting:1- Introducción a los scripts en Linux
2- Aprendiendo shell scripting en Linux: variables y parámetros
3- Aprendiendo shell scripting en Linux: condicionales y bucles
4- Aprendiendo shell scripting en Linux: Las funciones
Sobre el autor /
Entusiasta de las tecnologías libres y fundador de OvToaster. com | “Las obras de conocimiento deben ser libres, no hay excusas para que no sea así“
Articulos relacionados
10 comentarios
Deja tu comentario
Suscríbete a Ovtoaster
Enterate de los nuevos artículos de OvToaster, nada de spam, lo odiamos tanto como tu.
Artículos destacados
Copyright, Copyleft y Creative Commons, la jungla de los derechos de autor
Que hacer después de instalar Manjaro Linux
Gestión de ficheros en Linux para dummies
Inteligencia artificial, ¿Turing encerrado en la habitación china?
Aprendiendo shell scripting en Linux: variables y parámetros


Hola:
Ejecuto, en línea de comandos, la visualización de vídeo con omxplayer a través de xterm en Raspberry,
por ej.
xterm -fullscreen -fg black -bg black -e omxplayer %1
como quiera que hay múltiples posibilidades de ejecución, en cuanto a opciones y parámetros considero el ejecutar cada tipo de video, . vid, . mtk, mp4, etc con el script correspondiente lanzándolo a través del doble click del ratón encima del fichero a reproducir.
La ayuda que te pido es la siguiente:
¿cómo se asigna el nombre del fichero, sobre el que se clika, a una variable dentro del cuerpo del script?
p ej: matroska. sh (con permiso de ejecución)
#! /bin/bash
# -*- ENCODING: UTF-8 -*-
pelicula=$1
ruta=`pwd`
subt=”$ruta”/”$1″. srt
xterm -fullscreen -fg black -bg black -e omxplayer –subtitles $subt $1 (no funciona) ******
xterm -fullscreen -fg black -bg black -e omxplayer %1 (no funciona) ****** etc
exit
Es decir, cuando cliko sobre el fichero a reproducir, ¿ hay alguna forma de conseguir que el nombre de ése fichero sea pasado como primer parámetro ($1), ó cualquier otro, dentro del script?
Previamente he asignado a la extensión de los ficheros mkv la ejecución del script matroska. sh con doble click sobre ellos.
sudo! !! !! !
Hola, muchas gracias por el aporte, estoy en un proyecto de lector de huellas y quiero crear una tabla en raspberry pi 2 y pasar esos datos a una tabla de excel, lo que no se es que variable ocupar para que me vaya guardando los datos, de antemano muchas gracias y un saludo.
Muchas gracias por la info, excelente aporte… podrías ayudarme con algo? tengo que desarrollar un interprete de comandos para Linux… donde empiezo? de antemano muchas gracias por cualquier ayuda… éxitos! !!
Buenos días Alberto,
Lo que pides es bastante complejo, creo que para poder ayudarte, aunque sea un poco, me tienes que explicar un poco tus conocimientos.
Creo que para un interprete sencillo la mejor opción es c.
Saludos!
Gracias me sirvio de mucho la explicacion clara, mañana tengo un examen y gracias a esto ahora comprendo todo mejor… mil gracias por el aporte
Un placer Fabian
Muchas gracias por la INFO, se agradece la claridad de los ejemplos para comprender mejor todo esto de los scripts.
¡Gracias a ti yeraki! Un placer ser de ayuda
Muchas gracias por compartir estos artículos.
Van muy bien para sacar más provecho a la línea de comandos.
Paco García.
Muchas gracias Paco, me alegra que te sea de utilidad