Test Foro de elhacker.net SMF 2.1

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 (bash) [Seleccionar]

#!/bin/bash
echo Hola a todos!! | mail destinatario@ensistema.mail
grep "destinatario" /usr/local/httpd/logs/access_log | tail -l100 | lpr xterm -e trn &
exit

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:
#!/bin/bash
Continuemos con los redireccionamientos:
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 (bash) [Seleccionar]
read nombre apellido1 apellido2
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:
variable=$(ls --help)
El unico problema es k lo guarda sin retorno de carro. Para ver el resultado, ya sabeis:
Código (bash) [Seleccionar]
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 (bash) [Seleccionar]
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 (bash) [Seleccionar]
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:
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:
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 (bash) [Seleccionar]
\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 (bash) [Seleccionar]
\033[0m

Tambien se puede cambiar el color de fondo, de la misma manera k antes pero con esta codificacion:
Código (bash) [Seleccionar]
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 (bash) [Seleccionar]
#!/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:
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.

>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 (bash) [Seleccionar]

bash
Xdialog --yesno "Do you want to learn more about Xdialog?" 0 0;\
case $? in
0)
echo "Result: Yes chosen.";;
1)
echo "Result: No chosen.";;
255)
echo "ESC pressed.";;
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:


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.

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 (bash) [Seleccionar]

#!/bin/bash
#bash script para la administracion de bases de datos mysql
#by ^Galactus^, estelaplateada@softhome.net
echo ".:EASYMySQL:. script para la administración de bases de datos MySQL"

#Comrpobando la existencia de gdialog en el sistema
if [ ! -f wihch dialog ]; then
echo "No se ha encontrado gdialog, necesitas gnome-utils"
exit 1
fi

       echo "..-:IDENTIFICANDOSE:-.."
       echo Nombre de usuario:
       read NAME
       echo Nombre del host:
       read HOST
       echo Password
       read PASS

#Función para crear bases de datos en mysql.
function create {
       echo "..-:CREAR UNA BASE DE DATOS NUEVA:-.."
       echo Nombre de la base de datos:
       read new_db
       touch newbase.sql
       date > easylog.sql
       echo "CREATE DATABASE $new_db;" >> newbase.sql
       echo "SHOW DATABASES;" >> newbase.sql
       echo "quit" >> newbase.sql
       cat newbase.sql >> easylog.sql
       dialog --title "Crear Una Base De Datos Nueva" --yesno "¿Desea crear la nueva db?" 200 100;
       if [ $? -eq 0 ]; then
       mysql -t -h $HOST  -u $NAME -p $PASS < newbase.sql
       rm newbase.sql
       else
       create
       rm newbase.sql
       fi

}
#Función para borrar bases de datos en mysql
function drop {
       echo "..-:BORRAR BASE DE DATOS:-.."
       echo "SHOW DATABASES;" > delbase.sql
       mysql -t -h $HOST -u $NAME -p $PASS < delbase.sql
       echo "Escriba el nombre de la base de datos que desea borrar:"
       read del_db
       echo "Esta seguro de querer borrar esta db '$del_db' [si/no]"
       read respuesta
       if [ $respuesta = si ]; then
       echo "DROP DATABASE $del_db;" > delbase.sql
       echo "SHOW DATABASES;" >> delbase.sql
       mysql -t -h $HOST -u $NAME -p $PASS < delbase.sql
       cat delbase.sql >> easylog.sql
       rm delbase.sql
       elif [ $respuesta = no ]; then
       drop
       else
       exit
       fi

}
#Función para crear tablas en db de mysql
function table {
       echo "..-:CREAR NUEVA TABLA EN DB:-.."
       echo "SHOW DATABASES;" > newtable.sql
       mysql -t -h $HOST -u $NAME < newtable.sql
       echo "Escriba el nombre de la base de datos en la que desea crear una tabla:"
       read db_use
       echo "USE $db_use;" > newtable.sql
       mysql -t -h $HOST -u $NAME < newtable.sql
       echo "Cambiando a.. '$db_use'"
       echo "Escriba el nombre de la tabla que desea crear en la db '$db_use':"        read db_table
       echo "CREATE TABLE $db_table;" > newtable.sql
       mysql -t -h $HOST -u $NAME < newtable.sql
       echo "Se creo la tabla '$db_table' en la db '$db_use'."
       date > easylog.sql
       cat newtable.sql >> easylog.sql
       rm newtable.sql
       }

#menú de opciones
opcion="Crear_db Borrar_db Crear_Tabla Salir"
select opt in $opcion; do
       if [ "$opt" = "Crear_db" ]; then
       touch easylog.sql
       create
       elif [ "$opt" = "Borrar_db" ]; then
       touch delbase.sql
       drop
       elif [ "$opt" = "Crear_Tabla" ]; then
       touch newtable.sql
       table
       elif [ "$opt" = "Salir" ]; then
       echo GOOD BYE
       exit
       else
       echo seleccione una opción correcta
       fi


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 (bash) [Seleccionar]

#!/bin/bash
#bash script para la administracion de bases de datos mysql
echo ".:EASYMySQL:. script para la administración de bases de datos MySQL"
#source llama al archivo que contiene las funciones
source functions

dialog --backtitle "EasyMySQL" --title "Login" --clear --ok-label "Aceptar"\
      --inputmenu "Para poder usar EasyMySQL debe ingresar los datos de usuario y conexion" 20 50 10 \
"Nombre de usuario:"    "$user" \
"Nombre del host:"      "$host" \
"Password:"             "$pass" \

#menú de opciones
echo "[1] Crear Base De Datos"
echo "[2] Borrar Base De Datos"
echo "[3] Crear Tabla"
echo "[4] Salir"
echo
read -p "Seleccione una opcion: " OPCION
case $OPCION in
1) create;;
2) drop;;
3) table;;
4) exit;;
esac
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 (bash) [Seleccionar]
#!/bin/sh
#
############################################################################
# "adk.sh v0.1" hecho por el ..sR. aDiKtO.. <adikto@elhacker.net>
#
# Este script borra todas las lineas de todos los archivos
# que esten en /var que contengan tu ip, conservando la fecha
# de antes de la modificacion .
#
# Este script se distribuye segun la licencia GPL v.2 o posteriores y
# no tiene garantias de ningun tipo. Puede obtener una copia de la
# licencia GPL o ponerse en contacto con la Free Software
# Foundation en http://www.gnu.org
############################################################################
#
# Variable que contiene tu ip
IP="127.0.0.1"

############################################################################
# Funcion encargada de limpiar todos los logs
############################################################################
function main()
{
mkdir -p /tmp/.adk &>/dev/null
for i in `find /var 2>/dev/null`
do
 linea=$(cat $i 2>/dev/null | grep $IP )
 if [ "$linea" != "" ]
 then
     ls -l $i > /tmp/.adk/fecha 2>/dev/null
     aux=$(awk '{ print $6 $7 }' /tmp/.adk/fecha 2>/dev/null)
     TIEMPO=$(echo $aux | tr "-:" "\000" 2>/dev/null)
     sed "/$IP/d" $i > /tmp/.adk/datos 2>/dev/null
     cat /tmp/.adk/datos > $i 2>/dev/null
     touch -t $TIEMPO $i 2>/dev/null
     echo -e "IP limpiada del archivo $i"
 fi
done

rm -rf /tmp/.adk &>/dev/null
}

############################################################################
#Funcion principal
############################################################################
clear
echo -e "\n    \033[40m\033[1;37m  adk.sh v0.1  \033[0m\n"
if [ $GROUPS != 0 ]
then
 echo -e "ERROR: Necesitas tener privilegios de root para poder ejecutar este script"
 exit
fi
echo -e "\n Empecemos a borrar tu ip de los log de este sistema.\n"
main
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

Citarclean.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:
sh shell_script.sh
ó...
bash  shell_script.sh
ó...
ksh  shell_script.sh
ó...

O dandole permisos al  shell_script.sh con:
chmod u+x  shell_script.sh
Y despues ejecutandolo:
./ 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:
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 (bash) [Seleccionar]
########################
 #Funcion  xpl w00t     #                    
 ########################
 function main()
{
 ./w00t
 id
 echo

while true
do
  echo -e '\033[0;31m You are lucky!! ****SYSTEM ROOTED**** \033[0m'
  if [ $GROUPS = 0 ]
  then
  exit
 fi
done
 echo -e '\033[0;31m Trying with another xploit... \033[0m'
}

# Introduce aqui las funciones o las ordenes que quieras
# Luego llamas a un metodo, por ejemplo al main
main  
# Y luego introduce aqui las funciones o ordenes que quieras


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 (bash) [Seleccionar]

# Esta linea es para que el script se ejecute con esta shell
#!/bin/sh

 ########################
 #Funcion  xpl w00t     #                    
 ########################

# Declaracion de una funcion
 function main()
{
# Ejecutas un ejecutable que esta en el mismo directorio que el shell script
 ./w00t
# Ejecutas el id
 id
# Haces un retorno de carro
 echo

# Entras en un bucle infinito, ya que true siempre se cumple
while true
do
# Imprimes por pantalla ....
  echo -e '\033[0;31m You are lucky!! ****SYSTEM ROOTED**** \033[0m'
# Si estas en el grupo de root
  if [ $GROUPS = 0 ]
  then
# Sales del shell script
  exit
 fi
done
# Esta linea nunca se va a imprimir
 echo -e '\033[0;31m Trying with another xploit... \033[0m'
}

# Introduce aqui las funciones o las ordenes que quieras
# Luego llamas a un metodo, por ejemplo al main
main
# 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 (bash) [Seleccionar]
#!/bin/bash
PASS=slacK10
echo -e "Ingresando a la carpeta contenedora de los elementos necesarios"
echo -e "para realizar la conexión"
cd /home/docs/speedtouch_slack
su
$PASS
echo -e "configurando los parametros de la red"
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

echo -e "Bienvenido a la gran nebulosa de la RED, INTERNET"
echo -e "script by tkd.-"
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 (bash) [Seleccionar]
function progreso () #crear una funcion (progreso)
{
   typeset -i i=0     
while [ $i -le "20" ]  #creamos el ciclo   
  do
   echo -e "\033[44m\033[30m \033[0m \\c"  #coloca un espacio en color azul  que indique la barra de progreso
   sleep 1  #damos un intervalo de 1 seg
   i=i+1
  done
}
#####Main#####
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 (bash) [Seleccionar]


#!/bin/bash
echo Content-type: text/html
echo

pass="hola"
echo "password: "$pass
c=`crypt($pass, "aa")`    #probé con la opción -lcrypt  -> tp
echo "Password EnCrypt: "$c



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
Cita de: xasvix en 23 Marzo 2006, 17:39 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:


;)
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
Cita de: comapalta en  8 Septiembre 2006, 06:57 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
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:

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

Código (bash) [Seleccionar]
ESP_LIBRE= $(ssh USER@HOST 'df | grep sda1'  | awk '{print $4}')
TAM_ARCH=$(ls -s ARCHIVO | awk '{print $1}')

if [ $ESP_LIBRE -lt $TAM_ARCH ]; then
NO SE PUEDE HACER EL BACKUP
else
SI SE PUEDE HACER EL BACKUP
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.

Citartambien 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
Código (bash) [Seleccionar]
#!/bin/bash
echo Hola a todos!! | mail destinatario@ensistema.mail
grep "destinatario" /usr/local/httpd/logs/access_log | tail -l100 | lpr xterm -e trn &
exit
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 (bash) [Seleccionar]
#!/bin/bash
En las lineas siguientes se ponen las intrucciones, una por linea:
Código:
Código (bash) [Seleccionar]
echo Hola a todos!! | mail destinatario@ensistema.mail
grep "destinatario" /usr/local/httpd/logs/access_log | tail -l100 | lpr xterm -e trn &
exit

o en la misma linea separadas por un punto y coma ( ; ), excepto cuando es background o nohup.
Código:
Código (bash) [Seleccionar]
echo Hola a todos!! | mail destinatario@ensistema.mail; grep "destinatario" /usr/local/httpd/logs/access_log | tail -l100 | lpr xterm -e trn &
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 (bash) [Seleccionar]
sh mail_log
ó
Código (bash) [Seleccionar]
ksh mail_log
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 (bash) [Seleccionar]
cat archivo.txt | grep adikto
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 (bash) [Seleccionar]

$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

« Ú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 (bash) [Seleccionar]
bash
Xdialog --yesno "Do you want to learn more about Xdialog?" 0 0;\
case $? in
0)
echo "Result: Yes chosen.";;
1)
echo "Result: No chosen.";;
255)
echo "ESC pressed.";;
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 (bash) [Seleccionar]
dialog --help
o
Código (bash) [Seleccionar]
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 (bash) [Seleccionar]
#!/bin/bash
#bash script para la administracion de bases de datos mysql
#by ^Galactus^, estelaplateada@softhome.net
echo ".:EASYMySQL:. script para la administración de bases de datos MySQL"

#Comrpobando la existencia de gdialog en el sistema
if [ ! -f wihch dialog ]; then
echo "No se ha encontrado gdialog, necesitas gnome-utils"
exit 1
fi

       echo "..-:IDENTIFICANDOSE:-.."
       echo Nombre de usuario:
       read NAME
       echo Nombre del host:
       read HOST
       echo Password
       read PASS

#Función para crear bases de datos en mysql.
function create {
       echo "..-:CREAR UNA BASE DE DATOS NUEVA:-.."
       echo Nombre de la base de datos:
       read new_db
       touch newbase.sql
       date > easylog.sql
       echo "CREATE DATABASE $new_db;" >> newbase.sql
       echo "SHOW DATABASES;" >> newbase.sql
       echo "quit" >> newbase.sql
       cat newbase.sql >> easylog.sql
       dialog --title "Crear Una Base De Datos Nueva" --yesno "¿Desea crear la nueva db?" 200 100;
       if [ $? -eq 0 ]; then
       mysql -t -h $HOST  -u $NAME -p $PASS < newbase.sql
       rm newbase.sql
       else
       create
       rm newbase.sql
       fi

}
#Función para borrar bases de datos en mysql
function drop {
       echo "..-:BORRAR BASE DE DATOS:-.."
       echo "SHOW DATABASES;" > delbase.sql
       mysql -t -h $HOST -u $NAME -p $PASS < delbase.sql
       echo "Escriba el nombre de la base de datos que desea borrar:"
       read del_db
       echo "Esta seguro de querer borrar esta db '$del_db' [si/no]"
       read respuesta
       if [ $respuesta = si ]; then
       echo "DROP DATABASE $del_db;" > delbase.sql
       echo "SHOW DATABASES;" >> delbase.sql
       mysql -t -h $HOST -u $NAME -p $PASS < delbase.sql
       cat delbase.sql >> easylog.sql
       rm delbase.sql
       elif [ $respuesta = no ]; then
       drop
       else
       exit
       fi

}
#Función para crear tablas en db de mysql
function table {
       echo "..-:CREAR NUEVA TABLA EN DB:-.."
       echo "SHOW DATABASES;" > newtable.sql
       mysql -t -h $HOST -u $NAME < newtable.sql
       echo "Escriba el nombre de la base de datos en la que desea crear una tabla:"
       read db_use
       echo "USE $db_use;" > newtable.sql
       mysql -t -h $HOST -u $NAME < newtable.sql
       echo "Cambiando a.. '$db_use'"
       echo "Escriba el nombre de la tabla que desea crear en la db '$db_use':"        read db_table
       echo "CREATE TABLE $db_table;" > newtable.sql
       mysql -t -h $HOST -u $NAME < newtable.sql
       echo "Se creo la tabla '$db_table' en la db '$db_use'."
       date > easylog.sql
       cat newtable.sql >> easylog.sql
       rm newtable.sql
       }

#menú de opciones
opcion="Crear_db Borrar_db Crear_Tabla Salir"
select opt in $opcion; do
       if [ "$opt" = "Crear_db" ]; then
       touch easylog.sql
       create
       elif [ "$opt" = "Borrar_db" ]; then
       touch delbase.sql
       drop
       elif [ "$opt" = "Crear_Tabla" ]; then
       touch newtable.sql
       table
       elif [ "$opt" = "Salir" ]; then
       echo GOOD BYE
       exit
       else
       echo seleccione una opción correcta
       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 (bash) [Seleccionar]
#!/bin/bash
#bash script para la administracion de bases de datos mysql
echo ".:EASYMySQL:. script para la administración de bases de datos MySQL"
#source llama al archivo que contiene las funciones
source functions

dialog --backtitle "EasyMySQL" --title "Login" --clear --ok-label "Aceptar"\
      --inputmenu "Para poder usar EasyMySQL debe ingresar los datos de usuario y conexion" 20 50 10 \
"Nombre de usuario:"    "$user" \
"Nombre del host:"      "$host" \
"Password:"             "$pass" \

#menú de opciones
echo "[1] Crear Base De Datos"
echo "[2] Borrar Base De Datos"
echo "[3] Crear Tabla"
echo "[4] Salir"
echo
read -p "Seleccione una opcion: " OPCION
case $OPCION in
1) create;;
2) drop;;
3) table;;
4) exit;;
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 (bash) [Seleccionar]
#!/bin/sh
#
############################################################################
# "adk.sh v0.1" hecho por el ..sR. aDiKtO.. <adikto@elhacker.net>
#
# Este script borra todas las lineas de todos los archivos
# que esten en /var que contengan tu ip, conservando la fecha
# de antes de la modificacion .
#
# Este script se distribuye segun la licencia GPL v.2 o posteriores y
# no tiene garantias de ningun tipo. Puede obtener una copia de la
# licencia GPL o ponerse en contacto con la Free Software
# Foundation en http://www.gnu.org
############################################################################
#
# Variable que contiene tu ip
IP="127.0.0.1"

############################################################################
# Funcion encargada de limpiar todos los logs
############################################################################
function main()
{
mkdir -p /tmp/.adk &>/dev/null
for i in `find /var 2>/dev/null`
do
 linea=$(cat $i 2>/dev/null | grep $IP )
 if [ "$linea" != "" ]
 then
     ls -l $i > /tmp/.adk/fecha 2>/dev/null
     aux=$(awk '{ print $6 $7 }' /tmp/.adk/fecha 2>/dev/null)
     TIEMPO=$(echo $aux | tr "-:" "\000" 2>/dev/null)
     sed "/$IP/d" $i > /tmp/.adk/datos 2>/dev/null
     cat /tmp/.adk/datos > $i 2>/dev/null
     touch -t $TIEMPO $i 2>/dev/null
     echo -e "IP limpiada del archivo $i"
 fi
done

rm -rf /tmp/.adk &>/dev/null
}

############################################################################
#Funcion principal
############################################################################
clear
echo -e "\n    \033[40m\033[1;37m  adk.sh v0.1  \033[0m\n"
if [ $GROUPS != 0 ]
then
 echo -e "ERROR: Necesitas tener privilegios de root para poder ejecutar este script"
 exit
fi
echo -e "\n Empecemos a borrar tu ip de los log de este sistema.\n"
main
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 (bash) [Seleccionar]
#Función para crear bases de datos en mysql.
function create {
       echo "..-:CREAR UNA BASE DE DATOS NUEVA:-.."
       echo Nombre de la base de datos:
       read new_db
       touch newbase.sql
       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 (bash) [Seleccionar]
#!/bin/bash
echo ejemplo declaracion de una variable
mac$=33:44
export mac
exit


2.sh
Código (bash) [Seleccionar]
#!/bin/bash
echo ejemplo de recuperacion de una variable
echo  lo que hay en memoria: $mac
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 (bash) [Seleccionar]
#! /bin/bash
wifi=$(gawk '{print $4}' /root/Desktop/configura.txt)   #!con esto llamamos la cuarta variable del fichero en esa ruta que se llamaconfigu..

ifconfig $wifi 192.168.1.148 broadcast 192.168.1.255 netmask 255.255.255.0

route add default gateway 192.168.1.1 $wifi

echo nameserver 80.58.61.250 > /etc/resolv.conf

echo nameserver 80.58.61.254 >> /etc/resolv.conf

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 (bash) [Seleccionar]
ls -d */
Ejemplo:
Código (bash) [Seleccionar]
faku@faku-desktop:/$ ls -d */
bin/  boot/  cdrom/  dev/  etc/  home/  lib/  lost+found/  media/  mnt/  opt/  proc/  root/  sbin/  selinux/  srv/  sys/  tmp/  usr/  var/


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


Listar solo archivos con ls

Código (bash) [Seleccionar]
ls -l | grep -v ^d
Ejemplo:
Código (bash) [Seleccionar]
faku@faku-desktop:/$ ls -l | grep -v ^d
total 92
lrwxrwxrwx   1 root root    11 2009-12-13 17:18 cdrom -> media/cdrom
lrwxrwxrwx   1 root root    33 2009-12-13 17:44 initrd.img -> boot/initrd.img-2.6.31-14-generic
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

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 (bash) [Seleccionar]
ls -l | grep -v ^d

Saludos
Título: Re: shell script
Publicado por: leogtz en 18 Diciembre 2009, 04:08 AM
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 (bash) [Seleccionar]

#!/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
Título: Re: shell script
Publicado por: [u]nsigned en 22 Diciembre 2009, 17:07 PM
Cita de: b10s_0v3rr1d3 en 22 Diciembre 2009, 00:42 AM

#!/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 (bash) [Seleccionar]
DIR=/home/user1/
#Podrias hacer:
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 (bash) [Seleccionar]
#!/usr/bin/bash
# Tabla interactiva.
while true
do
elemento=$[$RANDOM % 104 + 1]
read -p "$elemento : " simbolo
until [ $simbolo ]
do
read -p "$elemento : " simbolo
done
cat ~/Escritorio/elementos.txt | awk '{print $1 "->|" $2 "|" $3 "|"}' | grep -i ".*|$simbolo|$elemento|$" || {
echo -e  "\n\aError.\n$elemento pertenece a : "
cat ~/Escritorio/elementos.txt | awk '{print $1 "->|" $2 "|" $3 "|"}' | grep -i "|$elemento|$"
echo -e "\n";
}
done
exit 0


elementos.txt:

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


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 (bash) [Seleccionar]


#!/usr/bin/bash
if [ $# -lt 1 ]
then
echo -e "Error, pocos argumentos\n\n$0 imagen";
exit 0
fi
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'.