#!/bin/bash # Bash específico
#!/usr/bin/env bash # Más portable
#!/bin/sh # Shell POSIX básico
9 Introducción al scripting
En este módulo se mostrará lo que es un script de shell, cómo definir el intérprete, asignar permisos y ejecutar scripts.
9.1 Shebang
El shebang (#!
) en la primera línea de un script indica al sistema qué intérprete utilizar.
Sin él, tendrías que invocar explícitamente bash script.sh
.
9.2 Comentarios
#
: los comentarios comienzan con#
y el sistema los ignora.- Incluye metadatos, explicaciones, y ejemplos de uso.
#!/bin/bash
# Este script lista archivos FASTQ y cuenta sus líneas
9.3 Permisos de Ejecución
Para convertir un archivo en ejecutable:
chmod +x script.sh
rwx
: permisos de lectura, escritura y ejecución.- Ver permisos:
ls -l
9.4 Estructura Básica
#!/bin/bash
set -euo pipefail # Configuración robusta
# Variables globales
SCRIPT_DIR="$(dirname "$0")"
OUTPUT_DIR="./results"
# Función de ayuda
usage() {
echo "USO: $0 <input.fastq> [output_dir]"
echo "Ejemplo: $0 sample.fastq /tmp/results"
}
# Función principal
main() {
local input="$1"
local output="${2:-$OUTPUT_DIR}"
echo "Procesando: $input"
mkdir -p "$output"
# Procesamiento aquí
process_file "$input" "$output"
}
# Verificar argumentos
[[ $# -eq 0 ]] && { usage; exit 1; }
# Ejecutar
main "$@"
9.5 Ejemplo Bioinformático
Nivel: conteo de lecturas en varios archivos FASTQ:
#!/bin/bash
# Cuenta lecturas en archivos FASTQ/FASTA
count_reads() {
local file="$1"
case "${file##*.}" in
gz) lines=$(zcat "$file" | wc -l) ;;
*) lines=$(wc -l < "$file") ;;
esac
# FASTQ: 4 líneas por read, FASTA: contar headers
if [[ "$file" == *fastq* ]]; then
echo "$((lines / 4))"
else
grep -c '^>' "$file"
fi
}
for file in data/*.{fastq,fasta}{,.gz}; do
[[ -f "$file" ]] && printf "%-20s %'d reads\n" "$(basename "$file")" "$(count_reads "$file")"
done
9.6 Consejos Avanzados y Buenas Prácticas
- Incluye
set -euo pipefail
para fallar rápido ante errores y variables no definidas. - Usa un encabezado con
usage()
que muestre sintaxis y ejemplos de uso. - Almacena rutas en variables configurables al inicio.
- Versiona tus scripts con comments de changelog.
9.7 Resumen de Comandos
Comando | Descripción |
---|---|
#!/bin/bash |
Define intérprete de Bash |
chmod +x file |
Da permiso de ejecución al archivo |
ls path/*.fastq |
Lista archivos FASTQ |
wc -l < file |
Cuenta líneas |
exit 0 |
Salida exitosa |