Aquí dejo un trozo de un script que me ha estado dando algunos problemas, el motivo era que necesitaba saber la longitud del mes, pero como estoy haciendo una operación matemática el 0 de los meses de 1 digito desaparece y es preciso volverlo a meter.
El script petaba porque wl wc -m contaba 3 carácteres en el echo “10”. El motivo es que esta expresión en realidad es echo “10n”, para sacar el n ponemos -n en el echo.
#/bin/bash MONTH=$(date +%m) YEAR=$(date +%Y) ((MONTH=${MONTH}-1)) echo $MONTH LONG_MES=`echo -n ${MONTH} |wc -m` echo $LONG_MES if [ $LONG_MES -ne 2 ]; then MONTH="0${MONTH}" fi echo $MONTH DATE=${YEAR}${MONTH} echo $DATE
Ya te vas haciendo mayorcita… podrias empezar a mirarte con cariño python :-/
me estoy mirando c/c++ + openframeworks si me desvirgo con esto ya caerá el python.
Blackhold, te presento a printf(1).
Dado que ya estamos en noviembre:
printf “%02un” $(($(date +%m)-2))
Que conste que no hablo con Ignacio hace meses…
-levanta un interprete de Python , ipython o python
-escribe “from datetime import date”
-ahora pon “print len(str(date.today().month))”
Y se feliz (x un momento) ya que puedes contar la longitud de 2 caracteres sin necesidad de wc (siempre te encuentras con hijos de puta que borran binarios y hacen que los scripts fallen y tu quedes como una cutre)
Despues de un pequeño suspiro y un pensamiento desencadena de “estoy queriendo aprender arquitectura para despues poner a aprender a jugar con Legos(tm)”, sigue con tus tareas habituales.
Lo de la hora ,es simplemente para que me vaya a dormir asustado , ya lo pillo :-/
ya fui “feliz” durante unas horas cuando me dijeron, instala django y ponlo en marcha, lo instalé, hasta aquí bien, pero luego al ponerlo en marcha, la persona que me había recomendado usar django se me fue de birras… traté de rascar un par de horas, pero la cosa ahí se quedó y también de fui de birras por gracia :D…
Tienes un cacao importante, C, C++ , Django , estas esquivando Python? Perl te ha traumado en otra vida?
Dejate de vueltas y pilla Python , que veras que le sacas jugo de sobra y es facil.
Django te vendra solito cuando tengas un par de horas libres y sepas algo de Python.
anda que plastas sois los desarrolladores… ahora que tengo claro lo que voy a hacer tsst… no me lies xD si voy a tirar por openframeworks es porque quiero hacer cosas con él.
Ya me pondré con lo demás cuando sea el momento ahora hay demasiados frentes abiertos!
Desarrolladores? Va ser que no ¬¬
http://www.google.es/#hl=es&source=hp&biw=1280&bih=616&q=site%3Ahttp%3A%2F%2Flists.badopi.org%2Fpipermail%2Fcomandob%2F+listas%40sabueso.org&aq=f&aqi=&aql=&oq=&gs_rfai=&fp=eb50ab1537c0719c
A mi lo que mas me ha llamado la atención es el uso de dos procesos (echo , wc) y un pipe cuando uno ([) es suficiente.
Ademas falta toda la logica para que month retenga un valor valido
A mi lo que mas me ha llamado la atención es el uso de dos procesos (echo , wc) y un pipe cuando uno ([) es suficiente.
Ademas falta toda la logica para que month retenga un valor valido
jluis como? [ ?
$MONTH vale 0..11
yo para formatearlo usaria una regex que tiene la ventaja de funcionar aunque el contenido sea este formateado
MONTH=`echo -n 0$MONTH |sed -e’s/.*(..)$/1/’ `
toma ya xD
aclaración ${MONTH} inicialmente te lo devuelve con 2 carácteres pero al hacer la operación matemática se come el 0 para esto tengo que comprobar la longitud de ${MONTH} porque luego esto lo uso como parte de nombre del script.
toma ya xD
aclaración ${MONTH} inicialmente te lo devuelve con 2 carácteres pero al hacer la operación matemática se come el 0 para esto tengo que comprobar la longitud de ${MONTH} porque luego esto lo uso como parte de nombre del script.
Os mola rascaros la oreja izquierda con la mano derecha, anda que no me estoy divirtiendo con este post…
——————————————————
#!/usr/bin/env python
from datetime import date
#esto es para que no tengas ni que leer si quieres obtener el mes actual
#print len(str(date.today().month))
#mes=str(date.today().month)
mes=”2″
if len(mes) == 2:
print “salen 2 numericos,asi que nada”
else:
print “salen 1 , por ende nos le metemos un 0 delante”
print “0”+mes
——————————————————
Si se te da por tener un lustro de lucidez y pruebas python , recuerda que es un lenguaje indentado, asi que si hace copi-enganxao del texto y no le pones los tabs correspondientes no te funcionara.
Lo que no me habia dado cuenta es que hay una solucion mas limpia en bash
MONTH=0$MONTH;MONTH=${MONTH: -2}
Yo no tengo nada contra python (prefiero perl) pero si usa bash puede que sea porque no pueda usar otro sistema de guionado
date -d “-1month” “+%Y%m”
Bueno, aquí se han discutido cantidad de cosas:
Yo hablaba sobre el tema de dar formato a variables, caso para el que lo mejor es no crear las cadenas a mano, sino usar funciones de formato propias del lenguaje (printf en bash, “%s” % variable en python, etc…)
Ramiro recomendaba python como lenguaje bastante universal (suerte si tienes que tocar AIX… aunque suerte también si estás acostumbrado a bash) y medianamente lógico. Y que para aprender a programar es mejor no empezar la casa por el tejado y si quieres pegarte con C, C++ adelante. Recuerdos a malloc de mi parte y a Segmentation Fault.
jluis no se de que hablaba exactamente, me ha perdido bastante.
Y xD… pues lo suscribo al 1000%. Con la salvedad de que si por cualquier cosa tienes que hacer una operación distinta, esa aproximación puede no ser práctica (por ejemplo, efectuar acciones cada dos o tres meses mediante una operación módulo). En cuyo caso printf FTW.
Y con esto y un bizcocho, cada día estoy más chocho.
si si, si lo de plastas ya tenía razón una servidora ;)
ha estado muy bien, estos artículos con tantos comentarios son los que molan porque en gnu/linux hay mil formas para hacer lo mismo (no cómo en windows que como mucho hay 4 xD).
gracias a todos :)
Ignacio, te mando recuerdos de malloc, realloc y free. Me han dicho q te echan de menos y yo, me los encuentro a diario. Por cierto, si en bash quieres hacer una operación matemática (cómo módulo), basta con $(( 23 % 7 )), que te da 2.
Blackhold, pasa de todos y aprende C/C++. Es la base del resto de lenguajes (todos o casi todos). Si aprendes esto, el resto de lenguajes están mamaos: te aparecerán preguntas como ¿y como reservo memoria en PHP (por poner un ejemplo)? ¿y como la libero? Y, al final, programarás en PHP mejor que quien empezó directamente con este.
Solo para el regocijo de los presentes y para dar la forma 1001:
#include
#include
void main void()
{
time_t
ahora = time(NULL);
struct tm
Ahora = *localtime(&ahora);
/* El mes ya va de 0 a 12 */
printf(“%04d%02dn”, Ahora.tm_year, Ahora.tm_month);
}
Fe de erratas:
* Los meses van de 0 a 11: evidentemente, no existe el 13º mes.
* Ahora.tm_month = Ahora.tm_mon