Estimados foristas, soy un usuario promedio de Ubuntu. No me dedico a la informática como medio de vida, es sólo un hoby.
Se algunos conceptos básicos de programación y me divierto aprendiendo.
Aclarado este punto, quiero hacerles la siguiente pregunta:
Estoy haciendo un pequeño script en bash para que forme los directorios y archivos iniciales requeridos en cualquier proyecto que se inicie en XUL. El tema es que me da un error que no se cómo resolver.
El código del script es el siguiente:
#!/bin/bash
# XUL Helper 0.1.3 (GPL v3)
# ./xul_helper $NOMBRE_DIRECTORIO $NOMBRE_APLICACION
if [ $1 -z ]
then
echo Falta el parametro Nombre de Directorio
echo Pruebe con $ ./xul_helper DIRECTORIO NOMBRE_APLICACION
exit 0
else
if [ $2 -z ]
then
echo Falta el parametro Nombre de la aplicacion
echo Pruebe con $ ./xul_helper DIRECTORIO NOMBRE_APLICACION
exit 0
else
mkdir $1
echo Directorio $1 creado
cd $1
# desde acá es la cración sólo de los archivos
echo Directorio Chrome creado
mkdir chrome
cd chrome
mkdir content
echo Direcotrio Content creado
cd content
# echo Creando $2.xul
echo -e "<?xml version="1.0"?>" >> $2.xul &&
echo -e "<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>" >> $2.xul &&
echo -e "> $2.xul &&
echo -e "xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">" >> $2.xul &&
echo -e "" >> $2.xul &&
echo -e "" >> $2.xul
echo Archivo $2.xul creado
cd ..
echo -e "content hello file:content/" >> chrome.manifest
echo Archivo chrome.manifest creado
cd ..
echo Archivo application.ini creado
echo -e "[App]" >> application.ini &&
echo -e "Version=1.0" >> application.ini &&
echo -e "Vendor=$USER" >> application.ini &&
echo -e "Name=$2" >> application.ini &&
echo -e "BuildID=number" >> application.ini &&
echo -e "ID=Creado con XUL Helper" >> application.ini &&
echo -e "[Gecko]" >> application.ini &&
echo -e "MinVersion=1.8" >> application.ini
echo Directorio defaults creado
mkdir defaults
cd defaults
mkdir preferences
echo Directorio preferences creado
cd preferences
echo -e "pref("toolkit.defaultChromeURI", "chrome://$1/content/hello.xul");" >> pref.js
echo Archivo pref.js creado
echo PROCESO FINALIZADO
echo XUL Helper 0.1.3
fi
fi
#Fin de creación de archivos
#chrome
# | content
# | hello.xul
# | chrome.manifest
#defaults
# | preferences
# | pref.js
#application.ini
Como decía, es algo con lo que me entretengo pero se que no es útil.
Ahora bien, cuando lo ejecuto, si bien cumple con su función, es decir, si no tiene alguno de los dos parámetros el programa los pide y se cierra, o de tenerlos, crea los directorios y archivos.
Pero siempre que falte el segundo parámetro, el intérprete dice:
línea 5: [: app: se esperaba un operador unario
Alguien me puede explicar cómo resolver esto? Me llama la tención que el programa cumpla con lo programado, pero que a la vez manifieste esto.
Publico el código también para que ustedes me recomienden cómo mejorarlo y me acerquen sus ideas, de ser posible. Todo en pos de aprender.
Muchas gracias.
Saludos,

La sintaxis correcta para
La sintaxis correcta para verificar si una cadena está vacía puede ser:
Respecto al script en si, encerrar condicionales dentro de condicionales empeora la legibilidad. Siempre que sea posible, es mejor evitarlo. En tu caso lo podrías hacer, por ejemplo con:
#!/bin/bash # XUL Helper 0.1.3 (GPL v3) # ./xul_helper $NOMBRE_DIRECTORIO $NOMBRE_APLICACION if [ -z $1 ] ; then echo "Falta el parametro Nombre de Directorio" echo "Pruebe con $ ./xul_helper DIRECTORIO NOMBRE_APLICACION" exit 0 fi if [ -z $2 ] ; then echo Falta el parametro Nombre de la aplicacion echo Pruebe con $ ./xul_helper DIRECTORIO NOMBRE_APLICACION exit 0 fi Resto del scriptTambién podrías agrupar las dos salidas
#!/bin/bash # XUL Helper 0.1.3 (GPL v3) # ./xul_helper $NOMBRE_DIRECTORIO $NOMBRE_APLICACION if [[ -z $1 ]] || [[ -z $2 ]] ; then echo "Sintaxis incorrecta" echo "Recuerdo que la sintaxis debe ser ./xul_helper DIRECTORIO NOMBRE_APLICACION" exit 0 fi Resto del scriptmake install . es
Noticias, apuntes y pequeños tutoriales sobre GNU/Linux
Gracias!
Muchas gracias por tu aporte.
Ahora mismo lo voy a probar.
Por otro lado, me he dado cuenta de que BASH no escribe las comillas en el string.
No me había dado cuenta porque sólo me había limitado a probar si el script hacía los archivos, pero no a probar los mismo en XUL.
Cómo puedo hacer para escribir las comillas (") en el string? Estimo que con alguna constante que las contenga.
Gracias de antemano!
Saludos,
Tan solo debes de proteger
Tan solo debes de proteger las comillas con el carácter \. Ejemplo:
make install . es
Noticias, apuntes y pequeños tutoriales sobre GNU/Linux
GENIAL!
Muchas gracias por tu ayuda!
Ahora mi siguiente paso será, en lugar de usar parámetros en el comando, ingresar valores por medio de inputs, trabajaré en ello.
Dejo el código final:
#!/bin/bash # XUL Helper 0.1.3 (GPL v3) # ./xul_helper $NOMBRE_DIRECTORIO $NOMBRE_APLICACION if [[ -z $1 ]] || [[ -z $2 ]] ; then echo "Sintaxis incorrecta" echo "Recuerde que la sintaxis debe debe ser $./xul_helper DIRECTORIO NOMBRE_APLICACION" exit 0 fi mkdir $1 echo Directorio $1 creado cd $1 # desde acá es la cración sólo de los archivos echo Directorio Chrome creado mkdir chrome cd chrome mkdir content echo Direcotrio Content creado cd content # echo Creando $2.xul echo -e "<?xml version=\"1.0\"?>" >> $2.xul && echo -e "<?xml-stylesheet href=\"chrome://global/skin/\" type=\"text/css\"?>" >> $2.xul && echo -e "> $2.xul && echo -e "xmlns=\"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul\">" >> $2.xul && echo -e "" >> $2.xul && echo -e "" >> $2.xul echo Archivo $2.xul creado cd .. echo -e "content hello file:content/" >> chrome.manifest echo Archivo chrome.manifest creado cd .. echo Archivo application.ini creado echo -e "[App]" >> application.ini && echo -e "Version=1.0" >> application.ini && echo -e "Vendor=$USER" >> application.ini && echo -e "Name=$2" >> application.ini && echo -e "BuildID=number" >> application.ini && echo -e "ID=Creado con XUL Helper" >> application.ini && echo -e "[Gecko]" >> application.ini && echo -e "MinVersion=1.8" >> application.ini echo Directorio defaults creado mkdir defaults cd defaults mkdir preferences echo Directorio preferences creado cd preferences echo -e "pref(\"toolkit.defaultChromeURI\", \"chrome://$1/content/hello.xul\");" >> pref.js echo Archivo pref.js creado echo PROCESO FINALIZADO echo XUL Helper 0.1.3 #fin de creación de archivos #/chrome # /content # hello.xul # chrome.manifest #/defaults # /preferences # pref.js #application.iniMuchas gracias!
GUI
Por cierto, he visto más de una vez, que muchos scripts que comienzan siendo un comando para la terminal, finalmente adoptan GUIs.
Cómo se logra tal cosa?
Muchas gracias!
Haciendo uso de GTK (GNOME),
Haciendo uso de GTK (GNOME), QT (KDE) o cualquier otra biblioteca para generar entornos gráficos. Si quieres algo muy simple, pero que puedas invocar fácilmente desde consola, puedes usar zenity:
make install . es
Noticias, apuntes y pequeños tutoriales sobre GNU/Linux