Comentarios en: Convertir discos duros a formato grub [Script] http://jotahacker.es/convertir-discos-duros-a-formato-grub-script/ Jaime Gil de Sagredo personal's blog talking about opensource, free software, gnu/linux, programming and more... Tue, 18 Oct 2011 01:26:04 +0000 hourly 1 http://wordpress.org/?v=3.3.1 Por: jotahacker http://jotahacker.es/convertir-discos-duros-a-formato-grub-script/#comment-195 jotahacker Fri, 01 May 2009 10:13:19 +0000 http://jotahacker.es/?p=178#comment-195 Hola @redy y gracias por la colaboración. La verdad que desconocía el uso de <code>printf "%d" "'$char"</code> y sin duda tiene mucha mejor pinta que mi bucle :D Un saludo! Hola @redy y gracias por la colaboración. La verdad que desconocía el uso de printf "%d" "'$char" y sin duda tiene mucha mejor pinta que mi bucle :D

Un saludo!

]]>
Por: redy http://jotahacker.es/convertir-discos-duros-a-formato-grub-script/#comment-191 redy Thu, 30 Apr 2009 07:53:17 +0000 http://jotahacker.es/?p=178#comment-191 Vaya, metí el código entre etiquetas <code> y pasó de mi totalmente... te lo dejo en http://redyarcade.files.wordpress.com/2009/04/disk2grub2.doc (Quítale la extensión .doc) Vaya, metí el código entre etiquetas <code> y pasó de mi totalmente…

te lo dejo en http://redyarcade.files.wordpress.com/2009/04/disk2grub2.doc

(Quítale la extensión .doc)

]]>
Por: redy http://jotahacker.es/convertir-discos-duros-a-formato-grub-script/#comment-190 redy Thu, 30 Apr 2009 07:38:09 +0000 http://jotahacker.es/?p=178#comment-190 Muy chulo, pero...si me permites un consejillo.... ¡Ese bucle duele a la vista colega! No me digas que no se te ocurre una forma mejor de pasar de una letra a un número sin contar por los dedos :) Te sugiero una llamada al builtin 'printf' de bash: <code>printf "%d" "'$char" </code> Nos devuelve el código en decimal de la letra contenida en la variable $char sabiendo que la 'a' tiene el código 97 solo hay que restar. <code> #! /bin/bash # # disk2grub convierte el nombre de los discos duros en sistemas Unix al formato grub. Ej.: hda1 --> hd0,0 # Copyright (C) 2009 Jaime Gil de Sagredo Luna # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # Comienza el contenido de script. function convert_to_grub() { echo "Introduce el disco duro que quiere convertir a grub. Ej.: hda1, hdb2, sdc3, ..." read no_grub_hdd while [ -z "${no_grub_hdd}" ]; do echo "Es necesario que introduzca el nombre de la particion!!" echo "Introduce el disco duro que quiere convertir a grub. Ej.: hda1, hdb2, sdc3, ..." read no_grub_hdd done # Comprueba que no se haya introducido una opcion mayor de 5 caracteres. #no_grub_hdd_chars=$(echo "${no_grub_hdd}" | wc -m) #if (("${no_grub_hdd_chars}" > "5")); then # echo "${no_grub_hdd} no es una opcion valida." # # Sale con error. # exit 1 #fi no_grub_hdd_exist=$(grep "${no_grub_hdd}" "/proc/partitions") if [ -z "${no_grub_hdd_exist}" ]; then echo "${no_grub_hdd} no existe en su sistema!!" #Si quieres que salga con error cuando no se encuentre el hdd, descomentas este comando ;) # exit 1 else echo "Ha seleccionado el siguiente disco duro:" echo "${no_grub_hdd_exist}" fi echo "Trasformando ${no_grub_hdd} a formato grub." # Quitando la parte "hd" del principio. old_no_grub_hdd=${no_grub_hdd} # Covierte todo en minusculas... no_grub_hdd=$(echo "${no_grub_hdd}" | awk '{print tolower ($0)}') no_grub_hdd=$(echo ${no_grub_hdd} | sed -e 's@hd@@g') # Añadido soporte discos SATA (sda1) no_grub_hdd=$(echo ${no_grub_hdd} | sed -e 's@sd@@g') # Separando la letra del numero no_grub_hdd_num=$(echo ${no_grub_hdd} | sed -e 's@[a-z A-Z]@@g') no_grub_hdd_alpha=$(echo ${no_grub_hdd} | sed -e 's@[0-9]@@g') # Una vez obtenido el numero y la letra por separado, pasamos a convertirla a formato grub, por ejemplo a --> 0 o 1 --> 1 # Covierte la letra a numero grub if [[ "$no_grub_hdd_alpha" "z" ]]; then echo "No se consiguio pasar ${old_no_grub_hdd} a formato GRUB. Es posible que no halla introducido un nombre de disco duro valido." exit 1 else grub_hdd_alpha=" $(( `printf "%d\n" "'$no_grub_hdd_alpha"` - 97 ))" fi # Convierte el numero a numero grub. if [ ! -z "${no_grub_hdd_num}" ]; then grub_hdd_num=$(expr "${no_grub_hdd_num}" - "1") fi # Recoge los datos en una variable grub_hdd="hd${grub_hdd_alpha}" if [ ! -z "${grub_hdd_num}" ]; then grub_hdd="${grub_hdd},${grub_hdd_num}" fi # Muestra el resultado!!! echo "Su disco ${old_no_grub_hdd} en formato grub es (${grub_hdd})" } # Hace el trabajo. Es bueno tener todo el codigo en una funcion para asi a la hora de integrarlo en otro script tan solo debemos añadir la funcion y ponerla donde nos plazca. convert_to_grub </code> ¡Ah! y yo jamás metería el read en la función, ni todos los echos con la literatura. Lo suyo es que la funcion reciba un parámetro, el nombre del disco y imprima solo otro parámetro el nombre convertido a grub. Toda la literatura ponla fuera, así la haces verdaderamente reusable. ;-) Recuerda que 'Cualquiera puede escribir código que una máquina pueda entender, pero lo realmente difícil es escribir código que puedan entender los humanos' (Martin Fowler) Muy chulo, pero…si me permites un consejillo….

¡Ese bucle duele a la vista colega! No me digas que no se te ocurre una forma mejor de pasar de una letra a un número sin contar por los dedos :)

Te sugiero una llamada al builtin ‘printf’ de bash:

printf "%d" "'$char"

Nos devuelve el código en decimal de la letra contenida en la variable $char sabiendo que la ‘a’ tiene el código 97 solo hay que restar.


#! /bin/bash
#
# disk2grub convierte el nombre de los discos duros en sistemas Unix al formato grub. Ej.: hda1 --> hd0,0
# Copyright (C) 2009 Jaime Gil de Sagredo Luna
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
#
# Comienza el contenido de script.
function convert_to_grub() {
echo "Introduce el disco duro que quiere convertir a grub. Ej.: hda1, hdb2, sdc3, ..."
read no_grub_hdd
while [ -z "${no_grub_hdd}" ]; do
echo "Es necesario que introduzca el nombre de la particion!!"
echo "Introduce el disco duro que quiere convertir a grub. Ej.: hda1, hdb2, sdc3, ..."
read no_grub_hdd
done
# Comprueba que no se haya introducido una opcion mayor de 5 caracteres.
#no_grub_hdd_chars=$(echo "${no_grub_hdd}" | wc -m)
#if (("${no_grub_hdd_chars}" > "5")); then
# echo "${no_grub_hdd} no es una opcion valida."
# # Sale con error.
# exit 1
#fi
no_grub_hdd_exist=$(grep "${no_grub_hdd}" "/proc/partitions")
if [ -z "${no_grub_hdd_exist}" ]; then
echo "${no_grub_hdd} no existe en su sistema!!"
#Si quieres que salga con error cuando no se encuentre el hdd, descomentas este comando ;)
# exit 1
else
echo "Ha seleccionado el siguiente disco duro:"
echo "${no_grub_hdd_exist}"
fi
echo "Trasformando ${no_grub_hdd} a formato grub."
# Quitando la parte "hd" del principio.
old_no_grub_hdd=${no_grub_hdd}
# Covierte todo en minusculas...
no_grub_hdd=$(echo "${no_grub_hdd}" | awk '{print tolower ($0)}')
no_grub_hdd=$(echo ${no_grub_hdd} | sed -e 's@hd@@g')
# Añadido soporte discos SATA (sda1)
no_grub_hdd=$(echo ${no_grub_hdd} | sed -e 's@sd@@g')
# Separando la letra del numero
no_grub_hdd_num=$(echo ${no_grub_hdd} | sed -e 's@[a-z A-Z]@@g')
no_grub_hdd_alpha=$(echo ${no_grub_hdd} | sed -e 's@[0-9]@@g')
# Una vez obtenido el numero y la letra por separado, pasamos a convertirla a formato grub, por ejemplo a --> 0 o 1 --> 1
# Covierte la letra a numero grub
if [[ "$no_grub_hdd_alpha" "z" ]]; then
echo "No se consiguio pasar ${old_no_grub_hdd} a formato GRUB. Es posible que no halla introducido un nombre de disco duro valido."
exit 1
else
grub_hdd_alpha=" $(( `printf "%d\n" "'$no_grub_hdd_alpha"` - 97 ))"
fi
# Convierte el numero a numero grub.
if [ ! -z "${no_grub_hdd_num}" ]; then
grub_hdd_num=$(expr "${no_grub_hdd_num}" - "1")
fi
# Recoge los datos en una variable
grub_hdd="hd${grub_hdd_alpha}"
if [ ! -z "${grub_hdd_num}" ]; then
grub_hdd="${grub_hdd},${grub_hdd_num}"
fi
# Muestra el resultado!!!
echo "Su disco ${old_no_grub_hdd} en formato grub es (${grub_hdd})"
}
# Hace el trabajo. Es bueno tener todo el codigo en una funcion para asi a la hora de integrarlo en otro script tan solo debemos añadir la funcion y ponerla donde nos plazca.
convert_to_grub

¡Ah! y yo jamás metería el read en la función, ni todos los echos con la literatura. Lo suyo es que la funcion reciba un parámetro, el nombre del disco y imprima solo otro parámetro el nombre convertido a grub. Toda la literatura ponla fuera, así la haces verdaderamente reusable. ;-)

Recuerda que ‘Cualquiera puede escribir código que una máquina pueda entender, pero lo realmente difícil es escribir código que puedan entender los humanos’ (Martin Fowler)

]]>
Por: jotahacker http://jotahacker.es/convertir-discos-duros-a-formato-grub-script/#comment-111 jotahacker Wed, 14 Jan 2009 22:07:27 +0000 http://jotahacker.es/?p=178#comment-111 @Carlos claro, ahora mismo me pongo con los discos SATA, no creo que haya que cambiar mucho ;) Y por supuesto que puedes publicarlo en el-simpicuitico :) Un saludo! @Carlos claro, ahora mismo me pongo con los discos SATA, no creo que haya que cambiar mucho ;)
Y por supuesto que puedes publicarlo en el-simpicuitico :)

Un saludo!

]]>