Tutoriales

Cómo formatear programas de shell con Shfmt en Linux

En esta guía, vamos a discutir qué es Shfmt, cómo instalar Shfmt en Linux y, finalmente, formatear programas de shell con Shfmt en Linux.

1. Introducción

Si tiene experiencia en programación, es posible que esté familiarizado con términos como formateo, pelusa, etc.

Hay importantes herramientas de apoyo que vienen con cada editor de código para facilitar nuestra vida de programación.

Del mismo modo, tenemos para los scripts de shell shfmt. shfmt se utiliza para formatear, analizar e interpretar sus scripts de shell. Shfmt admite shells bash, mksh y posix.

Shfmt es altamente configurable y puede formatear su código de diversas formas y convenciones.

Puede instalar y utilizar la herramienta Shfmt desde la línea de comandos para trabajar con sus scripts de shell. También hay complementos en editores de texto populares que usan shfmt para formatear sus scripts de shell.

2. Instale Shfmt en Linux

Shfmt está disponible como una aplicación instantánea. Si su distribución tiene Snap instalado, puede instalar shfmt con el siguiente comando:

$ sudo snap install shfmt

La otra forma de instalar Shfmt es usar el siguiente comando de una línea:

$ curl -sS https://webinstall.dev/shfmt | bash

Los dos métodos anteriores se pueden utilizar independientemente de la distribución que esté ejecutando. Hay algunas distribuciones en las que puede instalar shfmt desde sus repositorios de paquetes.

Para instalar shfmt en Alpine Linux, ejecute:

$ sudo apk add shfmt

Instale shfmt en Arch Linux, EndeavorOS y Manjaro Linux:

$ sudo pacman -S shfmt

Instale shfmt en FreeBSD.

$ sudo pkg install devel/shfmt
$ sudo pkg install shfmt

3. Formatee los programas de shell con Shfmt en Linux

Si es la primera vez que usa Shfmt, comience ejecutando el help Comando para tener una idea de qué opciones admite shfmt:

$ shfmt --help

Ahora déjame mostrarte un ejemplo. Hice un script de shell sin el formato adecuado.

Script de muestra

Eche un vistazo a la imagen de arriba. Parece extraño, ¿no?

Formateemos este script usando formato shfmt Como a continuación:

$ shfmt dummy.sh

Shfmt comienza a formatear el script especificado.

Aquí está el resultado del script anterior antes y después de la optimización:

Programas de shell con shfmt.  formato
Programas de shell con shfmt. formato

En el resultado anterior, puede ver que nuestro script está bien formateado.

Quizás se pregunte por qué la sangría está configurada para establecer pestaña. Esto es estándar y se puede cambiar.

3.1. Sangría personalizada

Yo siempre sigo Secuencia de comandos de documentos de estilo de script de shell de Google y poner la sangría en 2 lugares en lugar de pestañas.

Para establecer una sangría personalizada: -i Bandera. Veamos qué dice el menú de ayuda al respecto. -i Bandera:

Sangría personalizada con shfmt
Sangría personalizada con shfmt

Cualquier valor mayor que cero se marca con. a entregar -i bandera es el número de espacios utilizados para la intención.

$ shfmt -i 2 scriptname.sh
Sangría con shfmt.  establecer
Sangría con shfmt. establecer

3.2. Salida de estilo diferencial

Si necesita información sobre qué se formateó exactamente, puede usar -d Bandera. Eche un vistazo a la imagen de abajo, muestra lo que está formateado en color verde + Símbolo.

Salida de estilo diferencial
Salida de estilo diferencial

3.3. Enumere los scripts que se formatearán

Puede utilizar el … -l Bandera que obtiene la lista de scripts a formatear.

Para demostrar esto, crearé tres archivos de script. Dejé el segundo y tercer guiones sin formato. Y tengo mucho espacio en eso echo Testimonio de los actos 2º y 3º.

Scripts de entrada
Scripts de entrada

Ahora, cuando ejecuto el comando shfmt con el. ejecutar -l Marcar, solo debería seleccionar mis segundos archivos de muestra 2 y 3:

$ shfmt -l sample*.sh
sample2.sh
sample3.sh
Lista de scripts a formatear
Lista de scripts a formatear

3.4. Escribir salida en archivo

De forma predeterminada, Shfmt escribe la salida del script formateado en stdout, el terminal. Si desea escribir la salida en un archivo, puede -w Bandera.

$ shfmt -w scriptname.sh

3.5. Encuentra scripts de shell en la ruta

Con -f Flag shfmt escanea de forma recursiva el directorio especificado y encuentra todos los scripts de shell.

No importa si un script tiene la extensión .sh o no. Shfmt puede reconocer todos los scripts de shell, incluso si no tienen extensiones.

$ shfmt -f /home/ostechnix
/home/ostechnix/.config/envman/load.sh
/home/ostechnix/.local/bin/webi
/home/ostechnix/Downloads/sampleshell
/home/ostechnix/dummy.sh

3.6. Shfmt también puede detectar errores

Shfmt no solo se utiliza para formatear scripts de shell. También puede detectar los errores en los scripts.

Eche un vistazo a la imagen de abajo donde faltan los corchetes de salida de mi función y shfmt lo reconoce.

Shfmt puede detectar errores de sintaxis en scripts
Shfmt puede detectar errores de sintaxis en scripts

También puede usar la función de verificación de sintaxis integrada en Bash escribiendo -n Bandera que valida tu código y
enumere todos los errores.

$ bash -vn scriptname.sh

3.7. Shfmt en editores externos

En tiempo real, puede usar cualquier editor de texto de su elección como Vim, Atom, Sublime Text, Vs-Code, etc. Algunos de estos editores de texto pueden tener soporte nativo para formatear scripts bash.

Cada editor de código tiene un complemento que se integra con shfmt. Vaya al repositorio oficial de GitHub (enlace al final) y en la parte inferior de la página verá la lista de complementos para cada editor de texto que usa shfmt debajo.

Conclusión

En este manual hemos visto ejemplos prácticos de qué es Shfmt y cómo formatear programas de shell con Smfmt. Shfmt será una herramienta muy útil para mantener sus scripts limpios, ordenados y organizados. Integre editores de texto y tendrá un flujo de trabajo muy fluido al crear los scripts.

Recurso:

Imagen seleccionada de Pixabay.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba