Warning: Illegal string offset 'userid' in [path]/includes/functions.php on line 509

Warning: Illegal string offset 'userid' in [path]/includes/functions.php on line 512

Warning: Illegal string offset 'membergroupids' in [path]/includes/functions.php on line 441

Warning: Illegal string offset 'membergroupids' in [path]/includes/functions.php on line 443

Warning: Illegal string offset 'usergroupid' in [path]/includes/functions.php on line 452

Warning: Illegal string offset 'usergroupid' in [path]/includes/functions.php on line 518

Warning: Illegal string offset 'userid' in [path]/includes/functions.php on line 518

Warning: Illegal string offset 'usergroupid' in [path]/includes/functions.php on line 518

Warning: Illegal string offset 'userid' in [path]/includes/functions.php on line 509

Warning: Illegal string offset 'usergroupid' in [path]/includes/functions.php on line 518

Warning: Illegal string offset 'userid' in [path]/includes/functions.php on line 518

Warning: Illegal string offset 'usergroupid' in [path]/includes/functions.php on line 518

Warning: Illegal string offset 'userid' in [path]/includes/functions.php on line 509

Warning: Illegal string offset 'usergroupid' in [path]/includes/functions.php on line 518

Warning: Illegal string offset 'userid' in [path]/includes/functions.php on line 518

Warning: Illegal string offset 'usergroupid' in [path]/includes/functions.php on line 518

Warning: Illegal string offset 'userid' in [path]/includes/functions.php on line 509

Warning: Illegal string offset 'usergroupid' in [path]/includes/functions.php on line 518

Warning: Illegal string offset 'userid' in [path]/includes/functions.php on line 518

Warning: Illegal string offset 'usergroupid' in [path]/includes/functions.php on line 518

Warning: Illegal string offset 'userid' in [path]/includes/functions.php on line 509

Warning: Illegal string offset 'usergroupid' in [path]/includes/functions.php on line 518

Warning: Illegal string offset 'userid' in [path]/includes/functions.php on line 518

Warning: Illegal string offset 'usergroupid' in [path]/includes/functions.php on line 518

Warning: Illegal string offset 'userid' in [path]/includes/functions.php on line 509

Warning: Illegal string offset 'usergroupid' in [path]/includes/functions.php on line 518

Warning: Illegal string offset 'userid' in [path]/includes/functions.php on line 518

Warning: Illegal string offset 'usergroupid' in [path]/includes/functions.php on line 518

Warning: Illegal string offset 'userid' in [path]/includes/functions.php on line 509

Warning: Illegal string offset 'userid' in [path]/includes/functions.php on line 512

Warning: Illegal string offset 'membergroupids' in [path]/includes/functions.php on line 441

Warning: Illegal string offset 'membergroupids' in [path]/includes/functions.php on line 443

Warning: Illegal string offset 'usergroupid' in [path]/includes/functions.php on line 452

Warning: Illegal string offset 'usergroupid' in [path]/includes/functions.php on line 518

Warning: Illegal string offset 'userid' in [path]/includes/functions.php on line 518

Warning: Illegal string offset 'usergroupid' in [path]/includes/functions.php on line 518

Warning: Illegal string offset 'userid' in [path]/includes/functions.php on line 518

Warning: Illegal string offset 'userid' in [path]/includes/functions.php on line 509

Warning: Illegal string offset 'usergroupid' in [path]/includes/functions.php on line 518

Warning: Illegal string offset 'userid' in [path]/includes/functions.php on line 518

Warning: Illegal string offset 'usergroupid' in [path]/includes/functions.php on line 518

Warning: Illegal string offset 'userid' in [path]/includes/functions.php on line 509

Warning: Illegal string offset 'usergroupid' in [path]/includes/functions.php on line 518

Warning: Illegal string offset 'userid' in [path]/includes/functions.php on line 518

Warning: Illegal string offset 'usergroupid' in [path]/includes/functions.php on line 518

Warning: Illegal string offset 'userid' in [path]/includes/functions.php on line 509

Warning: Illegal string offset 'usergroupid' in [path]/includes/functions.php on line 518

Warning: Illegal string offset 'userid' in [path]/includes/functions.php on line 518

Warning: Illegal string offset 'usergroupid' in [path]/includes/functions.php on line 518
Comandos Basicos Shell
Comunidad Underground Hispana  

Retroceder   Comunidad Underground Hispana > Programacion > Scripts: Python, Perl y Otros > Shell


Respuesta Crear Nuevo Tema
 
Compartir en twitter LinkBack Herramientas Desplegado
Antiguo 27-may-2006, 01:12   #1
Administrador
 
Fecha de Ingreso: diciembre-2002
Amigos 0
Mensajes: 1.632
Gracias: 0
Agradecido 10 veces en 8 mensajes.
Predeterminado Comandos Basicos Shell

Bueno a algunos se nos olvidan los comandos y pues invito a todos a que vayan posteando los comandos utiles.

Yo voy a poner una lista basica asi como las urls de donde pueden verlas por ahora (por que algunas dejan de funcionar con el tiempo)


--man manual

--pwd directorio de trabajo

--ls -lr (reverse) a (ocultos) h (humano) t (tiempo)
--color para que saque el resultado con código de colores
- s size por tamaños
- h el tamaño en humano

--more

--pg pagina un fichero

--tail -20 /var/log/syslog (las 20 últimas)

--head -20 /var/log/syslog (las 20 primeras)

--tail -f te enseña la actividad que hay sobre un fichero, los cambios en tiempo real sobre el fichero

--echo
--cp -p copia y mantiene los permisos
-r para copiar recursivamente un directorio

--rm -r borra recursivamente
-f no pregunta
-i interactivo, pregunta por cada fichero que va a borrar
--mv

--du -h disco usado en humano
-hs no es verborragico, me enseña el total sin ver el tamaño de cada subdirectorio
-k en kb
-m en megas
por defecto es en bytes

--df nos da el espacio de las particiones se pueden usar los parametros -k -m -h como en du

--mount tabla de dispositivos montados

--file nos da informacion sobre el tipo de fichero con independencia de su extensión

--find [donde] criterios de búsqueda

find /etc/ -name "passwd"
buscar por nombre -name
bucar por tamaño -size +100k
buscar por varios criterios: find /var/log -size +100 -name "[Dd]*" (mas de 100kb que empiezan por D o d)
buscar ficheros de tamaño cero, vacios:find / -empty
buscar directorios: todos los directorios cuyo nombre empiece por Zz: find / -name "[Zz]*" -type d
type : f archivo, d directory y l de link o enlace
-user busca por usuario: -user root son los ficheros de root y -user !root son los ficheros que NO son de root
-uid por iud
-gid por identificador de grupo
-perm por permisos : find / -user root -perm 777
-fecha de modificación: -atime
-minutos transcurridos desde la última modifiación: mmin nº de minutos
-hacer algo con el resultado de la busqueda: exec: find /var/log -name "syslog" -exec du -h {} \;
{} hacer referencia a "el resultado de la busqueda" y la orden se cierra con \;

ejercicio: copiar todos los ficheros acabados en .log al directorio /root/prueba:
aula2:~# find / -name *log -type f -exec cp -rf {} /root/prueba \;

ejercicio: buscar ficheros vacios con permisos 777 y borrarlos
aula2:~# touch www.txt
aula2:~# chmod 777 www.txt
aula2:~# find /root -empty -perm 777 -type f -ok rm {} \;
? y
aula2:~#

aqui -ok es un -exec interactivo

--grep busca dentro de un texto y tambien se usa para filtrar lo que sale por la patalla
filtrado : cat /etc/paswd |grep gustavo
busca dentro de un fichero: grep hola /etc/passwd
-i insible a M y m
-r recursivo
-v el complementario o la negación: grep -v paco /etc/passwd
zgrep permite búsqueda en ficheros comprimidos

Prioridades en la ejecución de procesos:
--nice -15 tarea
--nice -n+15 tarea
--renice +10 PID para cambiar la prioridad de un proceso ya en marcha que no queremos o no podemos parar

--cut selecciona una columna en una salida en formato encolumnado

--cat /etc/passwd |cut -f1 -d":"

con -f1 pido el campo 1 y con -d":" determino cuál es el delimitador de campo

--tee es una combinacion de salida estandar y volcado a un fichero:

aula2:~# cat /etc/passwd |cut -f1 -d":" |tee usuarios.txt
el resultado saldría por la pantalla y también se volcaria a un fichero

--date: información horaria

%H
%M
%S

date +%H:%M:%S--%Y:%m:%d
13:24:41--2006:05:13

--touch
-genera un fichero en blanco, vacio
-sirve para cambiar la hora de acceso a un fichero

-- tar zvcf destino.tar.gz /etc/ comprimo con gzip
tar zvxf destino.tar.gz

===================
condiciones, bucles
===================

al nombrar una varialble puede haber lios con su nombre y las / por eso lo mejor es poner el nonmbre de la variable entre {}

condiciones:

gt >
get >=
eq =
neq not =

lt
leq =

-f condicional para saber si existe un fichero
-d idem respecto a directorios
-x lo mismo respecto a ejecutables

esto lo vemos haciendo: man test, es decir, la página manual de test que es lo que hacemos entre los []

comparación entre ficheros, mas viejo o mas nuevo:
-nt
-ot

#!/bin/sh
if [ /var/log/syslog -nt /etc/shadow ]; then
echo "syslog es mas nuevo que shadow"
fi

-metamos lo que antes era una variable dentro de la condicional []:

#!/bin/sh
if [ `ps aux |wc -l` -gt 100 ]; then
echo "tienes muchos procesos"
else
echo " ok, no hay demasiados procesos"

fi

`ps aux |wc -l` también puede ir entre ()

-case: si los valores son uno o dos o bien si no son ninguno de los dos:

#!/bin/sh
usuarios=`who |wc -l`
case $usuarios in
"$1: 1"*) echo "estas sólo" ;;
"$1: 2"*) echo "sois dos" ;;
*) echo "sois tres o más" ;;
esac
==========
[este no me funcionó, siempre me da "sois tres o mas" aunque haya dos conexiones. Luego lo miro con calma]

-for : no numérico

script para calcular el espacio en uso de etc, var y tmp

#!/bin/sh
for directorio in etc var tmp ; do
du -hs /$directorio
done

otro for no numerico: [no me sale funciona, luego lo miro con calma]

#!/bin/sh
#buscar en /etc todo lo que empiece por a
for fichero in `ls /tmp/a*` ; do
du -hs fichero
done

-select: elegir de varias opciones una, convertirla en una variable e imprimirla

#!/bin/bash
echo "qué dia es hoy?"
select dia in "viernes" "sábado" "domingo" ; do
break
done
echo "hoy es" $dia

-while: tipico [comparar en C más tarde]
#!/bin/bash
aux=0
while [ $aux -lt 100 ]; do
echo "valor:" $aux
let aux=aux+1
done

========
CRONTAB
========

cuando ejecucion
min horas dias mes dia_semana /root/script.sh

cada 15 minutos= */15
cada 2 minutos= */2
dia de la semana van de 0 a 7
0 y 24 es lo mismo respecto a las horas

los dias de la semana: (domingo vale 0 y 7, los dos son válidos)
0 1 2 3 4 5 6 7
d l m m j v s d

field allowed values
----- --------------
minute 0-59
hour 0-23
day of month 1-31
month 1-12 (or names, see below)
day of week 0-7 (0 or 7 is Sun, or use names)

primer viernes de cada mes: 0 14 1-7 * 5 (1-7 significa la primera semana y dia de la semana 5 es viernes)

tring meaning
------ -------
@reboot Run once, at startup.
@yearly Run once a year, "0 0 1 1 *".
@annually (same as @yearly)
@monthly Run once a month, "0 0 1 * *".
@weekly Run once a week, "0 0 * * 0".
@daily Run once a day, "0 0 * * *".
@midnight (same as @daily)
@hourly Run once an hour, "0 * * * *".

-copia de /etc cada dos minutos en /var/backup en formato hora-minuto-segundo-dia-mes-año.tar.gz

#/bin/sh
#hacer un backup de /etc en forma backup_hora-minuto-segundo-dia-mes-año.tar.gz
fecha=`date +%H%M%S-%d%m%Y`
tar zvcf /var/backup/backup_$fecha.tar.gz /etc/
#borramos las copias mas antiguas de 5 minutos
find /var/backup/ -name "backup*.tar.gz" -mmin 5 -exec rm {} \;

-debug: sh -x y sh -n

http://barrapunto.com/journal.pl?op=...=2705&id=20874

Ese me es muy util para mi ya que algunos codes son utiles para no estar haciendo las cosas todos los dias manualmente

Otro bueno que encontre

Existen muchos shells disponibles para Linux pero habitualmente se utiliza el bash (bourne again shell) para la programación en shell ya que está disponible libremente y es fácil de usar. Por lo tanto todos los scripts que escribamos en este artículo usarán el bash (aunque la mayoría de veces también funcionarán con su hermano mayor, el bourne shell).
Para escribir nuestros programas en shell usaremos cualquier clase de editor de texto, p.ej. nedit, kedit, emacs, vi... como con otros lenguajes de programación.
El programa debe empezar con la siguiente línea (debe ser la primera línea del fichero):

#!/bin/sh


Lo caracteres #! indican al sistema que el primer argumento que sigue en la linea es el programa a utilizar para ejecutar este fichero. En este caso usamos el shell /bin/sh.
Cuando hallas escrito y guardado tu script debes hacerlo ejecutable para poder usarlo.
Para hacer el script ejecutable escribe
chmod +x nombre-del-fichero
Después puedes ejecutar tu script escribiendo: ./nombre-del-fichero

Comentarios
Los comentarios en la programación en shell comienzan con # se prolongan hasta el final de la línea. Te recomendamos que uses comentarios. Si tienes comentarios y no usas un cierto script durante algún tiempo inmediatamente sabrás qué hace y cómo funciona.

Variables
Como en otros lenguajes de programación no se puede vivir sin variables. En la programación en shell todas las variables son de tipo string y no es necesario declararlas. Para asignar un valor a una variable se escribe:
nombre_de_la_variable=valor

Para obtener el valor de la variable simplemente hay que poner el signo del dólar delante de la variable:
#!/bin/sh
# asignamos un valor:
a="hola mundo"
# ahora mostramos el contenido de "a":
echo "A es:"
echo $a

Escribe estas líneas en tu editor de textos y guardalo p.ej. como primero. Después haz ejecutable el script escribiendo chmod +x primero en el shell y después ejecútalo escribiendo ./primero
El script mostrará lo siguiente:
A es:
hola mundo

Algunas veces es posible confundir nombres de variables con el resto del texto:
num=2
echo "este es el $numº"

Aquí no se mostrará "este es el 2º" si no "este es el " porque el shell busca una variable llamada numdo que no tiene valor. Para decirle al shell que queremos mostrar la variable num tenemos que usar llaves:
num=2
echo "este es el ${num}º"

Con esto imprimiremos lo que queremos: este es el 2º

Hay una serie de variables que se establecen automaticamente. Hablaremos sobre ellas más adelante cuando las usemos por primera vez.

Si necesitas manejar expresiones matemáticas entonces necesitas usar programas como expr (ver tabla abajo).
Además de las variables de shell normales que son únicamente válidas dentro del programa en shell hay también variables de entorno. Una variable precedida de la palabra clave export es una variable de entorno. No vamos a comentar nada más sobre ellas ya que normalmente sólo se utilizan en scripts de entrada al sistema.
Comandos de shell y estructuras de control
Hay tres categorías de comandos que pueden ser usados en scripts de shell:

1)Comandos Unix:
Aunque un script de shell puede hacer uso de cualquier comando unix aquí tienes varios comandos utilizados con más frecuencia que el resto. Estos comandos se decriben como comandos para la manipulación de ficheros y texto.

echo "texto cualquiera" escribir un texto cualquiera en tu pantalla

ls listar ficheros
wc -l fichero contar las líneas de un fichero
wc -w fichero contar las palabras de un fichero
wc -c fichero contar el número de carácteres

cp fichero_origen fichero_destino
copiar el fichero_origen al fichero_destino

mv nombre_antiguo nuevo_nombre
renombrar o mover un fichero

rm fichero borrar un fichero
pueden usar rm -rf para forzar


grep 'patrón' fichero buscar cadenas en un fichero
Ejemplo: grep 'cadena-a-buscar' fichero.txt
cut -b num_de_columna fichero sacar datos de columnas de texto de ancho definido
Ejemplo: sacar los caracteres de la posición 5 a la 9
cut -b5-9 fichero.txt
No confundais este comando con "cat" que es algo totalmente diferente

cat fichero.txt mostrar un fichero.txt por stdout (tu pantalla)

file un_fichero describir qué tipo de fichero es un_fichero

read var esperar a que el usuario introduzca algo y guardarlo en la variable (var)


sort fichero.txt ordenar las líneas del fichero fichero.txt

uniq borrar las líneas duplicadas, usado en combinación con sort ya que uniq sólo borra las líneas duplicadas consecutivas
Ejemplo: sort fichero.txt | uniq

expr hacer operaciones matemáticas en el shell
Ejemplo: sumar 2 y 3
expr 2 "+" 3

find buscar ficheros
Ejemplo: buscar por nombre:
find . -name nombre_del_fichero -print
Este comando tiene muchas posibilidades y opciones diferentes. Desafortunadamente son demasiadas para explicarlas todas en este artículo.


tee escribir datos por stdout (tu pantalla) y a un fichero
Normalmente se usa así:
un-comando | tee fichero-de-salida
Escribe la salida de un-comando por la pantalla y a el fichero de salida

basename fichero devolver el nombre del fichero dado un nombre y quitarle la ruta al directorio
Ejemplo: basename /bin/tux
devuelve sólo tux


dirname fichero

devolver el nombre del directorio dado un nombre y quitándole el nombre del fichero
Ejemplo: dirname /bin/tux
devuelve /bin


head fichero mostrar algunas líneas del principio de un fichero

tail fichero mostrar algunas líneas del final de un fichero

sed
sed es básicamente un programa para buscar y reemplazar. Lee el texto de la entrada estándar (p.ej. una tubería) y escribe el resultado por stdout (normalmente la pantalla). El patrón de búsqueda es una expresión regular (ver referencias). Este patrón de búsqueda de se debe confundir con la sintaxis de comodines (wildcard) del shell. Para reemplazar la cadena linuxfocus con LinuxFocus es un fichero de texto usa:
cat texto.fichero | sed 's/linuxfocus/LinuxFocus/' > nuevotexto.fichero
Esto reemplaza la primera aparición de la cadena linuxfocus en cada línea por LinuxFocus. Si hay líneas en que linuxfocus aparece varias veces y quieres reemplazarlas todas usa:
cat texto.fichero | sed 's/linuxfocus/LinuxFocus/g' > nuevotexto.fichero

awk
La mayoría de las veces awk se utiliza para extraer campos de una línea de un texto. El campo separador por defecto es un espacio. Para especificar uno diferente se usa la opción -F.
cat fichero.txt | awk -F, '{print $1 "," $3 }'


Aquí hemos usado la coma (,) como separador de campos e imprimimos la columna primero y tercera ($1 $3). Si fichero.txt tiene líneas como:
Adam Bor, 34, India
Kerry Miller, 22, USA


estonces mostraría lo siguiente:
Adam Bor, India
Kerry Miller, USA


Se pueden hacer muchas más cosas con awk pero este es su uso más común.

) Conceptos: Tuberías (pipes), redirecciones y comillas simples invertidas
Realmente no son comando pero son conceptos muy importantes.

tuberías (pipes) (|) envian la salida (stdout) de un programa a la entrada (stdin) de otro.

grep "hola" fichero.txt | wc -l

encuentra las líneas con la cadena hola en fichero.txt y después cuenta el número de líneas.
La salida del comando grep se usa como entrada del comando wc. De esta manera se pueden contatenar tantos comandos como se quiera (dentro de unos límites razonables).

redirecciones: escribe la salida de un comando a un fichero o añade datos a un fichero
> escribe la salida a un fichero y sobreescribe el fichero antiguo en caso de existir
>> añade datos a un fichero (o crea uno nuevo si no existía previamente pero nunca sobreescribe nada).

Comillas simples invertidas (o tilde invertida)
La salida de un comando se puede usar como argumento de línea de comandos (no stdin como anteriormente, los argumentos de línea de comando son cadenas que se especifican destrás de un comando como con los nombres de ficheros y opciones) para otro comando. También se pueden usar para asignar la salida de un comando a una variable.
El comando
find . -mtime -1 -type f -print

encuetra todos los ficheros que han sido modificados en las últimas 24 horas (-mtime -2 serían 48 horas). Si quisieramos empaquetar estos fichero en un archivo tar (fichero.tar) la sintaxis sería:
tar xvf fichero.tar fichero1 fichero2 ...

En vez de escribirlo todo se pueden combinar los dos comandos (find y tar) usando comillas simples invertidas. Entonces tar empaquetará todos los ficheros que muestre find:
#!/bin/sh
# Las comillas son comillas simples invertidas (`) no comillas normales ('):
tar -zcvf ultimodific.tar.gz `find . -mtime -1 -type f -print`


3) Estructuras de control
La sentencia "if" comprueba si una condición es verdadera (con salida de estado 0, correcto). Si es correcto entonces se ejecuta la parte "then":
if ....; then
....
elif ....; then
....
else
....
fi

La mayoría de las veces se utiliza un comando muy especial dentro de las sentencias if. Se puede usar para comparar cadena o comprobar si un fichero existe, tiene permiso de lectura etc...
El comando "test" se escribe como corchetes " [ ] ". Aquí los espacios son muy importantes: Asegúrate que siempre hay un espacio entre corchetes. Ejemplos:
[ -f "un-fichero" ] : Comprueba si un-fichero es un fichero.
[ -x "/bin/ls" ] : Comprueba si /bin/ls existe y es ejecutable.
[ -n "$var" ] : Comprueba si la variable $var contiene algo
[ "$a" = "$b" ] : Comprueba si las variables "$a" y "$b" son iguales

Ejecuta el comando "man test" y obtendrás una larga lista con todo tipo de operadores test para comparaciones y ficheros.
Usarlo en scripts de shell es bastante directo:
#!/bin/sh
if [ "$SHELL" = "/bin/bash" ]; then
echo "tu shell es el bash (bourne again shell)"
else
echo "tu shell no es bash sino $SHELL"
fi

La variable $SHELL contiene el nombre de la shell donde estás y esto es lo que estamos comprobando aquí comparandola con la cadena "/bin/bash"

Operadores cortos
A aquellos que conozcan C les gustará la siguiente expresión:

[ -f "/etc/shadow" ] && echo "Este ordenador usa shadow passwors"

Los && se pueden usar como una pequeña sentencia if. Lo de la derecha se ejecuta si lo de la izquierda es verdadero. Podemos interpretarlo como un Y (AND). Por lo tanto el ejemplo quedaría: "El fichero /etc/shadow existe Y (AND) se ejecuta el comando echo". También está disponible el operador O (OR) (||). Un ejemplo:
#!/bin/sh
mailfolder=/var/spool/mail/james
[ -r "$mailfolder" ] || { echo "No se ha podido leer $mailfolder" ; exit 1; }
echo "$mailfolder tiene mensajes de:"
grep "^From " $mailfolder

El script comprueba primero si puede leer un buzón de correo. Si puede entonces imprime las líneas "From" del buzón. Si no puede leer el fichero $mailfolder entonces se activa el operador O. Sencillamente este código lo leeríamos como "Mailfolder legible o salir del programa". Aquí el problema es que debemos tener exactamente un comando detrás de O pero en este caso necesitamos dos:
-mostrar un mensaje de error
-salir del programa
Para manejar ambos como un solo comando podemos agruparlos en una función anónima usando llaves. Las funciones en general se explican con más profundidad más abajo.
Puedes hacerlo todo sin O e Ys usando simplemente sentencias if pero algunas veces los operadores O e Y son mucho más convenientes.

La sentencia case se puede usar para comparar (usando comodines del shell como * y ?) una cadena dada con varias posibilidades.
case ... in
...) hacer algo aquí;;
esac

Veamos un ejemplo. El comando file comprueba que tipo de fichero es el fichero que le pasamos:
file lf.gz

devuelve:

lf.gz: gzip compressed data, deflated, original filename,
last modified: Mon Aug 27 23:09:18 2001, os: Unix

Ahora vamos a usar esto para escribir un script llamado smartzip que puede descomprimir ficheros comprimidos con bzip2, gzip y zip automaticamente :
#!/bin/sh
tipofichero=`file "$1"`
case "$tipofichero" in
"$1: Zip archive"*)
unzip "$1" ;;
"$1: gzip compressed"*)
gunzip "$1" ;;
"$1: bzip2 compressed"*)
bunzip2 "$1" ;;
*) error "El fichero $1 no se puede descomprimir con smartzip";;
esac


Te habrás fijado que hemos usado una nueva variable especial llamada $1. Esta variable contiene el primer argumento pasado a un programa. Digamos que ejecutamos
smartzip articles.zip
entonces $1 contendría la cadena articles.zip

La sentencia select es una extensión específica del bash y es muy útil para usos interactivos. El usuario puede escoger una opción de una lista de difirentes valores:
select var in ... ; do
break
done
.... ahora podemos usar $var ....

Un ejemplo:
#!/bin/sh
echo "¿Cuál es tu sistema operativo favorito?"
select var in "Linux" "Gnu Hurd" "Free BSD" "Otros"; do
break
done
echo "Has seleccionado $var"

Aquí tienes lo que haría el programa:
¿Cuál es tu sistema operativo favorito?
1) Linux
2) Gnu Hurd
3) Free BSD
4) Otros
#? 1
Has seleccionado Linux

En el shell tenemos están disponibles las siguientes sentencias de bucle:
while ...; do
....
done

El bucle while se ejecutará mientras la expresión que comprobamos sea verdadera. Se puede usar la palabra clave "break" para abandonar el bucle en cualquier punto de la ejecución. Con la palabra clave "continue" el bucle continua con la siguiente iteración y se salta el resto del cuerpo del bucle.

El bucle for toma una lista de cadenas (separadas por espacios) y las asigna a una variable:
for var in ....; do
....
done

El siguente ejemplo muestra por pantalla de la letra A a la C:
#!/bin/sh
for var in A B C ; do
echo "var es $var"
done

Un script de ejemplo más útil es este, llamado showrpm, que muestra un resumen del contenido de una serie de paquetes RPM:
#!/bin/sh
# listar un resumen del contenido de una serie de paquetes RPM
# USO: showrpm ficherorpm1 ficherorpm2 ...
# EJEMPLO: showrpm /cdrom/RedHat/RPMS/*.rpm
for rpmpackage in $*; do
if [ -r "$rpmpackage" ];then
echo "=============== $rpmpackage =============="
rpm -qi -p $rpmpackage
else
echo "ERROR: no se pudo leer el fichero $rpmpackage"
fi
done

Como se puede ver hemos usado la siguente variable especial, $* que contiene todos los argumentos de la línea de comandos. Si ejecutas
showrpm openssh.rpm w3m.rpm webgrep.rpm
entonces $* contiene las tres cadenas openssh.rpm, w3m.rpm y webgrep.rpm.

El bash GNU también entiende bucles until pero en general con los bucles while y for es suficiente.

Comillas
Antes de pasarle cualquier argumento a un programa el shell intenta expandir los comodines y variables. Expandir significa que el comodín (p.ej. *) se reemplaza por los nombres de fichero apropiados o que una variable se reemplaza por su valor. Para modificar este comportamiento se pueden usar las comillas: Pongamos que tenemos varios ficheros en el directorio actual. Dos de ellos son ficheros jpg, correo.jpg y tux.jpg.
#!/bin/sh
echo *.jpg

Imprimirá "correo.jpg tux.jpg".
Usar comillas (simples y dobles) evitará esta expansión de comodines:
#!/bin/sh
echo "*.jpg"
echo '*.jpg'

Esto mostrará "*.jpg" dos veces.
Las comillas simples son las más estrictas. Evitan incluso la expansión de variables. Las comillas dobles evitarán la exprasión de comodines pero no así la de variables:
#!/bin/sh
echo $SHELL
echo "$SHELL"
echo '$SHELL'

Esto mostrará:
/bin/bash
/bin/bash
$SHELL

Finalmente existe la posibilidad de eliminar el significado especial de un único caracter anteponiendole una barra invertida:
echo \*.jpg
echo \$SHELL

Esto mostrará:
*.jpg
$SHELL

Documentación aquí
Documentación aquí es una forma muy elegante de enviar varias líneas de texto a un comando. Es bastante útil para escribir un texto de ayuda en un script sin tener que poner echo delante de cada línea. Un "Documentación aquí" comienza por << seguido de una cadena que también debe aparecer al final del documentación aquí. Aquí tenemos un script de ejemplo, llamado ren, que renombra múltiples ficheros y usa documentación aquí para su texto de ayuda:
#!/bin/sh
# tenemos menos de 3 argumentos. Mostramos el texto de ayuda:
if [ $# -lt 3 ] ; then
cat <<AYUDA
ren -- renombra varios ficheros usando expresiones regulares de sed

USO: ren 'regexp' 'reemplazo' ficheros...

EJEMPLO: rename all *.HTM fles in *.html:
ren 'HTM$' 'html' *.HTM

AYUDA
exit 0
fi
VIEJO="$1"
NUEVO="$2"
# El comando shift elimina un argumento de la lista
# de argumentos de la linea de comandos.
shift
shift
# ahora $* contiene todos los ficheros:
for fichero in $*; do
if [ -f "$fichero" ] ; then
nuevofichero=`echo "$fichero" | sed "s/${VIEJO}/${NUEVO}/g"`
if [ -f "$nuevofichero" ]; then
echo "ERROR: $nuevofichero ya existe"
else
echo "renombrando $fichero como $nuevofichero ..."
mv "$fichero" "$nuevofichero"
fi
fi
done

Hasta ahora este es el script más complejo que hemos visto. Hablemos sobre él un poco. La primera sentencia if comprueba si hemos introducido al menos 3 parámetros de línea de comandos. (La variable especial $# contiene el número de argumentos). Si no, se envia el texto de ayuda al comando cat que consecuentemente lo muestra por pantalla. Después de mostrar el texto de ayuda salimos del programa. Si hay 3 o más argumentos asignamos el primer argumento a la variable VIEJO y el segundo a la variable NUEVO. Lo siguiente es cambiar la posición de los parámetros de la lista de comandos dos veces para poner el tercero en la primera posición de $*. Con $* entramos en el bucle for. Cada uno de los argumentos de $* se asigna uno a uno a la variable $fichero. Aquí comprobamos primero que el fichero existe y después creamos un nuevo fichero usando buscar y reemplazar con sed. Las comillas simples invertidas se usan para asignar el resultado a la variable nuevofichero. Ya tenemos todo lo que necesitamos: El nombre de fichero de viejo y el nuevo. Ahora sólo tenemos que utilizarlos con el comando mv para renombrar los ficheros.

Funciones
Tan pronto como tengamos un programa más complejo nos encontraremos con que estamos usando el mismo código en varias partes y que sería de más ayuda el darle cierta estructura. Una función es similar a esto:
nombredelafuncion()
{
# dentro del cuerpo $1 es el primer argumento dado a la función
# $2 el segundo ...
cuerpo
}

Se necesita "declarar" las funciones al principio del script antes de usarlas.

Aquí tenemos un script llamado xtitlebar (título de la ventana) que puedes usar para cambiar el nombre de una ventana de terminal. Si tienes varias abiertas e
vart001 está desconectado   Responder Citando
Antiguo 29-jun-2006, 20:39   #2
Miembro
 
Fecha de Ingreso: junio-2006
Amigos 0
Mensajes: 52
Gracias: 0
Agradecido 0 veces en 0 mensajes.
Predeterminado Re: Comandos Basicos Shell

Vaya cantidad
__________________
rehizner está desconectado   Responder Citando
Antiguo 29-jul-2006, 16:52   #3
Novato
 
Fecha de Ingreso: julio-2006
Amigos 0
Mensajes: 40
Gracias: 0
Agradecido 0 veces en 0 mensajes.
Predeterminado Re: Comandos Basicos Shell

uan pregunta como soy nuevo en esto kiero aprender mas pero tengo 1 duda como hacemos para ke el shield se conecte a la pagina ke keremos sakar informacion?


gracias.
SokalT está desconectado   Responder Citando
Antiguo 21-abr-2007, 17:23   #4
tru_clx
Guest
 
Amigos
Mensajes: n/a
Predeterminado Re: Comandos Basicos Shell

afanoso y muy bueno
  Responder Citando
Antiguo 07-jun-2007, 16:00   #5
Baby Girl
Guest
 
Amigos
Mensajes: n/a
Predeterminado Re: Comandos Basicos Shell

Esta bien tu manual aBsTrAcTo.

Yo trabajo con Shell script y hay algunos comandillos que uso mucho, por ejemplo crear alias, con frecuencia miro los últimos ficheros que se crean en una carpeta y para ello me creo un alias.

alias ver='ls -lrt | tail' ( mi alais se llama ver )

O para realizar una busqueda desde un raiz de una palabra dentro de todos los ficheros y subcarpetas.

find . 2>/dev/null | xars grep 'palabra' 2>/dev/null

comprimir ficheros y descomprimir ficheros

compress
compress -f ( comprime sin preguntar, comprime ficheros vacíos )
uncompress

El awk o nawk es una herramienta mu potente si se sabe usar, un syncsort puede tardar 10 veces el tiempo que tarda un awk en realizar una tarea sobre un fichero grande. asique si esto os interesa os recomiendo que aprendais a manejarlo

Si necesitais acceder a un gestor de BBDD sería:

isql -Sserver -Uuser -Ppassword -ifichero_in -ofichero_out -w1024 -s";"
(el -w delimita la longitud del registro)
(el -s es para que la consulta salga con separador de campos)

el df -k . sirve para ver el tamaño del filesystem, lo que está ocupao y el espacio que tiene libre, conocer sobre que filesystem está montado y ver los filesystems de otras máquinas que están compartidos con este.


kill -9 numproceso para matar un proceso en ejecución


Bueno ahora mismo no se me ocurre nada más interesante..

Saludos
  Responder Citando
Antiguo 07-jun-2007, 18:06   #6
alejandr0
Guest
 
Amigos
Mensajes: n/a
Predeterminado Re: Comandos Basicos Shell

Gracias por los comandos alos dos... estan bien para mi que entro al mundo de las conchitas.. O0

she devil o abstracto podrian pasarse por este post ??

[Solo usuarios registrados pueden ver los links. REGISTRARSE]



es que tengo problemitas... y no se omo seguir la verdad nolo se..

gracias por adelantado..

salud0s
  Responder Citando
Antiguo 10-jun-2007, 19:10   #7
alejandr0
Guest
 
Amigos
Mensajes: n/a
Predeterminado Re: Comandos Basicos Shell

Buenas ya que aqui van los comandos de shell aqui les dejo esta maravilla que me encontre al buscar ayuda sobrer WHILE

[Solo usuarios registrados pueden ver los links. REGISTRARSE]




salud0s
  Responder Citando
Antiguo 13-may-2008, 16:00   #8
Colaborador
 
Fecha de Ingreso: septiembre-2006
Ubicación: Costa Rica
Amigos 0
Mensajes: 570
Gracias: 0
Agradecido 5 veces en 4 mensajes.
Predeterminado Re: Comandos Basicos Shell

Aqui dejo estos comandos basicos de la shell de Linux mas adelante pongo mas , por el momento dejo estos para dejar informacion en este post que se habia borrado:

* ls: lista el contenido de un directorio. Sintaxis: ls [opciones] [nombre_del_directorio]; por ejemplo:

$ ls -l mi_directorio ( la opción “-l” listará los archivos de “mi_directorio” más la información detallada de cada uno, como nobre largo,usuarios dueños,permisos del mismo, etc.).

* cp: permite copiar archivos y directorios. Sintaxis: cp [opciones] [archivo_original] [archivo_destino]; por ejemplo:

$ cp -v archivo_original archivo_destino (la opción “-v” muestra información mientras copia el archivo).

*cd: cambia nuestra ubicación actual hacia otro directorio elegido. Sintaxis: cd [directorio]; por ejemplo:

[usuario@localhost home/]$ cd / (no tiene opciones, en este ejemplo estamos parados en nuestro directorio personal “home/” y pasaremos al directorio raíz “/”).

*mkdir: este comando permite crear directorios. Sintaxis: mkdir [opciones] [directorio_nuevo]; por ejemplo:

$ mkdir mi_directorio (tiene dos opciones básicas: “-m” que asigna los permisos especificados al directorio y “-p” que crea directorios emparentados en caso de que no existan).

*mv: modifica el nombre de los archivos y directorios moviéndolos de una ubicación a otra. Sintaxis: mv [opciones] [archivo_ o_directorio_fuente] [archivo_o_directorio_destino]; por ejemplo:

$ mv -v mi_directorio otro_directorio (la opcion “-v” pregunta antes de sobreescribir los archivos existentes).

*rm: elimina uno o más archivos. Sintaxis: rm [opciones] [archivos]; por ejemplo:

$ rm -v archivos (la opción “-v” muestra el nombre de cada archivo antes de eliminarlo).

*rmdir: elimina un directorio, si esta vacío. Sintaxis: rmdir [opciones] [directorio]; por ejemplo:

$ rmdir mi_directorio (tiene una opción básica: “-p” elimina cualquier directorio emparentado que este vacío).

*cat: muestra el contenido de un archivo en pantalla (salida estándar). Sintaxis: cat [opciones] [archivos]; por ejemplo:

$ cat -e archivo (la opción “-e” muestra el final de una linea y todos los caracteres no imprimibles).

*chmod: modifica los permisos de archivos o directorios. Sintaxis: chmod [opciones] [permisos] [archivo]; por ejemplo:

$ chmod a+rw mi_archivo (hay 3 permisos básicos en los archivos y directorios, estos son r: lectura, w:escritura, y x: ejecución -solo se da este permiso para archivos posibles de ejecutarse como los scripts- en éste ejemplo damos permisos de lectura y escritura a “mi_archivo”, si suplantamos el “+” por un “-” negamos permisos, la opcion “a” se refiere a todos, si usamos “u” al usuario actual, “g” al grupo de usuarios y “o” se refiere a otros).



Saludos............ 8)
__________________
[CENTER]Hackers are always pushing the boundaries, investigating the unknown, and evolving their art.
Yoda está desconectado   Responder Citando
Antiguo 07-jul-2008, 23:59   #9
Administrador
 
Fecha de Ingreso: diciembre-2002
Amigos 0
Mensajes: 1.632
Gracias: 0
Agradecido 10 veces en 8 mensajes.
Predeterminado Re: Comandos Basicos Shell

Tema recuperado..

Aqui va otros.

ya viejos pero en algo sirven

ejemplo para descargar un fichero usamos wget http://ruta.com/asi.zip

Ahora que pasa cuando son 1000 ficheros en carpetas distintas y te llevaria tiempo estar uno por uno para bajarlos. "estamos hablando de ficheros regados y no puedes comprimirlo en el servidor externo"

Generamos un fichero.txt y colocamos una ruta del fichero por linea

y ya ejecutamos desde consola
wget -i fichero.txt

Y esto ira descargando linea por linea

Ahora.. supongamos que tenemos una carpeta /mp3/ y tiene carpetas de artista o grupo. y esta misma carpeta tiene otras llamadas "canciones, imagenes y documentos"

Lo que nos interesa son los ficheros que estan en mp3. y para hacer una lista mas facil vamos a buscar por extensiones
find /ruta/mp3/ -name "*.mp3"

esto nos dara un listado. que el mismo podremos usar para comprimir todos a una zip.. o agregarlos a un txt y hacer la lista

vart001 está desconectado   Responder Citando
Antiguo 19-nov-2008, 17:03   #10
rafaux
Guest
 
Amigos
Mensajes: n/a
Predeterminado Re: Comandos Basicos Shell

Hola bueno para aquellos que quieran bajar cosas desde internet y no se coman todo el ancho de banda prueben esto:
wget --limit-rate=40K ruta-de-lo-que-bajaremos. Lo podemos decir que sea a 30K Ejemplo:
wget --limit-rate=30K

[Solo usuarios registrados pueden ver los links. REGISTRARSE]



Eso si paciencia mis pequeños saltamontes solo eso lo dejan en la tarde y al dia siguinte preparan su disco.

Espero les sirva.
Ha también pueden descagar url completas con -r
wget -r pagina-a-deascargar
  Responder Citando
Antiguo 10-ene-2009, 11:17   #11
Unknown_888
Guest
 
Amigos
Mensajes: n/a
Predeterminado Re: Comandos Basicos Shell

gracias por el aporte
  Responder Citando
Respuesta

Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los Códigos BB están Activado
Las Caritas están Activado
[IMG] está Activado
El Código HTML está Desactivado
Trackbacks están Activado
Pingbacks están Activado
Refbacks están Activado



Temas Similares
Tema Autor Foro Respuestas Último mensaje
Tutorial Programación Batch - completo - GUN$ Batch 5 04-dic-2011 18:42
troyano en java: escritorio remoto, transferencia de archivos, linea de comandos. AngelCruel Troyanos y virus 3 02-ago-2010 15:45
Descargar Dropbox Shell Tools 0.1.1 soft2010 Top 100 0 18-jul-2010 12:21
Error funcion Shell (Visual Basic 6) AlexPoison11 Visual Basic y Net 4 17-jul-2010 19:27



Portal Hacker
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.0