Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: EMPICAL en 20 Mayo 2003, 20:34 pm



Título: shell script
Publicado por: EMPICAL en 20 Mayo 2003, 20:34 pm
¿Que es un shell script?

Son basicamente programas escritos en lenguaje de shell muy parecidos a los programas de procesamiento por lotes de windows. Es natural que linux nos ofrezca esta capacidad gracias su sistema de entrada/salida que lo hace tan potente.

¿Para que nos sirve un shell script?

Para automatizar tareas que hacemos habitualmente ahorrando un tiempo considerable al usuario.

Ejemplo:

Para que comprendamos el funcionamiento y que es un shell script la mejor manera es que veamos un ejemplo de un sencillo script que por ejemplo mandaremos un mail con el contenido de un archivo de log a un usuario registrado en nuestro sistema.

Lo primero que debemos hacer es determinar que tipo de shell usaremos para el script y donde se encuentra en el sistema.

El nombre del destinatario y su mail es algo que tambien deveremos averiguar.

Pensaremos que esto sera como leer noticias y para ellos usaremos el comando inn (internetnews)

Antes de seguir hay que explicar que es el concepto de canalizacion en linux. En linux no solo se puede redireccionar la entrada STDIN y la salida STDOUT de unos archivos a otros, si no que, como linux concibe esta entrada y salida como flujos de datos, tambien existe el concepto de canalizacion de flujos directamente de un programa a otro. Gracias a las canalizaciones se puede usar directamente la salida STDOUT de un programa como la entrada STIN de otro.

Para introducir una canalizacion en linux hay que introduccir en la linea de comandos la barra vertical (|) entre los programas.

Usaremos entre otros el comando tail que sirve para mostrar la parte final del documento. Como se trata de un archivo de logs solo nos interesara enviarle los ultimos registros del archivo puesto que la mayor parte de los registros aumentan por el final.

Usaremos otros comando que no voy a explicar ya que esto es solo un ejemplo para que se vea el funcionamiento de un shell script.
Código
  1. #!/bin/bash
  2. echo Hola a todos!! | mail destinatario@ensistema.mail
  3. grep "destinatario" /usr/local/httpd/logs/access_log | tail -l100 | lpr xterm -e trn &
  4. exit
  5.  
Guardaremos esto en un archivo llamado mail_log y le daremos permisos de ejecucion chmod 755 mail_log.

Ya solo nos quedara ejecutarlo ./mail_log.

Pues hasta aqui creo que queda claro que es un script, para que se usa y como hacer uno.

Cualquiera que desee añadir informacion a este tema puede hacerlo libremente intetare postear mas cosas sobre shell script ya que me parece un tema interesante y algo que cualquier usuario de linux deberia dominar en mayor o menor medida.

Aver si la gente se anima y creamos un buen tema sobre shell script para empezar aprender desde 0.


Título: Re:shell script
Publicado por: ..sR. aDiKtO.. en 21 Mayo 2003, 01:40 am
Ya k E*M*P*I*C*A*L ha empezado este tema ( k me parece MUY interesante), voy a continuar yo, primero con como se construye un shell script:
  • Se crea un archivo de texto y se introduce en la primera linea el interprete k se va a utilizar para ejecutarlo, en el caso anterior:
Código:
#!/bin/bash
  • En las lineas siguientes se ponen las intrucciones, una por linea:
Código
  1. echo Hola a todos!! | mail destinatario@ensistema.mail
  2. grep "destinatario" /usr/local/httpd/logs/access_log | tail -l100 | lpr xterm -e trn &
  3. exit
o en la misma linea separadas por un punto y coma ( ; ), excepto cuando es background o nohup.
Código
  1. echo Hola a todos!! | mail destinatario@ensistema.mail; grep "destinatario" /usr/local/httpd/logs/access_log | tail -l100 | lpr xterm -e trn &
  2. exit
  • Luego se tiene k dar permisos de ejecucion y ejecutarlo como ha dicho E*M*P*I*C*A*L. Tambien se puede ejecutar con un interprete de comandos distito al predefinido, por ejemplo con:
Código
  1. sh mail_log
  2. ó
  3. ksh mail_log
  4. ó
  5. ...
Con estas ordenes el script seria ejecutado por sh ó ksh ó ... cuando en verdad tenia k ser ejecutado por bash (primera linea del script)[/list]

Continuemos con los redireccionamientos:
  • La tuberia ( pipe, o raya vertical '|' ), es un programa k redirige la salida de un programa a la entrada de otro, veamos un ejemplo:
Código:
cat archivo.txt | grep adikto
Esta orden hace:
  • cat archivo --> muestra el contenido de un archivo de texto.
  • grep adikto --> muestra por pantalla las lineas k tengan el patron, en este caso 'adikto'.
  • cat archivo.txt | grep adikto --> muestra por pantalla las lineas del archivo archivo.txt k tengan la palabra adikto.
Como se ha podido comprobar, la salida de 'cat archivo.txt' se ha introducido como entrada a 'grep adikto' a traves de '|' y el resultado se ha mostrado por la salida estandar ( la pantalla).
  • Redireccion de salida ( '>' ), es redirigir la salida estandar a otro sitio, veamos las clases k hay:
  • '>' --> redireccion truncada, redirige la salida a otro sitio. Un ejemplo de esto seria:
Código:
ls -l / > archivo.txt
Con lo k el contenido del archivo.txt contendria la salida del 'ls -l /'
  • '>>' --> redireccion añadida, añade la salida a otro sitio. Por ejemplo:
Código:
ls -l /boot >> archivo.txt
El contenido del archivo archivo.txt contiene la salida del 'ls -l /' del ejemplo anterior mas el 'ls -l /boot' de este ejemplo.
Si ahora hicieramos lo mismo k en el ejemplo anterior:
Código:
ls -l / > archivo.txt
El archivo archivo.txt SOLO contendria el 'ls -l /'.
  • '2>' --> redireccion de errores, redirige la salida del programa y los errores a otro sitio. Por ejemplo:
Código:
cdrecord -adikto 2> archivo.txt
La opcion '-adikto' no existe, y el error k tendria k salir va a parar al archivo archivo.txt.
  • '&>' --> redireccionamiento total, redirige TODO a otro sitio. Por ejemplo:
Código:
cdrecord --help &> archivo.txt
    La ayuda de cdrecord ( --help ) va a parar a archivo.txt.
  • Redireccionamiento de entrada ( '<' ), la entrada de un programa es un archivo. Por ejemplo:
Código:
grep adikto < archivo.txt
    La orden 'grep aditko' toma como entrada, el contenido de 'archivo.txt', (vease la similitud con las tuberias). Muestra las lineas k contiene archivo.txt con la palabra 'adikto'.

Ahora le toca a otro continuar......xDDD


Título: Re:shell script
Publicado por: Rojodos en 22 Mayo 2003, 05:06 am
----------   Uso de variables en shell-script:

Asignación: Nombre=valor
Acceso a su contenido: $Nombre

Podemos utilizar el comando read para leer variables desde teclado y el comando echo para visualizar su contenido (este comando también puede utilizarse para mostrar mensajes por pantalla).

Ejemplo:

Código
  1. read nombre apellido1 apellido2
  2. echo Los valores leidos por teclado son: $nombre $apellido1 $apellido2

----------   Variables especiales:

$0: Nombre del Shell-Script que se está ejecutando.
$n: Parámetro o argumento pasado al Shell-Script en la posición n, n=1,2,...
$#: Número de argumentos.
$*: Lista de todos los argumentos.
$$: PID del proceso que se está ejecutando.
$!: PID del último proceso ejecutado.
$?: Salida del último proceso ejecutado



Le toca a otro :D


Título: Re:shell script
Publicado por: ..sR. aDiKtO.. en 22 Mayo 2003, 05:47 am
Ampliando un poco lo de las varibles, una varible puede tener como valor el resultado de un programa, por ejemplo:
Código:
variable=$(ls --help)
El unico problema es k lo guarda sin retorno de carro. Para ver el resultado, ya sabeis:
Código
  1. echo $variable
Una cosa curiosa es k los bash scripts tienen un error con la orden 'echo', para solucionarlo simplemente hay k utilizar la opcion '-e' y poner entre comillas los datos a mostrar:
Código
  1. echo -e "Asi ya no hay error"

Ademas se puede utilizar la barra invertida al final de una linea para indicar al echo k la frase continua, aparte el echo tiene opciones adicionales como salto de linea, .... (vease 'man echo' y 'info echo'), por ejemplo:
Código
  1. echo -e " toda \
  2. esta \
  3. frase \
  4. se \
  5. escribe \
  6. en la \
  7. misma \
  8. linea."
Esto puede ser util para organizar el bash script, al final os pondre un ejemplo k kedara todo mas claro ;)
                      
En los bash scripts se pueden utilizar colores en las letras y de fondo, simplemente con:
Código:
echo -e "\033[1;37m BLANCO \033[0m"
Con lo k mostrara la palabra BLANCO en color blanco ( k original k soy xDD). Veamos ahora k colores hay:
Código:
Negro --> 0;30m     
Gris oscuro --> 1;30m
Rojo --> 0;31m    
Rojo claro --> 1;31m
Verde --> 0;32m    
Verde claro --> 1;32m
Marrón --> 0;33m    
Amarillo --> 1;33m
Azul --> 0;34m    
Azul claro --> 1;34m
Púrpura --> 0;35m    
Púrpura claro --> 1;35m
Cyan --> 0;36m    
Cyan claro --> 1;36m
Gris claro --> 0;37m    
blanco --> 1;37m
Como habreis supuesto para k las palabras salgan de un color hay k escribir:
Código
  1. \033[
Y acontinuacion el codigo del color k os he puesto un par de lineas mas arriba, y para volver al color por defecto:
Código
  1. \033[0m

Tambien se puede cambiar el color de fondo, de la misma manera k antes pero con esta codificacion:
Código
  1. Negro --> 40m  
  2. Rojo --> 41m  
  3. Verde --> 42m  
  4. Marrón --> 43m  
  5. Azul --> 44m  
  6. Púrpura --> 45m    
  7. Cyan --> 46m
  8. Gris claro --> 47m

Un shell script k os puede ser util para recordar esto es:
Código
  1. #!/bin/bash
  2.  echo "  Sobre gris claro:        Sobre negro:"
  3.  echo -e "\033[47m\033[1;37m  Blanco        \033[0m\
  4.  1;37m \
  5.  \033[40m\033[1;37m  Blanco        \033[0m"
  6.  echo -e "\033[47m\033[37m  Gris Claro    \033[0m\
  7.     37m \
  8.  \033[40m\033[37m  Gris Claro    \033[0m"
  9.  echo -e "\033[47m\033[1;30m  Gris          \033[0m\
  10.   1;30m \
  11.  \033[40m\033[1;30m  Gris          \033[0m"
  12.  echo -e "\033[47m\033[30m  Negro         \033[0m\
  13.     30m \
  14.  \033[40m\033[30m  Negro         \033[0m"
  15.  echo -e "\033[47m\033[31m  Rojo          \033[0m\
  16.     31m \
  17.  \033[40m\033[31m  Rojo          \033[0m"
  18.  echo -e "\033[47m\033[1;31m  Rojo Claro    \033[0m\
  19.   1;31m \
  20.  \033[40m\033[1;31m  Rojo Claro    \033[0m"
  21.  echo -e "\033[47m\033[32m  Verde         \033[0m\
  22.     32m \
  23.  \033[40m\033[32m  Verde         \033[0m"
  24.  echo -e "\033[47m\033[1;32m  Verde Claro   \033[0m\
  25.   1;32m \
  26.  \033[40m\033[1;32m  Verde Claro   \033[0m"
  27.  echo -e "\033[47m\033[33m  Marrón        \033[0m\
  28.     33m \
  29.  \033[40m\033[33m  Marrón        \033[0m"
  30.  echo -e "\033[47m\033[1;33m  Amarillo      \033[0m\
  31.   1;33m \
  32.  \033[40m\033[1;33m  Amarillo      \033[0m"
  33.  echo -e "\033[47m\033[34m  Azul          \033[0m\
  34.     34m \
  35.  \033[40m\033[34m  Azul          \033[0m"
  36.  echo -e "\033[47m\033[1;34m  Azul Claro    \033[0m\
  37.   1;34m \
  38.  \033[40m\033[1;34m  Azul Claro    \033[0m"
  39.  echo -e "\033[47m\033[35m  Púrpura       \033[0m\
  40.     35m \
  41.  \033[40m\033[35m  Púrpura       \033[0m"
  42.  echo -e "\033[47m\033[1;35m  Rosa          \033[0m\
  43.   1;35m \
  44.  \033[40m\033[1;35m  Rosa          \033[0m"
  45.  echo -e "\033[47m\033[36m  Cyan          \033[0m\
  46.     36m \
  47.  \033[40m\033[36m  Cyan          \033[0m"
  48.  echo -e "\033[47m\033[1;36m  Cyan Claro    \033[0m\
  49.   1;36m \
  50.  \033[40m\033[1;36m  Cyan Claro    \033[0m"

 
Las variables son creadas y destruidas en el mismo script, si se kieren conservar o exportar a otra shell o script, se hace con:
Código:
export variable
A partir de ese momento la varible 'variable' k era local, pasa a ser global, y se puede utilizar en otras shells.


Título: Re:shell script
Publicado por: EMPICAL en 22 Mayo 2003, 21:14 pm
Ejecuciones condicionales while

Para utilizar las instrucciones condicionales es necesario crear una condicion que la instruccion pueda comprobar.

While

El comando while realiza acciones mientras se cumpla una condicion determinada.

Para entender mejor como funciona esta condicion vamos a poner un ejemplo:

Queremos mandar mails cada cierto tiempo a una serie de personas y se seguiran enviando mientras no recibamos contestacion. Una vez recibida la contestacion los mails dejaran de enviarse.
Código:
>set saludo=('/bin/mail | grep -cv No')
>wihle ($saludo==0)
?echo "Hola soy EMPICAL" | mail destinatario@caulquiera.mail
?echo "Hola soy EMPICAL" | mail destinatario2@caulquiera.mail
?sleep 60
?set saludo=('/bin/mail | grep -cv No')
?end
Hacemos uso del comando grep para contar las lineas (opcion -c) que no conitienen la palabra No y asigna el resultado a la variable saludo. Si se canaliza la salida de /bin/mail hacia grep y se escriben los cambios entre comillas, la shell ejecutara los cambios y devolvera la salida correspondiente, que es lo que se asigna a la variable.

Si fueramos malintencionados y variaramos algunas cosillas de este script podriamos llenar los buzones de correo de los destinatarios en poco tiempo, por que mientras la variable $saludo siga siendo igual a 0 el script seguira enviando mensajes cada 60 segundos a los destinatarios. Piensen que pasaria si modificamos sleep y le damos el valor 1, apenas daria tiempo a los destinatarios a contestar y tendrian su correo saturado y mientras no se reciba ningun mensaje en /bin/mail seguira mandando mensajes. Ya que hasta que no reciba un mail no habra una linea que no contenga No en mail.

Mientras se cumpla la condicion while ($saludo==0) mail seguira enviando mensajes a los destinatarios.


Título: Re:shell script
Publicado por: cokeing en 17 Noviembre 2003, 04:37 am
(X)Dialogs

Xdialog y dialog son dos utilidades clásicas que permiten mejorar tus scripts de shell con una interfaz de usuario gráfica.

INGRESAR (X)DIALOG...
con dialog y Xdialog puedes diseñar una aplicación gráfica con sólo escribir un breve shell script. Dialog es un programa basado puramente en terminal Xdialog es un programa X11.
Aquí encontrarás un ejemplo:
Puedes escribir (o bien copiar/pegar) lo siguiente en un shell (xterm, konsole,....):

Código
  1. bash
  2. Xdialog --yesno "Do you want to learn more about Xdialog?" 0 0;\
  3. case $? in
  4. 0)
  5. echo "Result: Yes chosen.";;
  6. 1)
  7. echo "Result: No chosen.";;
  8. 255)
  9. echo "ESC pressed.";;
  10. esac
  11.  

Si utilizas dialog en lugar de Xdialog (borra la X en la segunda línea en el script que se mostró anteriormente) entonces obtendrás una aplicación que se basa en expresiones extrañas que se ejecuta sin el xterm y no abre una ventana separada. En algunos casos esto es más apropiado para un shell script ya que se ejecuta simplemente sin la ventana terminal. Esto es importante si quieres ejecutarlo en forma remota con diferentes hosts entre tu ordenador y el host remoto donde el IP routing no se encuentra disponible. En este caso dialog funcionará pero no podrás iniciar una aplicación X11 del tipo de Xdialog.


Lo que antecede es una aplicación de dialog/Xdialog que no tendrá realmente uso pero que muestra que fácil es programar un diálogo gráfico sencillo. Hay más cuadros de diálogo interesantes tales como calendario, menúes, administrador de archivos, barra progess, cuadro de texto, casilla de mensajes, cuadro de diálogo de contraseña, ... Si ejecutas:

Código:
dialog --help
o
Xdialog --help

verás un listado de los cuadros de diálogo disponibles. Xdialog ofrece algunos cuadros de diálogo más que dialog.  


COMO FUNCIONA
Los cuadros de diálogo se configuran en la línea de comandos.
Código:
dialog --yesno "text string" <height> <width>

 Después de escribir dialog o Xdialog debes indicar el nombre del cuadro de diálogo que deseas, seguido de sus parámetros específicos.

El cuadro de diálogo yesno implica 3 parámetros. La altura <height> y el ancho <width> pueden establecerse en cero en cuyo caso la geometría del cuadro será ajustada automáticamente al tamaño del texto. El resultado se mostrará como estado de salida en la pantalla en la variable "$?". Si hay algo más que deba mostrarse como, por ejemplo, los nombres de las opciones seleccionadas, esto aparecerá como un error tipo (o standard). El error tipo (o standard) generalmente se muestra en la pantalla pero puede ser redireccionado con ">2".

Una solución muy simple pero eficaz.  

-----------------------------------------------------------------------------
Venga. que lo siga otro ;-)


Título: Re:shell script
Publicado por: 2.6.0-r en 11 Enero 2004, 06:49 am
Hace tiempo que empece con este script pero lo tengo aparcado y apenas ya me pongo a hacer script de bash. Si alguien quiere mejorarlo es libre de hacerlo.
Código
  1. #!/bin/bash
  2. #bash script para la administracion de bases de datos mysql
  3. #by ^Galactus^, estelaplateada@softhome.net
  4. echo ".:EASYMySQL:. script para la administración de bases de datos MySQL"
  5.  
  6. #Comrpobando la existencia de gdialog en el sistema
  7. if [ ! -f wihch dialog ]; then
  8. echo "No se ha encontrado gdialog, necesitas gnome-utils"
  9. exit 1
  10. fi
  11.  
  12.        echo "..-:IDENTIFICANDOSE:-.."
  13.        echo Nombre de usuario:
  14.        read NAME
  15.        echo Nombre del host:
  16.        read HOST
  17.        echo Password
  18.        read PASS
  19.  
  20. #Función para crear bases de datos en mysql.
  21. function create {
  22.        echo "..-:CREAR UNA BASE DE DATOS NUEVA:-.."
  23.        echo Nombre de la base de datos:
  24.        read new_db
  25.        touch newbase.sql
  26.        date > easylog.sql
  27.        echo "CREATE DATABASE $new_db;" >> newbase.sql
  28.        echo "SHOW DATABASES;" >> newbase.sql
  29.        echo "quit" >> newbase.sql
  30.        cat newbase.sql >> easylog.sql
  31.        dialog --title "Crear Una Base De Datos Nueva" --yesno "¿Desea crear la nueva db?" 200 100;
  32.        if [ $? -eq 0 ]; then
  33.        mysql -t -h $HOST  -u $NAME -p $PASS < newbase.sql
  34.        rm newbase.sql
  35.        else
  36.        create
  37.        rm newbase.sql
  38.        fi
  39.  
  40. }
  41. #Función para borrar bases de datos en mysql
  42. function drop {
  43.        echo "..-:BORRAR BASE DE DATOS:-.."
  44.        echo "SHOW DATABASES;" > delbase.sql
  45.        mysql -t -h $HOST -u $NAME -p $PASS < delbase.sql
  46.        echo "Escriba el nombre de la base de datos que desea borrar:"
  47.        read del_db
  48.        echo "Esta seguro de querer borrar esta db '$del_db' [si/no]"
  49.        read respuesta
  50.        if [ $respuesta = si ]; then
  51.        echo "DROP DATABASE $del_db;" > delbase.sql
  52.        echo "SHOW DATABASES;" >> delbase.sql
  53.        mysql -t -h $HOST -u $NAME -p $PASS < delbase.sql
  54.        cat delbase.sql >> easylog.sql
  55.        rm delbase.sql
  56.        elif [ $respuesta = no ]; then
  57.        drop
  58.        else
  59.        exit
  60.        fi
  61.  
  62. }
  63. #Función para crear tablas en db de mysql
  64. function table {
  65.        echo "..-:CREAR NUEVA TABLA EN DB:-.."
  66.        echo "SHOW DATABASES;" > newtable.sql
  67.        mysql -t -h $HOST -u $NAME < newtable.sql
  68.        echo "Escriba el nombre de la base de datos en la que desea crear una tabla:"
  69.        read db_use
  70.        echo "USE $db_use;" > newtable.sql
  71.        mysql -t -h $HOST -u $NAME < newtable.sql
  72.        echo "Cambiando a.. '$db_use'"
  73.        echo "Escriba el nombre de la tabla que desea crear en la db '$db_use':"        read db_table
  74.        echo "CREATE TABLE $db_table;" > newtable.sql
  75.        mysql -t -h $HOST -u $NAME < newtable.sql
  76.        echo "Se creo la tabla '$db_table' en la db '$db_use'."
  77.        date > easylog.sql
  78.        cat newtable.sql >> easylog.sql
  79.        rm newtable.sql
  80.        }
  81.  
  82. #menú de opciones
  83. opcion="Crear_db Borrar_db Crear_Tabla Salir"
  84. select opt in $opcion; do
  85.        if [ "$opt" = "Crear_db" ]; then
  86.        touch easylog.sql
  87.        create
  88.        elif [ "$opt" = "Borrar_db" ]; then
  89.        touch delbase.sql
  90.        drop
  91.        elif [ "$opt" = "Crear_Tabla" ]; then
  92.        touch newtable.sql
  93.        table
  94.        elif [ "$opt" = "Salir" ]; then
  95.        echo GOOD BYE
  96.        exit
  97.        else
  98.        echo seleccione una opción correcta
  99.        fi
  100.  

Tengo algunas funciones mas para mysql echas en bash, si me da la vena las pondre por aqui.


Título: Re:shell script
Publicado por: 2.6.0-r en 11 Enero 2004, 06:58 am
un lapsus, no me habia dado cuenta que puse las mismas funciones que el script anterior.

Os pongo este, que es un menu grafico que empece a hacer para mi script de mysql. Como el anterior tampoco esta terminado.

Código
  1. #!/bin/bash
  2. #bash script para la administracion de bases de datos mysql
  3. echo ".:EASYMySQL:. script para la administración de bases de datos MySQL"
  4. #source llama al archivo que contiene las funciones
  5. source functions
  6.  
  7. dialog --backtitle "EasyMySQL" --title "Login" --clear --ok-label "Aceptar"\
  8.       --inputmenu "Para poder usar EasyMySQL debe ingresar los datos de usuario y conexion" 20 50 10 \
  9. "Nombre de usuario:"    "$user" \
  10. "Nombre del host:"      "$host" \
  11. "Password:"             "$pass" \
  12.  
  13. #menú de opciones
  14. echo "[1] Crear Base De Datos"
  15. echo "[2] Borrar Base De Datos"
  16. echo "[3] Crear Tabla"
  17. echo "[4] Salir"
  18. echo
  19. read -p "Seleccione una opcion: " OPCION
  20. case $OPCION in
  21. 1) create;;
  22. 2) drop;;
  23. 3) table;;
  24. 4) exit;;
  25. esac
  26.  


Título: Re:shell script
Publicado por: ..sR. aDiKtO.. en 20 Enero 2004, 09:46 am
Yo tambien quiero poner un pequeño script que hice hace un par de dias:
Código
  1. #!/bin/sh
  2. #
  3. ############################################################################
  4. # "adk.sh v0.1" hecho por el ..sR. aDiKtO.. <adikto@elhacker.net>
  5. #
  6. # Este script borra todas las lineas de todos los archivos
  7. # que esten en /var que contengan tu ip, conservando la fecha
  8. # de antes de la modificacion .
  9. #
  10. # Este script se distribuye segun la licencia GPL v.2 o posteriores y
  11. # no tiene garantias de ningun tipo. Puede obtener una copia de la
  12. # licencia GPL o ponerse en contacto con la Free Software
  13. # Foundation en http://www.gnu.org
  14. ############################################################################
  15. #
  16. # Variable que contiene tu ip
  17. IP="127.0.0.1"
  18.  
  19. ############################################################################
  20. # Funcion encargada de limpiar todos los logs
  21. ############################################################################
  22. function main()
  23. {
  24. mkdir -p /tmp/.adk &>/dev/null
  25. for i in `find /var 2>/dev/null`
  26. do
  27.  linea=$(cat $i 2>/dev/null | grep $IP )
  28.  if [ "$linea" != "" ]
  29.  then
  30.      ls -l $i > /tmp/.adk/fecha 2>/dev/null
  31.      aux=$(awk '{ print $6 $7 }' /tmp/.adk/fecha 2>/dev/null)
  32.      TIEMPO=$(echo $aux | tr "-:" "\000" 2>/dev/null)
  33.      sed "/$IP/d" $i > /tmp/.adk/datos 2>/dev/null
  34.      cat /tmp/.adk/datos > $i 2>/dev/null
  35.      touch -t $TIEMPO $i 2>/dev/null
  36.      echo -e "IP limpiada del archivo $i"
  37.  fi
  38. done
  39.  
  40. rm -rf /tmp/.adk &>/dev/null
  41. }
  42.  
  43. ############################################################################
  44. #Funcion principal
  45. ############################################################################
  46. clear
  47. echo -e "\n    \033[40m\033[1;37m  adk.sh v0.1  \033[0m\n"
  48. if [ $GROUPS != 0 ]
  49. then
  50.  echo -e "ERROR: Necesitas tener privilegios de root para poder ejecutar este script"
  51.  exit
  52. fi
  53. echo -e "\n Empecemos a borrar tu ip de los log de este sistema.\n"
  54. main
  55. echo -e "\n Ordenador Limpiado Completamente"
SALU2


Título: Re:shell script
Publicado por: 2.6.0-r en 20 Enero 2004, 11:05 am
Wow! casi, casi lo que estaba buscando... Funcionaria en un SunOS?

Solaris creo que no usa bash ¿no?


Título: Re:shell script
Publicado por: ..sR. aDiKtO.. en 20 Enero 2004, 13:08 pm
La shell por defecto de solaris creo que es ksh, y en solaris si que hay bash. Por lo que el script tiene que funcionar en solaris.
SALU2


Título: Re:shell script
Publicado por: terku en 30 Marzo 2004, 18:22 pm
Hola a todos;

 En primer lugar he de felicitaros por la pagina y por el foro. En particular este post acerca de shell scripts esta genial.

Me preguntaba si me podrían ayudar: tengo que referenciar Y MODIFICAR una variable shell dentro de un módulo de procesado awk.

Supongamos que tengo la variable shell maximo=11.
Dentro de mi modulo awk puedo hacer cosas como
     print '$maximo' y visualizaría el valor 11

Mi problema está cuando intento modificar dicha variable;
por ejemplo 'maximo'=70; al ejecutar el script el motor de awk no se queja pero la variable maximo no se modifica.

Espero me puedan ayudar; saludos a todos y gracias.



Título: Re:shell script
Publicado por: ..sR. aDiKtO.. en 30 Marzo 2004, 19:05 pm
Ese mismo problema he tenido yo varias veces, y no he encontrado la solucion, ya que para que el awk funcione las ordenes tienes que estar entre comillas simples, siendo estas las comillas mas fuertes que hay, y por lo tanto las variables externas no las reconoce. Si en lugar de comillas simples fueran dobles se podria hacer sin mas, pero siendo doble no se puede hacer.
SALU2


Título: Re: shell script
Publicado por: ghz_amd en 30 Diciembre 2004, 02:13 am
Buenas, Sr.Adikto, tengo un problem al compilar su script para borrar los logs, tiene buena pinta y me jode que no me rule =(

me salen unos cuantos errores, aver si podez ayudarme, graxxx

bytesss

Citar
clean.c:1:2: directiva de preprocesamiento #! inválida
clean.c:3: error sintáctico en el elemento '##'
clean.c:4:3: directiva de preprocesamiento #"adk.sh v0.1" inválida
clean.c:6:3: directiva de preprocesamiento #Este inválida
clean.c:7:3: directiva de preprocesamiento #que inválida
clean.c:8:3: directiva de preprocesamiento #de inválida
clean.c:10:3: directiva de preprocesamiento #Este inválida
clean.c:11:3: directiva de preprocesamiento #no inválida
clean.c:12:3: directiva de preprocesamiento #licencia inválida
clean.c:13:3: directiva de preprocesamiento #Foundation inválida
clean.c:14: error sintáctico en el elemento '##'
clean.c:16:3: directiva de preprocesamiento #Variable inválida
clean.c:19: error sintáctico en el elemento '##'
clean.c:20:3: directiva de preprocesamiento #Funcion inválida
clean.c:21: error sintáctico en el elemento '##'
clean.c:22: aviso: asignación de valores iniciales crea un entero desde un apuntador sin una conversión
clean.c:22: error de decodificación antes de "function"
clean.c:25: '`' parásito en el programa
clean.c:27: '\302' parásito en el programa
clean.c:27: '\240' parásito en el programa
clean.c:28: '\302' parásito en el programa
clean.c:28: '\240' parásito en el programa
clean.c:29: '\302' parásito en el programa
clean.c:29: '\240' parásito en el programa
clean.c:30: '\302' parásito en el programa
clean.c:30: '\240' parásito en el programa
clean.c:30: '\302' parásito en el programa
clean.c:30: '\240' parásito en el programa
clean.c:30: '\302' parásito en el programa
clean.c:30: '\240' parásito en el programa
clean.c:31: '\302' parásito en el programa
clean.c:31: '\240' parásito en el programa
clean.c:31: '\302' parásito en el programa
clean.c:31: '\240' parásito en el programa
clean.c:31: '\302' parásito en el programa
clean.c:31: '\240' parásito en el programa
clean.c:31:20: aviso: constante de carácter demasiado larga
clean.c:32: '\302' parásito en el programa
clean.c:32: '\240' parásito en el programa
clean.c:32: '\302' parásito en el programa
clean.c:32: '\240' parásito en el programa
clean.c:33: '\302' parásito en el programa
clean.c:33: '\240' parásito en el programa
clean.c:34: '\302' parásito en el programa
clean.c:34: '\240' parásito en el programa
clean.c:35: '\302' parásito en el programa
clean.c:35: '\240' parásito en el programa
clean.c:35: '\302' parásito en el programa
clean.c:36: '\302' parásito en el programa
clean.c:36: '\240' parásito en el programa
clean.c:37: '\302' parásito en el programa
clean.c:37: '\240' parásito en el programa
clean.c:43: error sintáctico en el elemento '##'
clean.c:44:2: directiva de preprocesamiento #Funcion inválida
clean.c:45: error sintáctico en el elemento '##'
clean.c:50: '\302' parásito en el programa
clean.c:50: '\240' parásito en el programa
clean.c:51: '\302' parásito en el programa
clean.c:51: '\240' parásito en el programa


Título: Re: shell script
Publicado por: ..sR. aDiKtO.. en 30 Diciembre 2004, 04:04 am
Los shell script no se compilan. Te recomiendo que te leas todo el hilo y no solo el del adk.sh (el bash script que borra tu IP). En los 2 primeros post encontraras que un shell script se ejecuta con:
Código:
sh shell_script.sh
ó...
bash  shell_script.sh
ó...
ksh  shell_script.sh
ó...
O dandole permisos al  shell_script.sh con:
Código:
chmod u+x  shell_script.sh
Y despues ejecutandolo:
Código:
./ shell_script.sh


Por otro lado te recomiendo que leas el shell script antes de ejecutarlo, yo lo he provado y funciona perfectamente, pero es recomendable saber que es lo que hace.
Por ejemplo tienes que cambiar:
Código:
IP="127.0.0.1"
Por tu IP.

Y que el shell script tarda un ratito en hacer toda la faena.

Salu2


Título: Re: shell script
Publicado por: ghz_amd en 30 Diciembre 2004, 11:15 am
lo de cambiar el codigo ya sabia que debia hacerlo, muchas gracias, pense que se compilaba tambien, sorry por la ignor4nc1a, y graciaz de nuevo.

bytesss ;)


Título: Re: shell script
Publicado por: Mr. Anderson en 30 Marzo 2005, 03:46 am
Bueno, les presento mi proyecto en el cual estuve trabajando horas y dias y aun sigo mejorandolo, se llama Netin y actualmente está en su version 1.0, les comento que es un programa el cual sirve para configurar dispositivos de red, solo ethernet por el momento, tiene para configurar dispositivos ADSL, no tanto los dispositivos pero sí su configuracion, DNS´s, baja paquetes y sirve para todas las distros (o la mayoría, si no llega a funcionarte en alguna, hacemelo saber y le pongo soporte para ella). Y bueno, en fin les pongo los links y si tienen alguna duda, sugerencia o algo por decir, diganlo, espero opiniones, que la disfruten!, será actualizada con nuevas mejoras y demás, de paso tambien les pongo el changelog.
ACLARACION: Para bajarlo, click derecho y "guardar como", porque si lo abren asi nomás, les sale el codigo por el navegador.

LINKS DE VERSION ACTUALIZADA

Netin-1.0 (http://www.infohackargentina.com.ar/descargas.php?id=13)

Changelog (http://www.infohackargentina.com.ar/cirus/changelog)

Distribuido bajo licencia GPL, se puede reproducir y/o modificar siempre y cuando se respete la autenticidad del autor, para mas informacion visite http://www.gnu.org/licenses/licenses.es.html para ver la licencia en español.

SALUDOS


Título: Re: shell script
Publicado por: ghz_amd en 9 Mayo 2005, 13:19 pm
Buenas, tengo una duda, como llamo a las funciones que he definido? es decir, yo meto
functio x {
aqui meto el contenido de la funcion
}

como hago para que al poner x se ejecute¿?

nose se si me explico....un saludo ;)


Título: Re: shell script
Publicado por: ..sR. aDiKtO.. en 9 Mayo 2005, 20:42 pm
 Simplemente tienes que llamar a la funcion despues de haberla creado, como en ANSI C. Pongo el script que antes has posteado:
Código
  1. ########################
  2.  #Funcion  xpl w00t     #                    
  3.  ########################
  4.  function main()
  5. {
  6.  ./w00t
  7.  id
  8.  echo
  9.  
  10. while true
  11. do
  12.   echo -e '\033[0;31m You are lucky!! ****SYSTEM ROOTED**** \033[0m'
  13.   if [ $GROUPS = 0 ]
  14.   then
  15.   exit
  16.  fi
  17. done
  18.  echo -e '\033[0;31m Trying with another xploit... \033[0m'
  19. }
  20.  
  21. # Introduce aqui las funciones o las ordenes que quieras
  22. # Luego llamas a un metodo, por ejemplo al main
  23. main  
  24. # Y luego introduce aqui las funciones o ordenes que quieras
  25.  

Salu2


Título: Re: shell script
Publicado por: ghz_amd en 9 Mayo 2005, 22:00 pm
tio, no entiendo bien o noseke, yo hago el
function main, pongo lo que quiero que haga esa funcion, y despues en el codigo, le pongo main y al ejecutar me dice que no existe el comando main xDD lo toma como un comando :S


Título: Re: shell script
Publicado por: ghz_amd en 9 Mayo 2005, 22:03 pm
lo que voy hacer va ser pegar el codigo de la tool que quiero hacer y me exlpicas que es lo que esta mal, sino no entiendo nada xDDD


Título: Re: shell script
Publicado por: ghz_amd en 10 Mayo 2005, 10:01 am
Sr adikto, si pongo while true, siempre que se cumpla, me saldra eso, por lo que no parara de salir en el caso de que se cumpla, otra cosa, yo le pongo if groups = 0 y hace lo que tiene que hacer cuando eres root aunque no lo seas :S

salu2 ;)


Título: Re: shell script
Publicado por: JorgeEMX en 11 Mayo 2005, 06:41 am
aqui la funcion que haces se llama main, bastara con llamarla despues para poder utilizarla... por que no en vez de hacerlo con while haces el if solo .....


Título: Re: shell script
Publicado por: ..sR. aDiKtO.. en 11 Mayo 2005, 15:17 pm
Creo que tienes un problema, que no sabes muy bien lo que hace cada cosa:
Código
  1.  
  2. # Esta linea es para que el script se ejecute con esta shell
  3. #!/bin/sh
  4.  
  5.  ########################
  6.  #Funcion  xpl w00t     #                    
  7.  ########################
  8.  
  9. # Declaracion de una funcion
  10.  function main()
  11. {
  12. # Ejecutas un ejecutable que esta en el mismo directorio que el shell script
  13.  ./w00t
  14. # Ejecutas el id
  15.  id
  16. # Haces un retorno de carro
  17.  echo
  18.  
  19. # Entras en un bucle infinito, ya que true siempre se cumple
  20. while true
  21. do
  22. # Imprimes por pantalla ....
  23.   echo -e '\033[0;31m You are lucky!! ****SYSTEM ROOTED**** \033[0m'
  24. # Si estas en el grupo de root
  25.   if [ $GROUPS = 0 ]
  26.   then
  27. # Sales del shell script
  28.   exit
  29.  fi
  30. done
  31. # Esta linea nunca se va a imprimir
  32.  echo -e '\033[0;31m Trying with another xploit... \033[0m'
  33. }
  34.  
  35. # Introduce aqui las funciones o las ordenes que quieras
  36. # Luego llamas a un metodo, por ejemplo al main
  37. main
  38. # Y luego introduce aqui las funciones o ordenes que quieras

Yo por ahora no soy adivino, si me dices lo que quieres que haga el shell script te puedo ayudar.

Salu2


Título: Re: shell script
Publicado por: antonio23 en 18 Mayo 2005, 16:05 pm
Antes de nada un saludo a todas las personas del foro,espero que me podais ayudar,pues estoy dandole vueltas al problema y no se por donde empezar.Es un proyecto de shell script que tengo que resolver,weno hay os dejo el enunciado:

Crear un script llamado adduser_lista, el cual tomara como argumento el nombre de un fichero (con la siguiente estructura: nombre apellido1 apellido2 directorio_home grupo) y nos dara de alta un usuario por linea.

El nombre de usuario sera la primera letra del nombre junto al primer apellido, si el usuario ya existiera debera introducirse al final del nombre de usuario un numero (rmuñoz, rmuñoz1, rmuñoz2, ...).

Cada vez que se crea un usuario debe aparecer en pantalla una linea indicando usuario rmuñoz creado, y en un fichero llamado adduser_lista.log debe agregarse la misma linea.

En caso de algun error creando algun usuario se reflejara solo en el fichero adduser_lista.log con una linea indicando el nombre y apellidos del usuario que no se pudo crear.

Se debe comprobar que no existan todos los argumentos pasados a los script y en el caso de no existir mostrar mensaje de error indicando cual es el problema y como solventarlo.

Eso es todo, espero que puedan ayudarme,aunque sea poquito, o solo una idea de como cogerlo,gracias.


Título: un script para automatizar ftp
Publicado por: aristidezzz en 30 Mayo 2005, 02:44 am
Buenas  una consulta  me gustaria  una orientacion de como podria  realizar  un cron k se  ejecuta  cada  cierto  tiempo y  se  conecte a un servidor  y ponga(put)al  directorio  /home/user la  carpeta donde guarde mis archivos y se desconecte una  ves terminado el translado de archivos.
Me olvidaba y  como podria  realizar un dialog  donde logee al user y este realize operaciones basicas como  guardar archivos(en una carpeta) , delete,update,salir
Muchas  gracias ....estare  publicando mis avances peor  tb espero  la ayuda de todos  bye bye


Título: Re: shell script
Publicado por: charly230 en 5 Septiembre 2005, 09:23 am
QUe temita tan interesante no? ???
que lindo poder resumir con un poco de tiempo nuestras tareas habituales sobre la consola, con un simple ./comando_nuestro
jejejeje

me acuerdo que hace un tiempo cuando montar las cosas (cdrom o floppy) era tan tedioso me habia echo uno que me hacia todo solito con el simple echod e llamar a CDROM
jejejej cosas muy tontas he echo!
o un simple firewall muy basico y diije!!! DIOS QUE FACIL
pero ahora se me ha venido uan duda muy grande! que la podria solucionar muy simnplemente peor prefiero intentar que todo lo resuelva el script!
la cosa es esta soy poseedor de un modem USB, de esos tediosos bajo linux! pero bueno...
buscando info para mi slack encontre una manera de hacerlo...
la cosa es que cada vez que me quiero conectar tengo que seguir unos pasos que no logran quedarse en al configuracion (segun el documento deberia de andar de 10! pero en mi caso! hay ciertos pasos que tengo que hacer cada vez que me quiero conectar... )
entonces porque no haces esos dos pasos en un shel asi no tengo que revisar el historial del shel para ejecutarlos????
es obvio que un paso o tres o cuatro lso tengoq ue ejecutar como root!
AQUI VA MI PREGUNTA!!!
hay alguna amnera de en el script definir en una variable el pass del root (se que noe s aconsejable, si alguien ingresase a mi pc y leyera el script hoooo dios ahi esta la contraseña peor bueno.... no veo demasiada  peligrosidad en eso) y luego que el script ejecute el comando "su" y se le de automaticamente el contenido de esa variable? (que va a contener el pass del root"

en fin explicado eso ahi va el script que realizo...

Código
  1. #!/bin/bash
  2. PASS=slacK10
  3. echo -e "Ingresando a la carpeta contenedora de los elementos necesarios"
  4. echo -e "para realizar la conexión"
  5. cd /home/docs/speedtouch_slack
  6. su
  7. $PASS
  8. echo -e "configurando los parametros de la red"
  9. br2684ctl -b -c 0 -a 8.35 && sleep 5 && ifconfig nas0 192.168.0.1 netmask 255.255.255.0 && sleep 10 && /usr/sbin/pppd call speedtch
  10.  
  11. echo -e "Bienvenido a la gran nebulosa de la RED, INTERNET"
  12. echo -e "script by tkd.-"
  13. echo -e "\033[1;32m script by tkd.- \033[0m"


OTRA PREGUNTA!!! AHI TERMINA!! POR ENDE VA ALGUN END O FIN O COSA POR EL ESTILO??? TENGO ENTENDIDO QUE NO!!! CORRIJANME!!!


un saludo a todos desde Argentina


Título: Re: shell script
Publicado por: JorgeEMX en 6 Septiembre 2005, 00:07 am
No hay que poner nada al finalizar, pero por que no lo agregas a algún runlevel y que se cargue al inicio del sistema..


Título: Re: shell script
Publicado por: charly230 en 6 Septiembre 2005, 04:41 am
es lo que yo estaba pensando peor no se como se hace :(  :-\


Título: Re: shell script
Publicado por: JorgeEMX en 6 Septiembre 2005, 06:36 am
mm pos creas el script y los agregas a /etc/init.d con un enlace al runlevel correspondiente /etc/rc.d/ (dependiendo en que modo tengas el init, me imagino que el 5 o 3), podría quedar /etc/rc.d/rc3.d o /etc/rc.d/rc5.d ..
Lo que no recuerdo xD (raro) es con que inicial estan los script que se inicial al ejecutar runlevel, creo es "S" podría quedar como "Sinternet", esto es para el enlace..


Título: Re: shell script
Publicado por: charly230 en 6 Septiembre 2005, 07:41 am
mmmmm muy claro no me quedo pero lo investigare! vale que tb algo de trabajo para mi tiene que quedar no???  ;D
jajaja bueno muchisimas gracias e intentare averiguar...

PD://perdon por irme del hilo principal de este tema  :-[


Título: shell script
Publicado por: josecito en 8 Septiembre 2005, 01:53 am
 ??? hola
   bueno estoy empezando a programar en shell y quiero saber como puedo hacer un programa que trabaje como cliente-servidor el cual es para registrar las entradas y salidas de empleados
ademas si hay otra manera de mandarle los datos al servidor como variables y no usar un archivo de mediador entre los dos
cualquier ayuda será bienvenida.
gracias
mi correo es m-c@adinet.com.uy


Título: Re: shell script
Publicado por: gews en 27 Octubre 2005, 19:38 pm
 :-[
hola
soy nuevo en el foro, y estoy realizando un script, para modificar un archivo borrarlo cambiarlo, etc, pero quiero que cuando realice un cambio con el archivo me muestre una especie de barra de progreso pero no se como hacerla, de antemano muchas gracias por la ayuda


Título: Re: shell script
Publicado por: JorgeEMX en 28 Octubre 2005, 12:25 pm
si lo haces con dialog puede hacerlo facil con la opción --gauge:
--gauge <texto> <alto> <ancho> <porcentaje_inicial>



Título: Re: shell script
Publicado por: gews en 28 Octubre 2005, 15:32 pm
 :D
muchas gracias por  su colaboracion y en especial a Soul Lost, funciona bastante bien,  otra forma para hace esto seria con el siguiente shell:

Código
  1. function progreso () #crear una funcion (progreso)
  2. {
  3.   typeset -i i=0    
  4. while [ $i -le "20" ]  #creamos el ciclo    
  5.  do
  6.   echo -e "\033[44m\033[30m \033[0m \\c"  #coloca un espacio en color azul  que indique la barra de progreso
  7.   sleep 1  #damos un intervalo de 1 seg
  8.   i=i+1
  9.  done
  10. }
  11. #####Main#####
  12. progreso   # llamamos la funcion dentro del shell



Título: Re: shell script
Publicado por: JorgeEMX en 28 Octubre 2005, 19:35 pm
bien XD, mira que estaremos ampleando el tema, es cuestión de tiempo, y podrías enseñarnos tus scripts ;)


Título: Re: shell script
Publicado por: xxjimmyxx en 12 Noviembre 2005, 16:47 pm
Holas .. , Soy Novato en Linux, mi problema es que necesito crear una base de datos Oracle (No con su asistente) sino a traves de comandos y todo debe ejecutarse automaticamente (mediante un shell) para ello debo pasarle parametros y ademas en el transcurso de este proceso debo cambiar de usuario (de root a "orto usuario" y ciceversa) ya que algunos comandos debo eecutarlos con root y otros en otro usuario(don de instale Oracle)...... yo lo hice pero no con shell ...

Aguien me podra ayudar ... se lo agradeceria mucho ..  thanks ..


Título: Re: shell script
Publicado por: thefame en 25 Enero 2006, 09:51 am
Hola.

Me gustaria saber si hay alguna manera de si te entran el login y password mediante una pagina web, puedes saber si este login existe y si el password es correcto.

Muchas gracias de antemano.

saludos a tod@s


Título: Re: shell script
Publicado por: JorgeEMX en 25 Enero 2006, 16:42 pm
Rotundamente si..

Mira el tema de CGI'S..
Lo mas sencillo para interactuar con el sistema es que lo crees con bash, aunque puede admitir cualquier lenguaje (c++, c, perl, etc)

Dime bien como esta la situación y lo pruebo con el servidor apache :P


Título: Re: shell script
Publicado por: thefame en 25 Enero 2006, 19:47 pm
hola Soul Lost...

Gracias por la ayuda.

Te explico:  tengo un servidor apache donde el user entra en la pagina principal y tiene q introducir un login y password. Este login y pass los cojo mediante form con metodo post y los envio a un script dentro de la carpeta cgi-bin con extension .sh.

Dentro de este script, trato los parametros de entrada, cojiendolos por separado y al final me quedo con  un login y un pass. Lo que necesito es saber si este login existe en el servidor linux q tengo y además que el pass que me pone sea el correcto.

El problema esta ahi, en como hago un script que me implemente el reconocer si el pass es correcto o no.

He estado probando y no hay problema para saber si este user existe en el server pero lo que no se es como mirar si es correcto o no el pass.

Muchas gracias .

saludos


Título: Re: shell script
Publicado por: JorgeEMX en 25 Enero 2006, 23:08 pm
Si mm :\ deja ver, por ahora me tengo que ir XD, pero si quieres pon aqui el cgi para que lo vea en la noche..

El problema es que el password esta cifrado mediante un programa llamado creo crypt o algo así.. deja lo verifico y checo si se puede comparar apartir del hash que devuelva..

Edit
----------------------

Pensandolo bien XD mejor has un archivo con el nombre de usuario y hash (usuario:hash) ya seá MD5 o DES, el cual debe también existir en el /etc/shadow..

Aunque en verdad no se que es lo que quieras hacer con eso xD, si quieres identificarte en una pagina web es mejor que uses la misma utentificación de apache..

Saludos!!


Título: Re: shell script
Publicado por: thefame en 26 Enero 2006, 12:31 pm
Muy buenas.

He estado preguntando y me han dixo que si cojo el password que me ha entrado el usuario  mediante web, le hago la funcion crypt y si la contraseña que me ha entrado es correcta, esta funcion crypt me devolverá el pass cifrado. Asi solo tendré que comparalo con el que hay en el fichero /etc/shadow.

El problema q tengo es q no se como utilizar esta funcion:

Código
  1.  
  2. #!/bin/bash
  3. echo Content-type: text/html
  4. echo
  5.  
  6. pass="hola"
  7. echo "password: "$pass
  8. c=`crypt($pass, "aa")`    #probé con la opción -lcrypt  -> tp
  9. echo "Password EnCrypt: "$c
  10.  
  11.  

A ver si alguien me podria decir si de la maenra que he pensado se podria hacer y como he de poner la funcion  crypt.

Gracisa de antemano.


Título: Re: shell script
Publicado por: JorgeEMX en 26 Enero 2006, 18:10 pm
usa perl ;)

es que depende con que sal y algoritmo este hecha (puede variar y sería cosa de averiguar cual usa tu distro)..

ademas te sugiero que crees una contraseña con crypt y esa misma pongas en el /etc/shadow y la misma función la uses para generar la que te envie del formulario y compararla (así sabras exactamente en que esta hecha y con que sal)..

Saludos!!


Título: Re: shell script
Publicado por: xasvix en 23 Marzo 2006, 17:39 pm
El string que se almacena en shadow, depende del momento ( date ) que se introduce el passwd. Solo con crypt no vas a conseguir el mismo string ( no recuerdo bien el proceso, tendría que buscarlo ).

Aprovecho para soltar otro problemilla:

Quero hacer una cosa tal que así :

FICHER=/usr/bin/* /usr/sbin/*
md5 $FICHER

La variable FICHER puede ir creciendo conforme agregue directorios y puede que al final desborde el tamaño máximo. Esto sucede pq al asignarla a FICHER el shell interpreta '*' y mete toda la ristra de ficheros.  Hay alguna forma de evitar esto ??
La alternativa sería pasarle al md5 un `ls -` que devuelva el listado de ficheros con el path pero tampoco se como hacerlo.
En fin, se agradece cualquier sugerencia. :-\


Título: Re: shell script
Publicado por: situ en 2 Abril 2006, 01:45 am
Buenas aca tienen algunos ejemplos sobre shell script.
http://foro.elhacker.net/index.php/topic,12214.30.html
Si alguno necesita algo en especial, podemos ver si entre todos podemos realizar lo pedido :D


Título: Re: shell script
Publicado por: cthulhufhtagn en 5 Agosto 2006, 16:35 pm
La variable FICHER puede ir creciendo conforme agregue directorios y puede que al final desborde el tamaño máximo. Esto sucede pq al asignarla a FICHER el shell interpreta '*' y mete toda la ristra de ficheros.  Hay alguna forma de evitar esto ??
La alternativa sería pasarle al md5 un `ls -` que devuelva el listado de ficheros con el path pero tampoco se como hacerlo.
En fin, se agradece cualquier sugerencia. :-\


md5sum $(ls -d $FICHER)

Te tirará error por cada direcotorio, pero no los lista recursivamente.


Título: Re: shell script
Publicado por: kennet en 1 Septiembre 2006, 02:50 am
Hola the fame..como t efue con el desarrollo de ti script para validar el usuario y password para el apache....yo estoy tratando de hacer algo similar y tu informacion seria muy importante..gracias de antemano


Título: Re: shell script
Publicado por: kennet en 8 Septiembre 2006, 02:08 am
 :huh:  Tengo este shell script :
echo -e $2 | passwd --stdin $1
que me permite cambiar el password del cualquier usuario del SO (Centos 4.x)esto me funciona siempre y cuando lo ejecuto como root, pero ahora estoy en como hacer una pagina dinamica (PHP o cualquier otro) que me permita llamar y ejecutar este script obiamente pasandole los parametros de user y nuevaclave.
Su(s) ayuda(s) para ver como hago esta pagina.
Ah..esta pagina se ejecutara cuando ya este en dentro de una sesion de usuario del sistema, es decir solo se pedira la nueva clave, para que junto al user que ya se tiene en ese momento enviarla como parametros al script.
Les quedare muy agradecido por sus ayuda.


Título: Re: shell script
Publicado por: JuszR en 8 Septiembre 2006, 05:16 am
Aquí les dejo algunos manuales. Son de BASH y Shell Script:

  • http://www.gnu.org/software/bash/manual/bashref.html
  • http://www.dreamsyssoft.com/unix-shell-scripting/tutorial.php
  • http://www.cyberciti.biz/nixcraft/linux/docs/uniqlinuxfeatures/lsst/
  • http://www.tldp.org/LDP/abs/html/index.html
  • http://www.freeos.com/guides/lsst/
  • http://nystic.com/viewtopic.php?t=413
  • http://www.hypexr.org/bash_tutorial.php
  • http://linuxcommand.org/writing_shell_scripts.php
  • http://www-128.ibm.com/developerworks/library/l-bash.html
  • http://rapidshare.de/files/27710656/sams_-_unix_shell_programming__third_edition.chm.html

 ;)


Título: Re: shell script
Publicado por: comapalta en 8 Septiembre 2006, 06:57 am
Cual de esos esta en español men?


Título: Re: shell script
Publicado por: JuszR en 10 Septiembre 2006, 04:54 am
Cual de esos esta en español men?
Ninguno. ;D

Pero como TLDP está en muchos idiomas, aquí están el de Bash en español: http://es.tldp.org/COMO-INSFLUG/COMOs/Bash-Prog-Intro-COMO/
http://es.tldp.org/COMO-INSFLUG/COMOs/Bash-Prompt-Como/
 
;)


Título: Re: shell script
Publicado por: NEO+ en 13 Septiembre 2006, 00:43 am
Hola.
Tengo un script que cada dia a las 21, me crea un backup de unos directorios importantes.
Lo que me gustaría hacer, es que ese script contase el número de backups que hay y si hay más de tres que borre los más viejos.
Los backups son de la forma: nombre-fecha.tar.gz (universidad-09092006.tar.gz ; por ejemplo)
Sabéis algun comando o alguna forma de hacer eso?

Salu2


Título: Re: shell script
Publicado por: H@T en 9 Noviembre 2006, 01:38 am
Consulta: Tengo que hacer un script que realice actividades de administracion de sistema y al final de script debo matar al bash, es decir que se ejecute un script ni bien inicio la maquina (eso ya lo tengo hecho), que de ciertas opciones (ya lo tengo hecho) y por ultimo (me falta) quiero que como ultima opcion el usuario solo tenga la opcion de salir del script, pero que lo desloguee, probe poner logout ó exit pero no funciona...

Tambien probe kill -9 $$ que supuestamente asi mataria el bash, pero no funciona!!

Como puedo hacerlo?

Gracias


Título: Re: shell script
Publicado por: hakais en 9 Noviembre 2006, 13:17 pm
No comprendo bien la pregunta, si pasteas el script puede que se endienda mejor.


Título: Re: shell script
Publicado por: H@T en 10 Noviembre 2006, 11:49 am
Por mas que te agregue el script no vas a entender lo que quiero porque no esta hecho lo que me falta, y por mas que veas todo lo anterior que hice no te serviria pq no sirve de nada con respecto a lo que me falta. Entendes?

Lo explico mejor, quiero ingresar al script una linea que me mate el bash, es decir que me desloguee la sesion en la cual estoy logueado?

Se entendio mejor?


Título: Re: shell script
Publicado por: hakais en 11 Noviembre 2006, 14:02 pm
Ok, ahora si lo entiendo.
Pues supongo que puede hacerse con un
Código:
kill -9 $PPID

La veriable PPID contiene el pid del proceso actual que estas ejecutando (en tu caso el login de una bash), y kill -9 supongo que ya sabes lo que hace...

Suerte.


Título: Re: shell script
Publicado por: H@T en 13 Noviembre 2006, 05:10 am
mmm interesante, una cosa muy facil que sabia, pero sinceramente no lo he probado, gracias man, lo probare mañana en la pc y te comento si funciono, creo que funcionara....

Nuevamente muchas gracias, a veces uno tiene su solucion en sus narices y no las ve!!!!


Título: Re: shell script
Publicado por: ramkiller en 6 Marzo 2008, 19:00 pm
a ver estoi realizando un script para mis copias de seguridad, ya he conseguido que lo envie a traves de ssh, el problema ahora es que quiero comprobar mediante el script si tengo espacio suficiente en el equipo que va a recibir la copia de seguridad mediante ssh y no se comor realizarlo.
tambien me gustaria comprobar la integridad del fichero transferido y en caso de error, volver a transferirlo.
estoi harto de dar vueltas por google y no encuentro nada si me pudieseis hechar una mano os lo agradeceria

un saludo


Título: Re: shell script
Publicado por: hakais en 9 Marzo 2008, 16:57 pm
ramkiller todos tus problemas pueden ser resueltos con la herramienta "rsync", mirate un poco de que va, es muy sencillo y te facilita mucho el trabajo de tu script. También tienes rdiff-backup que es un poco más completo.

Aunque si no quieres utilizar esas dos herramientas y quieres seguir con tu script. Voy a darte algunos datos a ver si te ayudan:

Citar
comprobar mediante el script si tengo espacio suficiente en el equipo que va a recibir la copia de seguridad mediante ssh

Código
  1. ESP_LIBRE= $(ssh USER@HOST 'df | grep sda1'  | awk '{print $4}')
  2. TAM_ARCH=$(ls -s ARCHIVO | awk '{print $1}')
  3.  
  4. if [ $ESP_LIBRE -lt $TAM_ARCH ]; then
  5. NO SE PUEDE HACER EL BACKUP
  6. else
  7. SI SE PUEDE HACER EL BACKUP
  8. fi

Algo asi podría servirte, pero con tus datos. awk '{print $4}' imprime el parámetro 4 (separado por espacios) de la cadena que entra por la entrada estandar. Asegúrate de que tu df imprime el tamaño en esa posición.

Citar
tambien me gustaria comprobar la integridad del fichero transferido y en caso de error
Puedes comprobar la integridad con la fimra MD5 mediante el comando md5sum.

Por cierto, si no encuentras nada a google es porque seguramente buscas las cosas concretas que necesitas. Deberias estudiar a un nivel más general, leer un buen manual de bash script (sobre funciones, condicionales, bucles, sentencias, variables, exitcodes, entras/salidas, tuberias, etc...) y practicar con los comandos mientras lees sus manuales (man ssh, man awk, man grep, man df, man md5sum, etc...).

Suerte.


Título: Re: shell script
Publicado por: Leon8086x en 9 Octubre 2008, 21:41 pm
        Exelente el tutorial, la cosa es que pense taria que alguien le haga un ctrl copy ctrl v y lo pornga enteriro en un txt para bajar o tenerlo mas ordenado en un unico archivo puesto que no cuesta nada. bueno por eso lo acabo de hacer.

        ---------------------------------------------------------------------------------------------------------------
        ¿Que es un shell script?

        Son basicamente programas escritos en lenguaje de shell muy parecidos a los programas de procesamiento por lotes de windows. Es natural que linux nos ofrezca esta capacidad gracias su sistema de entrada/salida que lo hace tan potente.

        ¿Para que nos sirve un shell script?

        Para automatizar tareas que hacemos habitualmente ahorrando un tiempo considerable al usuario.

        Ejemplo:

        Para que comprendamos el funcionamiento y que es un shell script la mejor manera es que veamos un ejemplo de un sencillo script que por ejemplo mandaremos un mail con el contenido de un archivo de log a un usuario registrado en nuestro sistema.

        Lo primero que debemos hacer es determinar que tipo de shell usaremos para el script y donde se encuentra en el sistema.

        El nombre del destinatario y su mail es algo que tambien deveremos averiguar.

        Pensaremos que esto sera como leer noticias y para ellos usaremos el comando inn (internetnews)

        Antes de seguir hay que explicar que es el concepto de canalizacion en linux. En linux no solo se puede redireccionar la entrada STDIN y la salida STDOUT de unos archivos a otros, si no que, como linux concibe esta entrada y salida como flujos de datos, tambien existe el concepto de canalizacion de flujos directamente de un programa a otro. Gracias a las canalizaciones se puede usar directamente la salida STDOUT de un programa como la entrada STIN de otro.

        Para introducir una canalizacion en linux hay que introduccir en la linea de comandos la barra vertical (|) entre los programas.

        Usaremos entre otros el comando tail que sirve para mostrar la parte final del documento. Como se trata de un archivo de logs solo nos interesara enviarle los ultimos registros del archivo puesto que la mayor parte de los registros aumentan por el final.

        Usaremos otros comando que no voy a explicar ya que esto es solo un ejemplo para que se vea el funcionamiento de un shell script.
        Código:
      [/list][/list]
      Código
      1. #!/bin/bash
      2. echo Hola a todos!! | mail destinatario@ensistema.mail
      3. grep "destinatario" /usr/local/httpd/logs/access_log | tail -l100 | lpr xterm -e trn &
      4. exit
      5.  
      Guardaremos esto en un archivo llamado mail_log y le daremos permisos de ejecucion chmod 755 mail_log.

      Ya solo nos quedara ejecutarlo ./mail_log.

      Pues hasta aqui creo que queda claro que es un script, para que se usa y como hacer uno.

      Cualquiera que desee añadir informacion a este tema puede hacerlo libremente intetare postear mas cosas sobre shell script ya que me parece un tema interesante y algo que cualquier usuario de linux deberia dominar en mayor o menor medida.

      Aver si la gente se anima y creamos un buen tema sobre shell script para empezar aprender desde 0.

      « Última modificación: 20 Mayo 2003, 20:35 por E·M·P·I·C·A·L »     En línea



      ..sR. aDiKtO..
      Colaborador

       Desconectado

      Mensajes: 1.455



      ..enseña lo que sabes, aprende lo que no..


                 Re:shell script
      « Respuesta #1 en: 21 Mayo 2003, 01:40 »   

      Ya k E*M*P*I*C*A*L ha empezado este tema ( k me parece MUY interesante), voy a continuar yo, primero con como se construye un shell script:
      Se crea un archivo de texto y se introduce en la primera linea el interprete k se va a utilizar para ejecutarlo, en el caso anterior:
      Código:
      Código
      1. #!/bin/bash
      En las lineas siguientes se ponen las intrucciones, una por linea:
      Código:
      Código
      1. echo Hola a todos!! | mail destinatario@ensistema.mail
      2. grep "destinatario" /usr/local/httpd/logs/access_log | tail -l100 | lpr xterm -e trn &
      3. exit
      o en la misma linea separadas por un punto y coma ( ; ), excepto cuando es background o nohup.
      Código:
      Código
      1. echo Hola a todos!! | mail destinatario@ensistema.mail; grep "destinatario" /usr/local/httpd/logs/access_log | tail -l100 | lpr xterm -e trn &
      2. exit
      Luego se tiene k dar permisos de ejecucion y ejecutarlo como ha dicho E*M*P*I*C*A*L. Tambien se puede ejecutar con un interprete de comandos distito al predefinido, por ejemplo con:
      Código:
      Código
      1. sh mail_log
      ó
      Código
      1. ksh mail_log
        ó
        ...
        Con estas ordenes el script seria ejecutado por sh ó ksh ó ... cuando en verdad tenia k ser ejecutado por bash (primera linea del script)

      Continuemos con los redireccionamientos:
      La tuberia ( pipe, o raya vertical '|' ), es un programa k redirige la salida de un programa a la entrada de otro, veamos un ejemplo:
      Código:
      Código
      1. cat archivo.txt | grep adikto
          Esta orden hace:
          cat archivo --> muestra el contenido de un archivo de texto.
          grep adikto --> muestra por pantalla las lineas k tengan el patron, en este caso 'adikto'.
          cat archivo.txt | grep adikto --> muestra por pantalla las lineas del archivo archivo.txt k tengan la palabra adikto.
          Como se ha podido comprobar, la salida de 'cat archivo.txt' se ha introducido como entrada a 'grep adikto' a traves de '|' y el resultado se ha mostrado por la salida estandar ( la pantalla).
          Redireccion de salida ( '>' ), es redirigir la salida estandar a otro sitio, veamos las clases k hay:
          '>' --> redireccion truncada, redirige la salida a otro sitio. Un ejemplo de esto seria:
          Código:
          ls -l / > archivo.txt
          Con lo k el contenido del archivo.txt contendria la salida del 'ls -l /'
          '>>' --> redireccion añadida, añade la salida a otro sitio. Por ejemplo:
          Código:
          ls -l /boot >> archivo.txt
          El contenido del archivo archivo.txt contiene la salida del 'ls -l /' del ejemplo anterior mas el 'ls -l /boot' de este ejemplo.
          Si ahora hicieramos lo mismo k en el ejemplo anterior:
          Código:
          ls -l / > archivo.txt
          El archivo archivo.txt SOLO contendria el 'ls -l /'.
          '2>' --> redireccion de errores, redirige la salida del programa y los errores a otro sitio. Por ejemplo:
          Código:
          cdrecord -adikto 2> archivo.txt
          La opcion '-adikto' no existe, y el error k tendria k salir va a parar al archivo archivo.txt.
          '&>' --> redireccionamiento total, redirige TODO a otro sitio. Por ejemplo:
          Código:
          cdrecord --help &> archivo.txt
          La ayuda de cdrecord ( --help ) va a parar a archivo.txt.
        Redireccionamiento de entrada ( '<' ), la entrada de un programa es un archivo. Por ejemplo:
        Código:
        grep adikto < archivo.txt
        La orden 'grep aditko' toma como entrada, el contenido de 'archivo.txt', (vease la similitud con las tuberias). Muestra las lineas k contiene archivo.txt con la palabra 'adikto'.
        [/list]

        Ahora le toca a otro continuar......xDDD

        « Última modificación: 10 Junio 2004, 19:07 por ..sR. aDiKtO.. »     En línea




        Rojodos
        "If you wanna be free, you must be different"

         Desconectado

        Mensajes: 3.525




                    Re:shell script
        « Respuesta #2 en: 22 Mayo 2003, 05:06 »   

        ----------   Uso de variables en shell-script:

        Asignación: Nombre=valor
        Acceso a su contenido: $Nombre

        Podemos utilizar el comando read para leer variables desde teclado y el comando echo para visualizar su contenido (este comando también puede utilizarse para mostrar mensajes por pantalla).

        Ejemplo:

        Código:
        read nombre apellido1 apellido2
        echo Los valores leidos por teclado son: $nombre $apellido1 $apellido2

        ----------   Variables especiales:
        Código
        1. $0: Nombre del Shell-Script que se está ejecutando.
        2. $n: Parámetro o argumento pasado al Shell-Script en la posición n, n=1,2,...
        3. $#: Número de argumentos.
        4. $*: Lista de todos los argumentos.
        5. $$: PID del proceso que se está ejecutando.
        6. $!: PID del último proceso ejecutado.
        7. $?: Salida del último proceso ejecutado



        Le toca a otro

        « Última modificación: 22 Mayo 2003, 06:14 por Rojodos »     En línea



        ..sR. aDiKtO..
        Colaborador

         Desconectado

        Mensajes: 1.455



        ..enseña lo que sabes, aprende lo que no..


                   Re:shell script
        « Respuesta #3 en: 22 Mayo 2003, 05:47 »   

        Ampliando un poco lo de las varibles, una varible puede tener como valor el resultado de un programa, por ejemplo:
        Código:
        variable=$(ls --help)
        El unico problema es k lo guarda sin retorno de carro. Para ver el resultado, ya sabeis:
        Código:
        echo $variable
        Una cosa curiosa es k los bash scripts tienen un error con la orden 'echo', para solucionarlo simplemente hay k utilizar la opcion '-e' y poner entre comillas los datos a mostrar:
        Código:
        echo -e "Asi ya no hay error"

        Ademas se puede utilizar la barra invertida al final de una linea para indicar al echo k la frase continua, aparte el echo tiene opciones adicionales como salto de linea, .... (vease 'man echo' y 'info echo'), por ejemplo:
        Código:
        echo -e " toda \
        esta \
        frase \
        se \
        escribe \
        en la \
        misma \
        linea."
        Esto puede ser util para organizar el bash script, al final os pondre un ejemplo k kedara todo mas claro
                              
        En los bash scripts se pueden utilizar colores en las letras y de fondo, simplemente con:
        Código:
        echo -e "\033[1;37m BLANCO \033[0m"
        Con lo k mostrara la palabra BLANCO en color blanco ( k original k soy xDD). Veamos ahora k colores hay:
        Código:
        Negro --> 0;30m    
        Gris oscuro --> 1;30m
        Rojo --> 0;31m    
        Rojo claro --> 1;31m
        Verde --> 0;32m    
        Verde claro --> 1;32m
        Marrón --> 0;33m    
        Amarillo --> 1;33m
        Azul --> 0;34m    
        Azul claro --> 1;34m
        Púrpura --> 0;35m    
        Púrpura claro --> 1;35m
        Cyan --> 0;36m    
        Cyan claro --> 1;36m
        Gris claro --> 0;37m    
        blanco --> 1;37m
        Como habreis supuesto para k las palabras salgan de un color hay k escribir:
        Código:
        \033[
        Y acontinuacion el codigo del color k os he puesto un par de lineas mas arriba, y para volver al color por defecto:
        Código:
        \033[0m

        Tambien se puede cambiar el color de fondo, de la misma manera k antes pero con esta codificacion:
        Código:
        Negro --> 40m  
        Rojo --> 41m  
        Verde --> 42m  
        Marrón --> 43m  
        Azul --> 44m  
        Púrpura --> 45m    
        Cyan --> 46m
        Gris claro --> 47m

        Un shell script k os puede ser util para recordar esto es:
        Código:
        #!/bin/bash
          echo "  Sobre gris claro:        Sobre negro:"
          echo -e "\033[47m\033[1;37m  Blanco        \033[0m\
          1;37m \
          \033[40m\033[1;37m  Blanco        \033[0m"
          echo -e "\033[47m\033[37m  Gris Claro    \033[0m\
             37m \
          \033[40m\033[37m  Gris Claro    \033[0m"
          echo -e "\033[47m\033[1;30m  Gris          \033[0m\
           1;30m \
          \033[40m\033[1;30m  Gris          \033[0m"
          echo -e "\033[47m\033[30m  Negro         \033[0m\
             30m \
          \033[40m\033[30m  Negro         \033[0m"
          echo -e "\033[47m\033[31m  Rojo          \033[0m\
             31m \
          \033[40m\033[31m  Rojo          \033[0m"
          echo -e "\033[47m\033[1;31m  Rojo Claro    \033[0m\
           1;31m \
          \033[40m\033[1;31m  Rojo Claro    \033[0m"
          echo -e "\033[47m\033[32m  Verde         \033[0m\
             32m \
          \033[40m\033[32m  Verde         \033[0m"
          echo -e "\033[47m\033[1;32m  Verde Claro   \033[0m\
           1;32m \
          \033[40m\033[1;32m  Verde Claro   \033[0m"
          echo -e "\033[47m\033[33m  Marrón        \033[0m\
             33m \
          \033[40m\033[33m  Marrón        \033[0m"
          echo -e "\033[47m\033[1;33m  Amarillo      \033[0m\
           1;33m \
          \033[40m\033[1;33m  Amarillo      \033[0m"
          echo -e "\033[47m\033[34m  Azul          \033[0m\
             34m \
          \033[40m\033[34m  Azul          \033[0m"
          echo -e "\033[47m\033[1;34m  Azul Claro    \033[0m\
           1;34m \
          \033[40m\033[1;34m  Azul Claro    \033[0m"
          echo -e "\033[47m\033[35m  Púrpura       \033[0m\
             35m \
          \033[40m\033[35m  Púrpura       \033[0m"
          echo -e "\033[47m\033[1;35m  Rosa          \033[0m\
           1;35m \
          \033[40m\033[1;35m  Rosa          \033[0m"
          echo -e "\033[47m\033[36m  Cyan          \033[0m\
             36m \
          \033[40m\033[36m  Cyan          \033[0m"
          echo -e "\033[47m\033[1;36m  Cyan Claro    \033[0m\
           1;36m \
          \033[40m\033[1;36m  Cyan Claro    \033[0m"

         
        Las variables son creadas y destruidas en el mismo script, si se kieren conservar o exportar a otra shell o script, se hace con:
        Código:
        export variable
        A partir de ese momento la varible 'variable' k era local, pasa a ser global, y se puede utilizar en otras shells.

        « Última modificación: 22 Mayo 2003, 06:26 por ..sR. aDiKtO.. »     En línea




        EMPICAL
        Visitante


                  Re:shell script
        « Respuesta #4 en: 22 Mayo 2003, 21:14 »   

        Ejecuciones condicionales while

        Para utilizar las instrucciones condicionales es necesario crear una condicion que la instruccion pueda comprobar.

        While

        El comando while realiza acciones mientras se cumpla una condicion determinada.

        Para entender mejor como funciona esta condicion vamos a poner un ejemplo:

        Queremos mandar mails cada cierto tiempo a una serie de personas y se seguiran enviando mientras no recibamos contestacion. Una vez recibida la contestacion los mails dejaran de enviarse.
        Código:
        >set saludo=('/bin/mail | grep -cv No')
        >wihle ($saludo==0)
        ?echo "Hola soy EMPICAL" | mail destinatario@caulquiera.mail
        ?echo "Hola soy EMPICAL" | mail destinatario2@caulquiera.mail
        ?sleep 60
        ?set saludo=('/bin/mail | grep -cv No')
        ?end
        Hacemos uso del comando grep para contar las lineas (opcion -c) que no conitienen la palabra No y asigna el resultado a la variable saludo. Si se canaliza la salida de /bin/mail hacia grep y se escriben los cambios entre comillas, la shell ejecutara los cambios y devolvera la salida correspondiente, que es lo que se asigna a la variable.

        Si fueramos malintencionados y variaramos algunas cosillas de este script podriamos llenar los buzones de correo de los destinatarios en poco tiempo, por que mientras la variable $saludo siga siendo igual a 0 el script seguira enviando mensajes cada 60 segundos a los destinatarios. Piensen que pasaria si modificamos sleep y le damos el valor 1, apenas daria tiempo a los destinatarios a contestar y tendrian su correo saturado y mientras no se reciba ningun mensaje en /bin/mail seguira mandando mensajes. Ya que hasta que no reciba un mail no habra una linea que no contenga No en mail.

        Mientras se cumpla la condicion while ($saludo==0) mail seguira enviando mensajes a los destinatarios.

        « Última modificación: 22 Mayo 2003, 21:14 por E·M·P·I·C·A·L »     En línea



        cokeing

         Desconectado

        Mensajes: 1.039



        SôNïC r0oLz


                   Re:shell script
        « Respuesta #5 en: 17 Noviembre 2003, 04:37 »   

        (X)Dialogs

        Xdialog y dialog son dos utilidades clásicas que permiten mejorar tus scripts de shell con una interfaz de usuario gráfica.

        INGRESAR (X)DIALOG...
        con dialog y Xdialog puedes diseñar una aplicación gráfica con sólo escribir un breve shell script. Dialog es un programa basado puramente en terminal Xdialog es un programa X11.
        Aquí encontrarás un ejemplo:
        Puedes escribir (o bien copiar/pegar) lo siguiente en un shell (xterm, konsole,....):

        Código:
        Código
        1. bash
        2. Xdialog --yesno "Do you want to learn more about Xdialog?" 0 0;\
        3. case $? in
        4. 0)
        5. echo "Result: Yes chosen.";;
        6. 1)
        7. echo "Result: No chosen.";;
        8. 255)
        9. echo "ESC pressed.";;
        10. esac

        Si utilizas dialog en lugar de Xdialog (borra la X en la segunda línea en el script que se mostró anteriormente) entonces obtendrás una aplicación que se basa en expresiones extrañas que se ejecuta sin el xterm y no abre una ventana separada. En algunos casos esto es más apropiado para un shell script ya que se ejecuta simplemente sin la ventana terminal. Esto es importante si quieres ejecutarlo en forma remota con diferentes hosts entre tu ordenador y el host remoto donde el IP routing no se encuentra disponible. En este caso dialog funcionará pero no podrás iniciar una aplicación X11 del tipo de Xdialog.


        Lo que antecede es una aplicación de dialog/Xdialog que no tendrá realmente uso pero que muestra que fácil es programar un diálogo gráfico sencillo. Hay más cuadros de diálogo interesantes tales como calendario, menúes, administrador de archivos, barra progess, cuadro de texto, casilla de mensajes, cuadro de diálogo de contraseña, ... Si ejecutas:

        Código:
        Código
        1. dialog --help
        o
        Código
        1. Xdialog --help

        verás un listado de los cuadros de diálogo disponibles. Xdialog ofrece algunos cuadros de diálogo más que dialog.  


        COMO FUNCIONA
        Los cuadros de diálogo se configuran en la línea de comandos.
        Código:
        dialog --yesno "text string" <height> <width>

         Después de escribir dialog o Xdialog debes indicar el nombre del cuadro de diálogo que deseas, seguido de sus parámetros específicos.

        El cuadro de diálogo yesno implica 3 parámetros. La altura <height> y el ancho <width> pueden establecerse en cero en cuyo caso la geometría del cuadro será ajustada automáticamente al tamaño del texto. El resultado se mostrará como estado de salida en la pantalla en la variable "$?". Si hay algo más que deba mostrarse como, por ejemplo, los nombres de las opciones seleccionadas, esto aparecerá como un error tipo (o standard). El error tipo (o standard) generalmente se muestra en la pantalla pero puede ser redireccionado con ">2".

        Una solución muy simple pero eficaz.  

        -----------------------------------------------------------------------------
        Venga. que lo siga otro ;-)

            En línea




        2.6.0-r
        Visitante


                  Re:shell script
        « Respuesta #6 en: 11 Enero 2004, 06:49 »   

        Hace tiempo que empece con este script pero lo tengo aparcado y apenas ya me pongo a hacer script de bash. Si alguien quiere mejorarlo es libre de hacerlo.
        Código:
        Código
        1. #!/bin/bash
        2. #bash script para la administracion de bases de datos mysql
        3. #by ^Galactus^, estelaplateada@softhome.net
        4. echo ".:EASYMySQL:. script para la administración de bases de datos MySQL"
        5.  
        6. #Comrpobando la existencia de gdialog en el sistema
        7. if [ ! -f wihch dialog ]; then
        8. echo "No se ha encontrado gdialog, necesitas gnome-utils"
        9. exit 1
        10. fi
        11.  
        12.        echo "..-:IDENTIFICANDOSE:-.."
        13.        echo Nombre de usuario:
        14.        read NAME
        15.        echo Nombre del host:
        16.        read HOST
        17.        echo Password
        18.        read PASS
        19.  
        20. #Función para crear bases de datos en mysql.
        21. function create {
        22.        echo "..-:CREAR UNA BASE DE DATOS NUEVA:-.."
        23.        echo Nombre de la base de datos:
        24.        read new_db
        25.        touch newbase.sql
        26.        date > easylog.sql
        27.        echo "CREATE DATABASE $new_db;" >> newbase.sql
        28.        echo "SHOW DATABASES;" >> newbase.sql
        29.        echo "quit" >> newbase.sql
        30.        cat newbase.sql >> easylog.sql
        31.        dialog --title "Crear Una Base De Datos Nueva" --yesno "¿Desea crear la nueva db?" 200 100;
        32.        if [ $? -eq 0 ]; then
        33.        mysql -t -h $HOST  -u $NAME -p $PASS < newbase.sql
        34.        rm newbase.sql
        35.        else
        36.        create
        37.        rm newbase.sql
        38.        fi
        39.  
        40. }
        41. #Función para borrar bases de datos en mysql
        42. function drop {
        43.        echo "..-:BORRAR BASE DE DATOS:-.."
        44.        echo "SHOW DATABASES;" > delbase.sql
        45.        mysql -t -h $HOST -u $NAME -p $PASS < delbase.sql
        46.        echo "Escriba el nombre de la base de datos que desea borrar:"
        47.        read del_db
        48.        echo "Esta seguro de querer borrar esta db '$del_db' [si/no]"
        49.        read respuesta
        50.        if [ $respuesta = si ]; then
        51.        echo "DROP DATABASE $del_db;" > delbase.sql
        52.        echo "SHOW DATABASES;" >> delbase.sql
        53.        mysql -t -h $HOST -u $NAME -p $PASS < delbase.sql
        54.        cat delbase.sql >> easylog.sql
        55.        rm delbase.sql
        56.        elif [ $respuesta = no ]; then
        57.        drop
        58.        else
        59.        exit
        60.        fi
        61.  
        62. }
        63. #Función para crear tablas en db de mysql
        64. function table {
        65.        echo "..-:CREAR NUEVA TABLA EN DB:-.."
        66.        echo "SHOW DATABASES;" > newtable.sql
        67.        mysql -t -h $HOST -u $NAME < newtable.sql
        68.        echo "Escriba el nombre de la base de datos en la que desea crear una tabla:"
        69.        read db_use
        70.        echo "USE $db_use;" > newtable.sql
        71.        mysql -t -h $HOST -u $NAME < newtable.sql
        72.        echo "Cambiando a.. '$db_use'"
        73.        echo "Escriba el nombre de la tabla que desea crear en la db '$db_use':"        read db_table
        74.        echo "CREATE TABLE $db_table;" > newtable.sql
        75.        mysql -t -h $HOST -u $NAME < newtable.sql
        76.        echo "Se creo la tabla '$db_table' en la db '$db_use'."
        77.        date > easylog.sql
        78.        cat newtable.sql >> easylog.sql
        79.        rm newtable.sql
        80.        }
        81.  
        82. #menú de opciones
        83. opcion="Crear_db Borrar_db Crear_Tabla Salir"
        84. select opt in $opcion; do
        85.        if [ "$opt" = "Crear_db" ]; then
        86.        touch easylog.sql
        87.        create
        88.        elif [ "$opt" = "Borrar_db" ]; then
        89.        touch delbase.sql
        90.        drop
        91.        elif [ "$opt" = "Crear_Tabla" ]; then
        92.        touch newtable.sql
        93.        table
        94.        elif [ "$opt" = "Salir" ]; then
        95.        echo GOOD BYE
        96.        exit
        97.        else
        98.        echo seleccione una opción correcta
        99.        fi

        Tengo algunas funciones mas para mysql echas en bash, si me da la vena las pondre por aqui.

            En línea



        2.6.0-r
        Visitante


                  Re:shell script
        « Respuesta #7 en: 11 Enero 2004, 06:58 »   

        un lapsus, no me habia dado cuenta que puse las mismas funciones que el script anterior.

        Os pongo este, que es un menu grafico que empece a hacer para mi script de mysql. Como el anterior tampoco esta terminado.

        Código:
        Código
        1. #!/bin/bash
        2. #bash script para la administracion de bases de datos mysql
        3. echo ".:EASYMySQL:. script para la administración de bases de datos MySQL"
        4. #source llama al archivo que contiene las funciones
        5. source functions
        6.  
        7. dialog --backtitle "EasyMySQL" --title "Login" --clear --ok-label "Aceptar"\
        8.       --inputmenu "Para poder usar EasyMySQL debe ingresar los datos de usuario y conexion" 20 50 10 \
        9. "Nombre de usuario:"    "$user" \
        10. "Nombre del host:"      "$host" \
        11. "Password:"             "$pass" \
        12.  
        13. #menú de opciones
        14. echo "[1] Crear Base De Datos"
        15. echo "[2] Borrar Base De Datos"
        16. echo "[3] Crear Tabla"
        17. echo "[4] Salir"
        18. echo
        19. read -p "Seleccione una opcion: " OPCION
        20. case $OPCION in
        21. 1) create;;
        22. 2) drop;;
        23. 3) table;;
        24. 4) exit;;
        25. esac

        « Última modificación: 11 Enero 2004, 09:44 por 2.6.1-rc »     En línea



        ..sR. aDiKtO..
        Colaborador

         Desconectado

        Mensajes: 1.455



        ..enseña lo que sabes, aprende lo que no..


                   Re:shell script
        « Respuesta #8 en: 20 Enero 2004, 09:46 »   

        Yo tambien quiero poner un pequeño script que hice hace un par de dias:
        Código:
        Código
        1. #!/bin/sh
        2. #
        3. ############################################################################
        4. # "adk.sh v0.1" hecho por el ..sR. aDiKtO.. <adikto@elhacker.net>
        5. #
        6. # Este script borra todas las lineas de todos los archivos
        7. # que esten en /var que contengan tu ip, conservando la fecha
        8. # de antes de la modificacion .
        9. #
        10. # Este script se distribuye segun la licencia GPL v.2 o posteriores y
        11. # no tiene garantias de ningun tipo. Puede obtener una copia de la
        12. # licencia GPL o ponerse en contacto con la Free Software
        13. # Foundation en http://www.gnu.org
        14. ############################################################################
        15. #
        16. # Variable que contiene tu ip
        17. IP="127.0.0.1"
        18.  
        19. ############################################################################
        20. # Funcion encargada de limpiar todos los logs
        21. ############################################################################
        22. function main()
        23. {
        24. mkdir -p /tmp/.adk &>/dev/null
        25. for i in `find /var 2>/dev/null`
        26. do
        27.  linea=$(cat $i 2>/dev/null | grep $IP )
        28.  if [ "$linea" != "" ]
        29.  then
        30.      ls -l $i > /tmp/.adk/fecha 2>/dev/null
        31.      aux=$(awk '{ print $6 $7 }' /tmp/.adk/fecha 2>/dev/null)
        32.      TIEMPO=$(echo $aux | tr "-:" "\000" 2>/dev/null)
        33.      sed "/$IP/d" $i > /tmp/.adk/datos 2>/dev/null
        34.      cat /tmp/.adk/datos > $i 2>/dev/null
        35.      touch -t $TIEMPO $i 2>/dev/null
        36.      echo -e "IP limpiada del archivo $i"
        37.  fi
        38. done
        39.  
        40. rm -rf /tmp/.adk &>/dev/null
        41. }
        42.  
        43. ############################################################################
        44. #Funcion principal
        45. ############################################################################
        46. clear
        47. echo -e "\n    \033[40m\033[1;37m  adk.sh v0.1  \033[0m\n"
        48. if [ $GROUPS != 0 ]
        49. then
        50.  echo -e "ERROR: Necesitas tener privilegios de root para poder ejecutar este script"
        51.  exit
        52. fi
        53. echo -e "\n Empecemos a borrar tu ip de los log de este sistema.\n"
        54. main
        55. echo -e "\n Ordenador Limpiado Completamente"
        SALU2


        ---------------------------------------------------------------------------------------------------------------


        Título: Re: shell script
        Publicado por: likhary en 20 Noviembre 2008, 16:37 pm
        Que es un menu grafico que empece a hacer para mi script de mysql. Como el anterior tampoco esta terminado.

        Código
        1. #Función para crear bases de datos en mysql.
        2. function create {
        3.        echo "..-:CREAR UNA BASE DE DATOS NUEVA:-.."
        4.        echo Nombre de la base de datos:
        5.        read new_db
        6.        touch newbase.sql
        7.        date > easylog.sql


        Título: Re: shell script
        Publicado por: iea0 en 9 Mayo 2009, 18:02 pm
        Hola tengo una duda dudosa, es basica, yo crreo,creo que me podeis ayudar he leido lo que aqui se enseña nuy bueno, mi duda es como pasar variables de un script a otro por ejemplo:

        1.sh
        Código
        1. #!/bin/bash
        2. echo ejemplo declaracion de una variable
        3. mac$=33:44
        4. export mac
        5. exit

        2.sh
        Código
        1. #!/bin/bash
        2. echo ejemplo de recuperacion de una variable
        3. echo  lo que hay en memoria: $mac
        4. maccanger $mac $iface
        Esto esta bien?, yo realmente lo que queria es, que estuviese en un txt y no en un sh, me refiero a la declaracion de variables.. se complicaria?, se puede, esta bien..?mi ejemplo, de estar bien siento que moleste a 2 compañeros x pv...

        Me explico mejor, quisiera que se lean ciertas variables de un fichero, y se pasen al .sh, para luego usarlas alli.


        Título: Re: shell script
        Publicado por: iea0 en 10 Mayo 2009, 10:07 am
        Me han ayudado y ya se como se hace:CITO, para que todo el mundo le pueda ayudar...
        Imaginate que tengo un archivo de texto llamado archivo.txt con la siguiente Info en 1 sola linea:

        ls  cama  mesa  silla

        Para abrir esto y leerlo desde bash y ejecutarlo haria algo tipo :

        variable=$(gawk '{print $1}' archivo.txt)
        exec $variable -l

        digo print $1 porke solo me interesa la palabra "ls" del archivo.txt asi ejecuto ls -l
        La duda que me surge es (esta duda es pura curiosidad), si en vez de 1 renglon con palabras tengo dos el sh se estropea, como hago para declarar cada variable de cada renglon columra?, con iteradores y do?

        La duda que si me hace falta, imaginar tengo un sh en una consola grafica dentro de las X, como hago "ordeno", para que una parte de las sh se ejecute en otro terminal, se que es con xterm un ejemplito gracias, mandar una funcion a otro terminal y que sh princpal continue...y si de paso me deciis como lepaso las variables declaradas a esa terminal pues ya estai completo. gracias muchas muchas gracias


        Título: Re: shell script
        Publicado por: iea0 en 10 Mayo 2009, 10:15 am
        Un ejemplo tonto de lo q se puede hacer

        Código
        1. #! /bin/bash
        2. wifi=$(gawk '{print $4}' /root/Desktop/configura.txt)   #!con esto llamamos la cuarta variable del fichero en esa ruta que se llamaconfigu..
        3.  
        4. ifconfig $wifi 192.168.1.148 broadcast 192.168.1.255 netmask 255.255.255.0
        5.  
        6. route add default gateway 192.168.1.1 $wifi
        7.  
        8. echo nameserver 80.58.61.250 > /etc/resolv.conf
        9.  
        10. echo nameserver 80.58.61.254 >> /etc/resolv.conf
        11.  
        y en configura.txt

        1tara 2variable variabe ath33

        Añado cuidado con el nombre de las variables xp pueden coincidir con comandos internos en este tonto ej me ha pasado 2veces, lan y iface estan usadas x algun programa o no se; jodia todo el sh...


        Título: Re: shell script
        Publicado por: [u]nsigned en 14 Diciembre 2009, 19:10 pm
        Listar solo directorios con ls:

        Código
        1. ls -d */
        Ejemplo:
        Código
        1. faku@faku-desktop:/$ ls -d */
        2. bin/  boot/  cdrom/  dev/  etc/  home/  lib/  lost+found/  media/  mnt/  opt/  proc/  root/  sbin/  selinux/  srv/  sys/  tmp/  usr/  var/

        Código
        1. ls -l | grep ^d
        Ejemplo:
        Código
        1. faku@faku-desktop:/$ ls -l | grep ^d
        2. drwxr-xr-x   2 root root  4096 2009-12-13 17:45 bin
        3. drwxr-xr-x   3 root root  4096 2009-12-13 17:59 boot
        4. drwxr-xr-x  16 root root  3800 2009-12-14 14:11 dev
        5. drwxr-xr-x 138 root root 12288 2009-12-14 14:11 etc
        6. drwxr-xr-x   3 root root  4096 2009-12-13 17:26 home
        7. drwxr-xr-x  18 root root 12288 2009-12-13 18:45 lib
        8. drwx------   2 root root 16384 2009-12-13 17:18 lost+found
        9. drwxr-xr-x   5 root root  4096 2009-12-14 14:11 media
        10. drwxr-xr-x   2 root root  4096 2009-10-19 21:04 mnt
        11. drwxr-xr-x   2 root root  4096 2009-10-28 17:55 opt
        12. dr-xr-xr-x 179 root root     0 2009-12-14 11:11 proc
        13. drwx------  16 root root  4096 2009-12-13 20:02 root
        14. drwxr-xr-x   2 root root  4096 2009-12-13 17:45 sbin
        15. drwxr-xr-x   2 root root  4096 2009-10-19 20:05 selinux
        16. drwxr-xr-x   2 root root  4096 2009-10-28 17:55 srv
        17. drwxr-xr-x  12 root root     0 2009-12-14 11:11 sys
        18. drwxrwxrwt  15 root root  4096 2009-12-14 15:05 tmp
        19. drwxr-xr-x  11 root root  4096 2009-12-13 17:58 usr
        20. drwxr-xr-x  15 root root  4096 2009-10-28 18:02 var

        Listar solo archivos con ls

        Código
        1. ls -l | grep -v ^d
        Ejemplo:
        Código
        1. faku@faku-desktop:/$ ls -l | grep -v ^d
        2. total 92
        3. lrwxrwxrwx   1 root root    11 2009-12-13 17:18 cdrom -> media/cdrom
        4. lrwxrwxrwx   1 root root    33 2009-12-13 17:44 initrd.img -> boot/initrd.img-2.6.31-14-generic
        5. lrwxrwxrwx   1 root root    30 2009-12-13 17:44 vmlinuz -> boot/vmlinuz-2.6.31-14-generi

        Saludos


        Título: Re: shell script
        Publicado por: leogtz en 18 Diciembre 2009, 02:09 am
        @m3g@ h@x0R

        Código:
        leo@lein:~$ ls -F
        amsn_received/  Documentos/  dwhelper/    flexdock/   Imágenes/  Plantillas/  Videos/
        cpan/           Downloads/   Escritorio/  FrostWire/  Música/    Público/     workspace/
        leo@lein:~$ ls -F1
        amsn_received/
        cpan/
        Documentos/
        Downloads/
        dwhelper/
        Escritorio/
        flexdock/
        FrostWire/
        Imágenes/
        Música/
        Plantillas/
        Público/
        Videos/
        workspace/
        leo@lein:~$


        Título: Re: shell script
        Publicado por: [u]nsigned en 18 Diciembre 2009, 03:54 am
        Vale, esa no la conocia  ;D

        Existe alguna algun comando para listar solo los archivos? Yo de momento uso:

        Código
        1. ls -l | grep -v ^d

        Saludos


        Título: Re: shell script
        Publicado por: leogtz en 18 Diciembre 2009, 04:08 am
        Código:
        leo@lein:/$ ls -DF1 | grep -v "/$"
        cdrom@
        initrd.img@
        initrd.img.old@
        vmlinuz@
        vmlinuz.old@
        leo@lein:/$


        Título: Re: shell script
        Publicado por: b10s_0v3rr1d3 en 22 Diciembre 2009, 00:42 am
        Código
        1. #!/bin/bash
        2.  
        3. # script para subir un backup por ftp (el usuario 1 por ejemplo)
        4.  
        5. # directorio donde se pondra el backup y el directorio del cual se hace el backup
        6. DIRBKP=/backup/
        7. DIR=/home/user1/
        8.  
        9. # server ftp + user y pass
        10.  
        11. UP=ftp.ejemplo.ko
        12. USER=testing
        13. PASS=testing12345
        14.  
        15. # comprobacion de la existencia del directorio donde se guardara el backup
        16. COMP=`find / -wholename "$DIRBKP"`
        17.  
        18. # creamos dicho directorio si no existe
        19.  
        20. if [ "$COM" != "$DIRBKP" ] ; then
        21.   mkdir -p $DIRBKP
        22. fi
        23.  
        24. # hacemos el archivo de backup
        25.  
        26. cd $DIRBKP
        27. tar czvf nombre_ejemplo.tgz $DIR
        28.  
        29. # conectamos con el ftp y subimos el fichero
        30.  
        31. ftp -inv << $IP
        32. open $IP
        33. user $USER $PASS
        34. binary
        35. cd /backup
        36. put nombre_ejemplo.tgz
        37. quit
        38.  
        39.  

        un ejemplo de un sistema para subir un backup a un server ftp
        nos leemos


        Título: Re: shell script
        Publicado por: [u]nsigned en 22 Diciembre 2009, 17:07 pm
        Código:
        #!/bin/bash

        # script para subir un backup por ftp (el usuario 1 por ejemplo)

        # directorio donde se pondra el backup y el directorio del cual se hace el backup
        DIRBKP=/backup/
        DIR=/home/user1/

        # server ftp + user y pass

        UP=ftp.ejemplo.ko
        USER=testing
        PASS=testing12345

        # comprobacion de la existencia del directorio donde se guardara el backup
        COMP=`find / -wholename "$DIRBKP"`

        # creamos dicho directorio si no existe

        if [ "$COM" != "$DIRBKP" ] ; then
           mkdir -p $DIRBKP
        fi

        # hacemos el archivo de backup

        cd $DIRBKP
        tar czvf nombre_ejemplo.tgz $DIR

        # conectamos con el ftp y subimos el fichero

        ftp -inv << $IP
        open $IP
        user $USER $PASS
        binary
        cd /backup
        put nombre_ejemplo.tgz
        quit


        un ejemplo de un sistema para subir un backup a un server ftp
        nos leemos

        En vez de:
        Código
        1. DIR=/home/user1/
        2. #Podrias hacer:
        3. DIR=$HOME

        O directamente usar $HOME..Buen Aporte  ;D

        Saludos


        Título: Re: shell script
        Publicado por: leogtz en 22 Diciembre 2009, 19:40 pm
        O directamente usar la variable $HOME; no le veo el caso de ahorrarse una letra creando una variable local.


        Título: Re: shell script
        Publicado por: b10s_0v3rr1d3 en 25 Diciembre 2009, 22:03 pm

        como bien decis se puede utilizar la variable del sistema tratandose del directorio home, pero el script original era para un sistema de monitorizacion (nagios) en el cual se indicaba el directorio donde se guardaban las configuraciones y los distintos logs que generaba, peticion de la empresa donde estuve haciendo practicas y que al final no llego a implementarse (se mudaron a otro sistema xD).
        lo modifique con los users para mostrar un ejemplo mas de como se podia utilizar para darle otros usos distintos del original (no pense en las var. del sistema, detalle a tener en cuenta la proxima xDD).


        Título: Re: shell script
        Publicado por: leogtz en 27 Febrero 2010, 19:56 pm
        Para un exámen de Quimica, en el que tenía que aprenderme 104 elementos, nombre, simbolo, número atómico, etc, me sirvió este script y el siguiente archivo de texto:

        Código
        1. #!/usr/bin/bash
        2. # Tabla interactiva.
        3. while true
        4. do
        5. elemento=$[$RANDOM % 104 + 1]
        6. read -p "$elemento : " simbolo
        7. until [ $simbolo ]
        8. do
        9. read -p "$elemento : " simbolo
        10. done
        11. cat ~/Escritorio/elementos.txt | awk '{print $1 "->|" $2 "|" $3 "|"}' | grep -i ".*|$simbolo|$elemento|$" || {
        12. echo -e  "\n\aError.\n$elemento pertenece a : "
        13. cat ~/Escritorio/elementos.txt | awk '{print $1 "->|" $2 "|" $3 "|"}' | grep -i "|$elemento|$"
        14. echo -e "\n";
        15. }
        16. done
        17. exit 0

        elementos.txt:

        Código:
        Actinio Ac 89
        Aluminio Al 13
        Americio Am 95
        Antimonio Sb 51
        Argón Ar 18
        Arsénico As 33
        Astato At 85
        Azufre S 16
        Bario Ba 56
        Berkelio Bk 97
        Berilio Be 4
        Bismuto Bi 83
        Bohrio Bh 107
        Boro B 5
        Bromo Br 35
        Cadmio Cd 48
        Calcio Ca 20
        Californio Cf 98
        Carbono C 6
        Cerio Ce 58
        Cesio Cs 55
        Cloro Cl 17
        Cobalto Co 27
        Cobre Cu 29
        Cromo Cr 24
        Curio Cm 96
        Darwanzio Da 112
        Disprosio Dy 66
        Dubnio Db 105
        Efelio El 115
        Einstenio Es 99
        Erbio Er 68
        Erristeneo Eo 114
        Escandio Sc 21
        Estaño Sn 50
        Estroncio Sr 38
        Europio Eu 63
        Fermio Fm 100
        Flúor F 9
        Fósforo P 15
        Francio Fr 87
        Gadolinio Gd 64
        Galio Ga 31
        Germanio Ge 32
        Hafnio Hf 72
        Hassio Hs 108
        Helio He 2
        Hidrógeno H 1
        Hierro Fe 26
        Holmio Ho 67
        Indio In 49
        Iridio Ir 77
        Iterbio Yb 70
        Itrio Y 39
        Kryptón Kr 36
        Lantano La 57
        Lawrencio Lr 103
        Litio Li 3
        Lutecio Lu 71
        Madveded Mv 110
        Magnesio Mg 12
        Manganeso Mn 25
        Meitnerio Mt 109
        Mendelevio Md 101
        Mercurio Hg 80
        Molibdeno Mo 42
        Nectartén Nc 116
        Neodimio Nd 60
        Neón Ne 10
        Neptunio Np 93
        Niobio Nb 41
        Níquel Ni 28
        Nitrógeno N 7
        Nobelio No 102
        Oberón On 118
        Oro Au 79
        Osmio Os 76
        Oxígeno O 8
        Paladio Pd 46
        Plata Ag 47
        Platino Pt 78
        Plomo Pb 82
        Plutirio Pl 111
        Plutonio Pu 94
        Polonio Po 84
        Potasio K 19
        Praseodimio Pr 59
        Prometio Pm 61
        Protactinio Pa 91
        Radio Ra 88
        Radón Rn 86
        Renio Re 75
        Rodio Rh 45
        Rubidio Rb 37
        Rutenio Ru 44
        Rutherfordio Rf 104
        Samario Sm 62
        Seaborgio Sg 106
        Selenio Se 34
        Silicio Si 14
        Sodio Na 11
        Talio Tl 81
        Tántalo Ta 73
        Tecnecio Tc 43
        Teluro Te 52
        Terbio Tb 65
        Titanio Ti 22
        Torio Th 90
        Tulio Tm 69
        Tungsteno W 74
        Tusfrano Tf 113
        Uranio U 92
        Vanadio V 23
        Xenón Xe 54
        Yodo I 53
        Zinc Zn 30
        Zirconio Zr 40

        Código:
        leo@lein:~/Escritorio$ bash quimic.sh 
        3 : li
        Litio->|Li|3|
        2 : he
        Helio->|He|2|
        9 : f
        Flúor->|F|9|
        1 : h
        Hidrógeno->|H|1|
        4 : c

        Error.
        4 pertenece a :
        Berilio->|Be|4|


        3 : li
        Litio->|Li|3|
        5 :
        leo@lein:~/Escritorio$


        Título: Re: shell script
        Publicado por: leogtz en 4 Marzo 2010, 06:18 am
        Subir una imagen a imageshack:
        Código
        1.  
        2. #!/usr/bin/bash
        3. if [ $# -lt 1 ]
        4. then
        5. echo -e "Error, pocos argumentos\n\n$0 imagen";
        6. exit 0
        7. fi
        8. curl -H Expect: -F fileupload="@$1" -F xml=yes -# "http://www.imageshack.us/index.php" | grep -i image_link | cut -f 2 -d '>' | cut -f1 -d '<' | grep -o "http.*" | parcellite

        La parte de curl no es mia, lo saqué de commandlinefu.com.

        Saludos.


        Título: Re: shell script
        Publicado por: iago99 en 9 Julio 2011, 22:32 pm
        ola!
        me gustaria acer un script para un juego, asi poder subir antes de nivel y todo eso.
        estuve buscando y no me aparecio nada de un programa que grava los movimientos y clicks del raton, es lo que necesito, vosotros sabeis algo?
        gracias


        Título: Re: shell script
        Publicado por: displayorder en 30 Julio 2013, 03:15 am
        cdrecord --help &> archivo.txt

              La ayuda de cdrecord ( --help ) va a parar a archivo.txt.

            * Redireccionamiento de entrada ( '<' ), la entrada de un programa es un archivo. Por ejemplo:

        Código:

        grep adikto < archivo.txt

              La orden 'grep aditko' toma como entrada, el contenido de 'archivo.txt', (vease la similitud con las tuberias). Muestra las lineas k contiene archivo.txt con la palabra 'adikto'.