Deja tus scripts bash perfectos con ShellCheck (Pagina 1) / Scripts y programación / Foro Wifi-libre.com

El libre pensamiento para un internet libre

No estas registrado.     

Anuncio

Wifi-highpower.es es distribuidor oficial de Alfa Network

#1 28-11-2016 18:30:07

kcdtv
Administrator

Registrado: 14-11-2014
Mensajes: 3,278

Deja tus scripts bash perfectos con ShellCheck

ShellCheck

shellcheck_5.jpg

Antes de todo un saludo amistoso a nuestro amigo del espacio V1sitor quién me ha hecho conocer shellcheck.
Es un script relativamente reciente, de 2014, y que me hubiera venido como un guante en la mano cuando empecé a interesarme a bash.
  Nunca es tarde para tomar buenas costumbres.
     ¡Te invito a usar shellcheck ya!
  Bash, como todo tipo de lenguaje, evoluciona
   Las ordenes y las sintaxis cambian.
Esto puede provocar errores que pueden "romper" el script.
  Estos errores se notan enseguida ya que tenemos un "fail" de primera y el script se parra en modo "error" indicando la linea incriminada:

shellcheck_1.jpg

Hay otros tipos de errores que no se ven.
  El script funciona sin que se nota nada.
Pero están allí y pueden provocar raras tipo "buffer overflow" y provocar de vez en cuando unos crash del script muy difíciles de corregir (apuntarán al script y a bash en el log de error)

  Lo has entendido: Shellcheck es un script que tiene la gran virtud de repasar nuestros scripts y apuntar a todos estos pequeños detalles que podrían generar problemas. 
Y puedo decir mirando los códigos bash que circulan en nuestro mundillo (incluyendo los dos o tres míos) que haría falta une buena sesión intensiva de shellcheck a [email protected] lol
  Es normal: Si por ejemplo con las versiones antiguas de bash se usaba "seq" y que funciona, pues, lo sigues usando si no te enteras de que esta "abandonado" 
 

Instalando y probando shellcheck

  Esta disponible desde los repositorios de varias distribuciones.
Para las distribuciones basadas en debian (Kali, Ubuntu etc...)

sudo apt-get install shellcheck

  La sintaxis es muy simple y hay muy pocas opciones

shellcheck_2.jpg

Analizo el script en el cuál he puesto un error de sintaxis para provocar un error.
La salida es mucho más completa que la salida error estándar en consola (ver primera captura del tema)
Se sugieren repuestas y pistas.

shellcheck_3.jpg

Lo que he hecho es añadir un " para romper el código.
Tengo aquí muchos elementos para ver lo y entenderlo

  Quito el error voluntario y ahora analizo el código que se ejecuta perfectamente y sin errores.

shellcheck_4.jpg

  Podéis ver que se usa un código de color para clasificar los errores.
  Mi error rojo no se ve ejecutando el código, el bucle rula y cumple su función.
Nunca me hubiera enterrado...

  Voy a darle un buen repaso a este código y dejarlo  niquelado... ¡Gracias shellcheck!

Desconectado

Anuncio

Wifi-libre.com: El libre pensamiento para un internet libre / Regístrese ahora

#2 28-11-2016 19:24:16

Koala
Very Important Usuario

Registrado: 11-09-2016
Mensajes: 415

Re: Deja tus scripts bash perfectos con ShellCheck

Muy bueno ! smile

He probado con hostbase y me ha salido esas 2 cosas:

^-- SC1035: You are missing a required space after the !.
^-- SC2046: Quote this to prevent word splitting.

Trabajar con eso ayuda mucho pienso cool

Desconectado

#3 28-11-2016 19:30:41

Betis-Jesus
Very Important Usuario

Registrado: 29-03-2015
Mensajes: 425
Página Web

Re: Deja tus scripts bash perfectos con ShellCheck

a final no deja ser como un debug de errores de sistexi en el propio codigo para bash la verdad es una buena herramienta para proposito de depuracion en el codigo.

Desconectado

#4 28-11-2016 20:48:45

kcdtv
Administrator

Registrado: 14-11-2014
Mensajes: 3,278

Re: Deja tus scripts bash perfectos con ShellCheck

@ Koala
¿Solo dos?
  ¡Te felicito! smile
Mi script de 80 lineas tenía una docena de advertencias con dos naranjas y una roja... big_smile
Y tengo los mismos errores que tu... En una sola linea big_smile
Es muy bueno para quitarse malos hábitos y actualizar su sintaxis para estar bien en fase con bash.

Desconectado

#5 28-11-2016 21:40:35

Koala
Very Important Usuario

Registrado: 11-09-2016
Mensajes: 415

Re: Deja tus scripts bash perfectos con ShellCheck

Quiero décir 2 en rojo cool pero tengo pero en verde cosas como asi

C2006: Use $(..) instead of legacy `..`.
^-- SC2086: Double quote to prevent globbing and word spl
^-- SC2086: Double quote to prevent globbing and word splitting

Desconectado

#6 29-11-2016 01:19:39

kcdtv
Administrator

Registrado: 14-11-2014
Mensajes: 3,278

Re: Deja tus scripts bash perfectos con ShellCheck

Esto es realmente secundario... es poner siempre las variables entre ""
Lo hago de costumbre solo cuando es necesario.
Esto dicho siguiendo las indicaciones verdes hay mejoras simpáticas que no hubiera encontrado solo
Por ejemplo esta linea :

STRING=$(printf '%07d\n' $(($CONVERTEDBSSID%10000000)))  

quedó así

STRING=$(printf '%07d\n' $((CONVERTEDBSSID%10000000)))

No pensé en que no era necesario el "$" cuando usamos variables que tienen por valor un numero entero en una operación matemática. 
Detalles así, no muy importantes, pero que nos ayudan a progresar.

Desconectado

#7 29-11-2016 05:47:20

Koala
Very Important Usuario

Registrado: 11-09-2016
Mensajes: 415

Re: Deja tus scripts bash perfectos con ShellCheck

A mi tambien habia echo la misma cosa tambien, poniendo el "$" a muchas veces... pero como dices ayuda a apprender de manera limpia smile

Ultima edición por Koala (29-11-2016 05:47:57)

Desconectado

#8 30-11-2016 05:35:11

USUARIONUEVO
Usuario

Registrado: 07-07-2015
Mensajes: 246

Re: Deja tus scripts bash perfectos con ShellCheck

No se si sera igual de efectivo , pero hay version web.

https://www.shellcheck.net/

Desconectado

#9 30-11-2016 13:46:00

kcdtv
Administrator

Registrado: 14-11-2014
Mensajes: 3,278

Re: Deja tus scripts bash perfectos con ShellCheck

Si, es igual en versión web que en versión programa wink
La versión web esta sincronizada con los repositorios Git Hub, siempre se usa la ultima revisión en corso. :

On the web

Paste a shell script on http://www.shellcheck.net for instant feedback.

ShellCheck.net is always synchronized to the latest git commit, and is the simplest way to give ShellCheck a go. Tell your friends!

Desconectado

#10 04-12-2016 00:45:10

dynyly
Usuario

Registrado: 19-04-2015
Mensajes: 292

Re: Deja tus scripts bash perfectos con ShellCheck

salu2
tengo una pregunta
una cosa el script con el que empeze linsetgui y siguo aprendiendo estaba echo con zenity pero me da un error pero se ejecuta bien

Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.

pero se ejecuta bien pero da eso en consola

pero shellcheck no soy capaz de intalarlo o ejecutarlo me gustaria jugar mas con el ;por lo que se ve debe ser linea por linea de comando a verificar en la web
¿te da opciones de o pistas de codigo a insertar en caso de fallo ¿
podrias explicar un poquito mas eso de buscar errores es que lo que tu hiciste sabias donde estaba roto ;yo no o otro usuario que lo use
¿o solo te dice la linea donde falla el codigo  ;porque eso ya lo hace de serie mi sistema¿

Desconectado

#11 04-12-2016 15:43:21

Koala
Very Important Usuario

Registrado: 11-09-2016
Mensajes: 415

Re: Deja tus scripts bash perfectos con ShellCheck

Hola dynyly cool

No conosco linset y con que gui esta hecho y no se si has visto la tema de Kcdtv pero esa error parece normal:

transforma-muy-facilmente-tu-script-bash-en-una-gui-con-zenity

Dynyly escribió:

¿te da opciones de o pistas de codigo a insertar en caso de fallo ¿


Te da al principio tres colores verde, naranja y rojo que te da la importancia del error, por seguro tienes que ver mas verde que naranja o rojo.Te da la linea donde hay que hacer cambios y te da una indicacion por donde esta el problemo

^-- SC1035: You are missing a required space after the !.

Ahora lo que te queda a hacer es ir a la linea y cambiar la cosa smile

Ultima edición por Koala (04-12-2016 15:44:55)

Desconectado

#12 04-12-2016 15:55:34

kcdtv
Administrator

Registrado: 14-11-2014
Mensajes: 3,278

Re: Deja tus scripts bash perfectos con ShellCheck

Koala se me ha adelantado big_smile
Para completar su respuesta:

pero shellcheck no soy capaz de intalarlo o ejecutarlo me gustaria jugar mas con el ;por lo que se ve debe ser linea por linea de comando a verificar en la web

 
Si no nos explicas los pasos que sigues y no nos enseñas los mensajes de errores que tienes al compilar/instalar no podremos decirte nada. wink
En la web me parece que puedes pasar un script entero: No tienes que hacer lo linea por linea.

Desconectado

#13 04-12-2016 23:07:57

dynyly
Usuario

Registrado: 19-04-2015
Mensajes: 292

Re: Deja tus scripts bash perfectos con ShellCheck

salu2
gracias  por responder pos no soy capaz no me digas no ostante ya cuando hay errores avisa la consola de fallo y la linea pero me gustaria juagar con shellcheck

sencillamente :

wifislax ~ # git clone https://github.com/koalaman/shellcheck
Cloning into 'shellcheck'...
remote: Counting objects: 3180, done.
remote: Total 3180 (delta 0), reused 0 (delta 0), pack-reused 3180
Receiving objects: 100% (3180/3180), 2.36 MiB | 98.00 KiB/s, done.
Resolving deltas: 100% (1924/1924), done.
Checking connectivity... done..
wifislax ~ # sudo slapt-get --install /root/shellcheck
Leyendo listas de paquetes...No se pudo abrir package_data
package_data: No existe el fichero o el directorio
¿Tal vez quiera ejecutar --update?.
wifislax ~ # sudo slapt-get --update shellcheck
Recuperando los datos del paquete [ftp://ftp.slackware.com/pub/slackware/slackware-current/]...Hecho
Recuperando la lista de parches [ftp://ftp.slackware.com/pub/slackware/slackware-current/]...Hecho
Recuperando la lista de checksum [ftp://ftp.slackware.com/pub/slackware/slackware-current/]...Hecho
Recuperando la firma de checksum [ftp://ftp.slackware.com/pub/slackware/slackware-current/]...Hecho
Verificando la firma de checksum [ftp://ftp.slackware.com/pub/slackware/slackware-current/]...No hay clave para verificar
Recuperando ChangeLog.txt [ftp://ftp.slackware.com/pub/slackware/slackware-current/]...Hecho

termino de actualizar

sudo slapt-get --install shellcheck
Leyendo listas de paquetes...Hecho
No existe el paquete: shellcheck.
wifislax shellcheck # ls
Dockerfile          README.md   ShellCheck.cabal  quicktest        stack.yaml
Dockerfile_builder  Setup.hs    doc               shellcheck.1.md  test
LICENSE             ShellCheck  quickrun          shellcheck.hs
wifislax shellcheck # cd ShellCheck
wifislax ShellCheck # shellcheck --help
bash: shellcheck: no se encontró la orden.

Desconectado

#14 05-12-2016 13:55:30

kcdtv
Administrator

Registrado: 14-11-2014
Mensajes: 3,278

Re: Deja tus scripts bash perfectos con ShellCheck

no ostante ya cuando hay errores avisa la consola de fallo

No has entendido de qué va shellcheck...  Se trata justamente de enseñarte todos los errores que no ves en consola.
Estos errores que no "rompen" el código pero que están allí (y pueden provocar bugs muy difíciles de detectar)
En esta captura:

shellcheck_4.jpg

Todos estos "errores" me salen comprobando un script que funciona perfectamente, sin ninguno error en consola, el script hace exactamente lo que se le pide.
La gran mayoría son de color verde:  detalles.
  Cosas que se pueden mejorar en el código. 
  Cosas que no puedes ver si nadie con conocimiento no está aquí para enseñarlas. 

  Sobre tu instalación.
Lo que haces no tiene sentido smile
slapget son unos repositorios (pobres): No te hace falta bajar la rama de GitHub si usas los repositorios,
El ordenador ni va a mirrar lo que has descargado desde GitHub, va a pedir el paquete directo a tus repositorios (que no lo tienen.)
Mirra las instrucciones:
Caso uno: Desde repositorios 

On systems with Cabal (installs to ~/.cabal/bin):

cabal update
cabal install ShellCheck

On Debian based distros:

apt-get install shellcheck

On Gentoo based distros:

emerge --ask shellcheck

On Fedora based distros:

dnf install ShellCheck

On OS X with homebrew:

brew install shellcheck

On OS X with MacPorts:

port install shellcheck

On openSUSE:Tumbleweed:

zypper in ShellCheck

On other openSUSE distributions:
add OBS devel:languages:haskell repository from https://build.opensuse.org/project/repo … es:haskell
zypper ar http://download.opensuse.org/repositori … skell.repo
zypper in ShellCheck

Puedes hacerlo así en muchos sistemas (Ubuntu, debian, Kali, backbox etc...)  pero no en el tuyo (slackware con orden slapget)

Así que debes compilar y instalar tu el programa con la rama GitHub que acabas de descargas. 

Compiling from source

This section describes how to build ShellCheck from a source directory. ShellCheck is written in Haskell and requires 2GB of RAM to compile.
Installing Cabal
ShellCheck is built and packaged using Cabal. Install the package cabal-install from your system's package manager (with e.g. apt-get, yum, zypper or brew).
On MacPorts, the package is instead called hs-cabal-install, while native Windows users should install the latest version of the Haskell platform from https://www.haskell.org/platform/
Verify that cabal is installed and update its dependency list with

sudo cabal update

Compiling ShellCheck

git clone this repository, and cd to the ShellCheck source directory to build/install:

$ cabal install

This will compile ShellCheck and install it to your ~/.cabal/bin directory.
Add this directory to your PATH (for bash, add this to your ~/.bashrc):

export PATH="$HOME/.cabal/bin:$PATH"

Log out and in again, and verify that your PATH is set up correctly:

$ which shellcheck
~/.cabal/bin/shellcheck

Instalas primero cabal (es probable que no lo tengas en tus repositorios tampoco con lo cuál tendrás que instalarlo tu mismo)
Luego sigues las instrucciones para compilar: shellcheck

Desconectado

#15 05-12-2016 23:23:03

dynyly
Usuario

Registrado: 19-04-2015
Mensajes: 292

Re: Deja tus scripts bash perfectos con ShellCheck

salu2
gracias por tu paciencia amigo nunca me cansare de recordalo
que aun asi me sale linea en fallo era porque ya estaba quemado y como diciendo bueno a una mala tengo aviso en consola al no poder con shellcheck
pero ya sabia eso de los colores y que te dice errores que no salen a veces tan facilmente gracias de nuevo por recordarmelo
Uso slapt-get porque estoy con slakware pues wifislax es deribado de tal pero tambien gslapt y slpkg
perdona no se que es cabal gracias pero se necesita 2 gb de ram estoy en live como dices al tener instalado voy capao algo

Pero lo que si me interesa es como instalar lo que uno quiera en su sistema asi al menos se aprende algo mas

te sera pagado con el buen recuerdo amigo pues pocas cosas ahi mejor que recordar lo bueno de la persona y sus aportes
como dices en tus post cuando seas viejo ¿que les diras? a los nuevos
big_smile:D:D:D

Desconectado

#16 06-12-2016 00:04:50

USUARIONUEVO
Usuario

Registrado: 07-07-2015
Mensajes: 246

Re: Deja tus scripts bash perfectos con ShellCheck

Creo que el esfuerzo no compensa , ya que ademas esta la version web , ..que simplemente pegas el code de tu script y te marca los errores o mejoras.

Si aun quieres instalarlo , el proceso te va a requerir de muchos recursos, ya que hay que instalar haskell y dependencias, al no exirtir paquetes ya compilados tienes que compilarlos tu , como hay "prebuilds" , en slackbuilds.org , es mas facil.

slapt-src -u
slapt-src -i haskell-cabal-install
slapt-src -i haskell-json
slapt-src -i haskell-regex-tdfa
slapt-src -i haskell-QuickCheck

pero , por ejemplo ,compilar GHC , es una locura en un equipo medio , y esa esta entre los paquetes que necesitas para ejecutar shellcheck.


EDIT: Mira lo que dice las instrucciones para ghc

https://slackbuilds.org/repository/14.2/haskell/ghc/

You will need 4.3G of free space in /tmp/SBo to build this package.

osea que necesitas 4 gigas para compilar simplemente ghc , ademas es un paquete "duro" .. tardara mucho en compilar.

Creo que esta todo dicho , y para no desviar el hilo mas , en slackware o derivados , lo teneis jodido smile

Ultima edición por USUARIONUEVO (06-12-2016 03:10:36)

Desconectado

#17 07-12-2016 00:05:56

dynyly
Usuario

Registrado: 19-04-2015
Mensajes: 292

Re: Deja tus scripts bash perfectos con ShellCheck

sencillamente gracias no quiero ser troll ni nada parecido pero tengo que agradecer comentarios ; de grandes con conocimiento explicando  con paciencia grandes

Ultima edición por dynyly (17-12-2016 02:46:56)

Desconectado

Anuncio

Wifi-libre.com: El libre pensamiento para un internet libre / Regístrese ahora

Temas similares

Tema Respuestas Vistas Ultimo mensaje
8 338 Ayer 20:45:28 por kobol
Rompiendo WPA2 ? (KRACK) por markspitz15
1 155 Ayer 19:19:20 por kcdtv
1 19 Ayer 18:37:37 por kcdtv
4 3515 Ayer 17:24:29 por Flashed
Pegado:
Pegado:: Script multiuso wifi para Kali y otras distros por v1s1t0r  [ 1 2 3 8 ]
194 6839 Ayer 10:51:27 por v1s1t0r

Pie de página

Información del usuario

Ultimo usuario registrado: brawll
Usuarios registrados conectados: 0
Invitados conectados: 9

Estadisticas de los foros

Número total de usuarios registrados: 714
Número total de temas: 874
Número total de mensajes: 7,434

Máx. usuarios conectados: 69 el 15-10-2017 09:23:21