Fundamentos
echo y Navegación
echo "Hello, World!" # imprimir texto pwd # mostrar directorio actual cd /path/to/dir # cambiar directorio cd .. # subir un nivel cd ~ # ir al directorio home cd - # ir al directorio anterior
Listar y Crear
ls # listar archivos ls -la # formato largo, mostrar ocultos ls -lh # tamaños legibles mkdir mydir # crear directorio mkdir -p a/b/c # crear directorios anidados
Copiar, Mover y Eliminar
cp file.txt copy.txt # copiar archivo cp -r dir/ backup/ # copiar directorio recursivamente mv old.txt new.txt # renombrar / mover rm file.txt # eliminar archivo rm -r dir/ # eliminar directorio recursivamente rm -rf dir/ # eliminar forzado (sin confirmación)
Variables y Expansión
Variables
name="Alice" # asignar (¡sin espacios!) echo "$name" # expansión de variable echo "${name}_file" # llaves para claridad readonly PI=3.14 # constante unset name # eliminar variable
Variables Especiales
$0Nombre del script
$1 $2 ...Argumentos posicionales
$#Número de argumentos
$@Todos los argumentos (palabras separadas)
$*Todos los argumentos (cadena única)
$?Estado de salida del último comando
$$ID del proceso actual
$!PID del último proceso en segundo plano
Sustitución de Comandos y Aritmética
files=$(ls) # capturar salida today=$(date +%Y-%m-%d) # sustitución de comando count=$((5 + 3)) # aritmética: 8 echo $((10 / 3)) # división entera: 3 echo $((10 % 3)) # módulo: 1
Operaciones con Cadenas
${#str}Longitud de cadena
${str:0:5}Subcadena (desplazamiento:longitud)
${str/old/new}Reemplazar primera coincidencia
${str//old/new}Reemplazar todas las coincidencias
${str^^}Mayúsculas
${str,,}Minúsculas
Condicionales
if / elif / else
if [[ "$name" == "Alice" ]]; then echo "Hi Alice" elif [[ "$name" == "Bob" ]]; then echo "Hi Bob" else echo "Who are you?" fi
Operadores de Prueba
-eq -neIgual / distinto (enteros)
-lt -gtMenor / mayor que (enteros)
-le -geMenor/mayor o igual (enteros)
== !=Igual / distinto (cadenas)
-z "$str"Cadena vacía
-n "$str"Cadena no vacía
-f fileArchivo existe y es regular
-d dirDirectorio existe
-e pathRuta existe (cualquier tipo)
-r -w -xLectura / escritura / ejecución
&& ||AND / OR lógico
Bucles
Bucle for
for fruit in apple banana cherry; do echo "$fruit" done for f in *.txt; do echo "File: $f" done
Bucle for Estilo C
for ((i=0; i<5; i++)); do echo "$i" done
Bucle while
count=0 while [[ $count -lt 5 ]]; do echo "$count" ((count++)) done
Control de Bucles
breakSalir del bucle
continueSaltar a la siguiente iteración
Funciones
Definir y Llamar
greet() { echo "Hello, $1!" # $1 = primer arg return 0 # estado de salida } greet "Alice" # Hello, Alice!
Variables Locales y Valores de Retorno
add() { local sum=$(($1 + $2)) echo "$sum" # "retornar" vía stdout } result=$(add 3 5) # capturar: 8
Pipes y Redirección
Pipes
ls -l | grep ".txt" # pipe de salida cat log | sort | uniq # encadenar comandos cmd1 | tee out.txt # pipe + guardar en archivo
Redirección
cmd > fileRedirigir stdout (sobrescribir)
cmd >> fileRedirigir stdout (añadir)
cmd < fileRedirigir stdin desde archivo
cmd 2> fileRedirigir stderr
cmd 2>&1Redirigir stderr a stdout
cmd &> fileRedirigir stdout + stderr
cmd << EOFHere document (entrada en línea)
/dev/nullDescartar salida: cmd > /dev/null
Operaciones con Archivos
Ver Archivos
cat file.txt # mostrar archivo completo head -n 10 file.txt # primeras 10 líneas tail -n 10 file.txt # últimas 10 líneas tail -f log.txt # seguir (actualizaciones en vivo) less file.txt # visor paginado
Contar y Buscar
wc -l file.txt # contar líneas wc -w file.txt # contar palabras wc -c file.txt # contar bytes find . -name "*.txt" # buscar por nombre find . -type d # buscar directorios find . -mtime -7 # modificados en últimos 7 días
Otros Comandos de Archivos
touch fileCrear archivo / actualizar marca de tiempo
stat fileMetadatos del archivo (tamaño, fechas)
file img.pngDetectar tipo de archivo
diff a.txt b.txtComparar dos archivos
sort file.txtOrdenar líneas
uniqEliminar duplicados adyacentes
cut -d: -f1Extraer campos por delimitador
tr 'a-z' 'A-Z'Traducir / reemplazar caracteres
Procesamiento de Texto
grep
grep "error" log.txt # buscar patrón grep -i "error" log.txt # sin distinción mayúsculas grep -r "TODO" src/ # búsqueda recursiva grep -n "func" file.go # mostrar números de línea grep -c "error" log.txt # contar coincidencias grep -v "debug" log.txt # invertir coincidencia
sed
sed 's/old/new/' file # reemplazar primera por línea sed 's/old/new/g' file # reemplazar todas sed -i 's/old/new/g' file # editar en sitio sed -n '5,10p' file # imprimir líneas 5-10 sed '/pattern/d' file # eliminar líneas coincidentes
awk
awk '{print $1}' file # imprimir primer campo awk -F: '{print $1}' file # delimitador personalizado awk '$3 > 100' file # filtrar por valor de campo awk '{sum+=$1} END{print sum}' file # sumar columna
Permisos
chmod
chmod 755 script.sh # rwxr-xr-x chmod +x script.sh # agregar ejecución chmod -w file.txt # quitar escritura chmod u+x,g-w file # usuario +ejec, grupo -escritura
Referencia de Permisos
r (4)Lectura
w (2)Escritura
x (1)Ejecución
u / g / oUsuario / Grupo / Otros
755Propietario: rwx, Grupo/Otros: r-x
644Propietario: rw-, Grupo/Otros: r--
Propietario
chown user file.txt # cambiar propietario chown user:group file.txt # cambiar propietario + grupo chown -R user:group dir/ # recursivo