Variables, declaraciones y loops#
Variables#
Una variable es un término que contiene almacenado un dato con información simple y que puede cambiar el dato.
counter=1
echo $counter
echo counter
Qué diferencia hay entre counter
y $counter
? Que la segunda es una variable y por lo tanto puede tomar cualquier valor según lo definamos.
If#
Una declaracion (statement) condicional es if y determina que, si un chequeo es verdadero, realice una acción, y si es falso no lo haga. If tiene el siguiente formato:
if [ <un chequeo> ]
then
<comando>
fi
Todo lo que esté entre then y fi se ejecutará solamente si el chequeo (entre corchetes) es verdadero.
Un ejemplo simple que chequea si un número es mayor que otro (gt
significa “greater than”)
num1=10
num2=5
if [ $num1 -gt $num2 ]; then
echo "num1 es $num1 y es mayor que $num2"
fi
While loop#
Los loops son muy importantes porque permiten que un comando corra recurrentemente hasta que suceda una situación declarada (statement) o la expresión sea falsa. Este principio es fundamental para la automatización. El loop while define que, mientras una expresión es verdadera, continúe ejecutando las líneas de código. Tiene el siguiente formato
while [ un chequeo ]
do
<comando>
done
Ahora vamos a escribir un loop para imprimir los numeros del 1 al 10
Vamos a descomponer las líneas:
Linea 1: inicializa la variable counter con un valor.
Linea 2: Chequea que mientras (While) la declaración es verdad (counter es menor o igual a 10)
Linea 3: ejecutemos el siguiente comando.
Linea 4: aquí podemos poner cualquier comando. En este caso echo se utiliza porque es simple para ilustrar el propósito.
Linea 6: incrementamos la variable counter por 1 [counter++].
Linea 7: al final del loop, vuelve al inicio a hacer el chequeo. Si es verdad, ejecuta el comando, si es falso conitnua a la siguiente linnea.
Este programa que ejecutamos en la terminal lo podemos escribir en un script para correrlo las veces que necesitemos y para registrar lo que hicimos
$ nano while_loop.sh
#!/bin/bash
# Basic while loop
counter=1
while [ $counter -le 10 ]
do
echo $counter
((counter++))
done
[ctrl-o] [enter]
y [ctrl-x]
For loop#
Este loop toma cada item en una lista (en orden, uno después del otro), asigna ese item como valor a la variable var, ejecuta los comandos entre do y done y vuelve al inicio para tomar el siguiente item y repetir recurrentemente. Tiene la siguiente sintaxis:
for var in <list>
do
<comando>
done
El siguiente ejemplo ilustra su uso en un directorio que contiene los archivos fasta de secuencias de covid19. Primero vamos a crear un directorio que se llame sars_covid19 y luego vamos a descargar allí las secuencias del:
genoma
proteinas
cds (genes codificadores de proteínas)
mkdir sars_covid19
curl http://ftp.ensemblgenomes.org/pub/viruses/fasta/sars_cov_2/dna/Sars_cov_2.ASM985889v3.dna_rm.toplevel.fa.gz -o ./sars_covid19/Sars_cov.dna.fa.gz
curl http://ftp.ensemblgenomes.org/pub/viruses/fasta/sars_cov_2/pep/Sars_cov_2.ASM985889v3.pep.all.fa.gz -o ./sars_covid19/Sars_cov.prot.fa.gz
curl http://ftp.ensemblgenomes.org/pub/viruses/fasta/sars_cov_2/cds/Sars_cov_2.ASM985889v3.cds.all.fa.gz -o ./sars_covid19/Sars_cov.cds.fa.gz
cd sars-covid19
ls
gunzip *.gz
Cuando descargamos los archivos los nombramos con un ./sars_covid
que precede al nombre. Esto indica que lo guarde en el directorio llamado sars_covid
que esta dentro del directorio donde nos encontramos .
for f in $(ls);
do wc -l $f;
done
Note como listamos el directorio usando ls
y lo encerramos en el comanod $()
. Esto nos permite crear una variable que contiene el resultado del comando ls
.
Luego iteramos sobre cada item del directorio sars_covid19 y contamos el número de líneas con wc -l