INFORMATICA Y OCIO

Foros de informática
  Inicio    Normas    Buscar   Miembros   Clanes   Regístrese   Perfil   Conéctese para revisar sus mensajes   Conectarse 
[informatica] + [videos graciosos] + [ultimos mensajes] + [top usuarios] + [contacto]
Breve manual de Shell scripts en Bash

 
Publicar Nuevo Tema   Responder al Tema    Índice del Foro Foroz comunity :: Foro Linux / Software Libre
Ver tema anterior :: Ver siguiente tema  
Autor Mensaje
kolombino
User destacando
User destacando


Registrado: 08 Jun 2007
Mensajes: 234

MensajePublicado: Lun May 26, 2008 12:57 am    Título del mensaje: Breve manual de Shell scripts en Bash Responder citando
PROGRAMACIÓN SHELL BASH
La primera línea del script suele ser:
Código:
#!/bin/bash (Invoca al shell)

Se le ha de dar permiso de ejecución:
Código:
chmod u+x script.sh

Para ejecutar un script:
Código:
/bin/bash script.sh
o
Código:
./script.sh

Para comentar lineas:
Código:
#Esta linea esta comentada



VARIABLES DE ENTORNO EN LA SHELL DE BASH
BASH: Es la ruta donde está la shell del bash
CDPATH: Nombre de los directorios que examina la orden cd
EDITOR: Editor predeterminado que usan los programas
ENV: Almacena rutas que usa linux en busca de archivos de configuración
HISTFILE: Almacena la ruta del archivo historico
HOME: Directorio inicial
MAIL: Contiene la dirección donde se almacena el buzón de correo.
IFS: Valor que usa el shell para separar las palabras en la línea de órdenes (suele ser un espacio)
MAILCHECK: Intervalo de búsqueda de nuevo correo
PATH: Ruta de búsqueda de programas y órdenes externas
PPID: PID del proceso padre
PS1: Indicador del shell
PS2: Indicador del shell secundario
PWD: Directorio actual
TERM: Tipo de terminal que nos atiende

DECLARACIÓN DE VARIABLES
Código:
declare [+- opciones] [nombre[=valor]]
typeset [+- opciones] [nombre [=valor]]


+ activa opción
- desactiva opción

Opciones:
declare -a array Indica que la variable alumnos es una lista (array)
declare -f suma Indica que la variable es una funcion
declare -i variable Declara la variable como numero
declare -r variable Indica que la variable es de solo lectura
declare -x variable Exporta la variable

LECTURA Y ESCRITURA DE VARIABLES
variable=valor
numero=15
nombre=”Paco”
echo $variable Nos muestra la variable

Para hacer que una variable sea de solo lectura:
Código:
declare -r variable
   typeset -r variable
   readonly variable


LECTURA ENTRADA ESTANDAR (TECLADO)
read [opciones] [variable] Lee desde teclado y almacena lo leído en una variable.
read -a nombre/frase Todo lo leído se almacena en un array
read -e nombre/frase Mete todo lo leído en la primera variable del read
read -p "mensaje" variable Muestra por pantalla un mensaje y lee los datos que se introduzcan.
Código:
   read -p “Introduce un numero:” numero


Código:
set [opciones] [argumetos]
set -a Variable
Cada vez que se asigna un valor a una variable ésta se exporta.

PASO DE PARÁMETROS A UN SCRIPT
script parámetros..................parámetro9
$1 $9
Código:

./script.sh  lee.txt      diskette       c:
                      $1             $2          $3


Parámetros:
shift [n] Desplaza los parámetros hacia la izquierda
shift 3 Desplazaría el parámetro 3 al lugar del 1.

ORDENES DE CONTROL DE FLUJO
i
Código:
f [ condición ]
then
   ordenes
fi



if [ condición ]
then
   órdenes
      
else
   órdenes
fi


Código:
for i in $(x); do

   ordenes

done



Código:
while [ condición ]
   do
      ordenes
   done



Código:
until [ condición ]    
   do
      ordenes
   done



Código:
case $variable in
   1)
   orden
   ;;
   
   2)
   orden
   ;;
   3)
   orden
   ;;   
   .
   .
   .
   n)
   orden
   ;;
esac


CONSTRUCCIÓN DE EXPRESIONES
Archivos:
-d archivo La expresión es cierta si el archivo es un directorio
read -p “dime un directorio” dato
Código:
if [-d $dato]
      then
         echo “$dato es un directorio”
   else
      echo “$dato no es un directorio”
   fi

-f archivo La expresión es cierta si es un archivo
-r archivo La expresión es cierta si es legible
-s archivo La expresión es cierta si el tamaño no es 0
-t desarchivo Es cierto si desarchivo es un descriptor del fichero asociado al terminal
-w archivo Es cierto si el fichero es modificable
-x archivo Es cierto si el fichero es ejecutable
-b archivo Es cierto si el fichero es un fichero de dispositivo de bloques
-c archivo Es cierto si el fichero es un fichero de dispositivo de carácter
-e archivo Es cierto si el fichero existe
-L archivo Es cierto si el fichero es un enlace simbólico


Enteros:
int1 -eq int2 i1=i2
int1 -ge int2 i1>=i2
int1 -gl int2 i1>i2
int1 -le int2 i1<=i2
int1 -lt int2 i1<i2
int1 -ne int2 i1!=i2

Código:
if [ $num1 -eq $num2 ]
then
      echo "Los numeros son iguales"
fi


Cadenas:
cad Es verdadero si la cadena no es vacía
cad1=cad2 Es verdadero si las cadenas son iguales
cad1!=cad2 Es verdadero si las cadenas son diferentes
-n cad Es verdadero si la longitud de la cadena no es 0
-z cad Es verdadero si la longitud de la cadena es 0

Código:
if [ -z $cadena  ]
then
      echo "La cadena no contiene ningun caracter"
fi



OPERADORES LÓGICOS
! -> not !expresión1
-a -> AND expresión1 -a expresión2
-o -> OR expresión1 -o expresión2

PROCESAMIENTO DE DATOS NUMÉRICOS
let b=7
let a=2
let a=$b
let a=$a+5

OPERACIONES ARITMÉTICAS
+ - SIGNO OPERACIÓN
<< >>
!~ NOT, COMPLEMENTO A 1
== !=
** EXPONENCIACIÓN
<= =><>
* MULTIPLICACIÓN
/ DIVISIÓN
% RESTO
+- SUMA RESTA
&-> AND
^ XOR
| OR
&& AND LÓGICO
|| OR LÓGICO
= += -= *= /= %= &= ^= |=
a+=2 <--> a=$a+2

USOS DE EXPR
expr argumentos
expr arg1:arg2 --> Devuelve la parte que coinciden de ambas expresiones.
expr substr cadena principio longitud --> Extrae una subcadena desde donde se indique y con la logitud indicada
expr index cadena lista-caracteres --> Se le indica un carácter y devuelve la posición de la primera vez que lo encuentra.
expr length cadena --> Devuelve la longitud de la cadena.

ARRAYS
Declaración
Código:
declare -a nombre_array
read only –a nombre_array
nombre_lista [subindice]=valor ----> alumnos[7]=”Corento”
local -a nombre_array


Acceso elementos del array
$nombre[subindice]
a=$alumnos[7] -->Solo devuelve una posición
a=$alumnos[@]-->Devuelve toda la lista
a=$alumnos[*]-->Devuelve toda la lista

Asignación
nombre_lista[posición]=valor
${#nombre_lista} -->Devuelve el tamaño de la lista en bytes
${#nombre_lista[posición]} -->Devuelve el tamaño del elemento
${#nombre_lista[*]} -->Devuelve el número de elementos de la lista
array[$i]=$variable --> La posicion de i la mete en la variable
echo "${array[$j]}" --> Muestra la posicion j del array por pantalla

ORDÉN EXEC Y ENTRADA/SALIDA DE ARCHIVOS
exec orden ----->exec------>orden

exec<archivo --> Desvía la entrada estándar al archivo. Todas las lecturas con la orden read se harán desde un fichero y no desde teclado
exec>archivo --> Todos los echos en vez de ir a la pantalla iran al fichero
exec>>archivo --> Desvía la salida estándar a un fichero
exec n <archivo --> Abre un fichero y le asigna el número descriptor que le indiquemos
exec n << archivo --> Igual que el cuartro pero para la salida

exec n << marcador
.........
datos
........
marcador
exec n >> archivo
exec n >&m --> Duplica todas las salidas del fichero n y también pasa al fichero.
exec <&- --> Cierre de la entrada estándar
exec >&- Cierre de la salida estándar
exec n<&- Cierre de la entrada con el descriptor que le indiquemos
exec n>&- Cierre de la salida con el descriptor que le indiquemos

Scripts de ejemplo hechos por mi para que la gente k empieza desde cero tenga un poco de idea.
Código:

#Script que muestra un menú con las siguientes opciones.
#       1 Montar un diskette.
#       2 Asignación IP a tarjeta de red. Se pedirá la tarjeta y la ip a asignar a la misma.
#       3 Puerta de enlace.
#       4.Activar enrutamiento.
#       5.- Ajuste de dns.
#       6. Fin.

#!/bin/bash
echo "1-Montar diskette"
echo "2-Asignar IP"
echo "3-Puerta de enlace"
echo "4-Activar enrrutamiento"
echo "5-Ajuste DNS"
echo "6-FIN"

read -p "Introduzca la opcion " op

case $op in
   1)mount -t ext2 /dev/fd0 /mnt/diskette    
   ;;

   2)read -p "Introduzca el interfaz " interfaz
     read -p "Introduzca la ip " ip
     ifconfig $interfaz $ip
   ;;

   3)read -p "Introduzca la puerta de enlace " gateway
     route add default gw $gateway
   ;;

   4)echo -n "1">/proc/sys/net/ipv4/ip_forward
   ;;

   5)read -p "Introduzca la dns primaria " dns1
     read -p "Introduzca la dns secundaria " dns2
     echo "$dns1">>/etc/resolv.conf
     echo "$dns2">>/etc/resolv.conf
   ;;
   6)exit 0
   ;;
esac


Código:
#Script que dice si un numero es par o impar.
#/bin/bash
read -p "Introduzca un numero " numero
   
   resto=numero%2
   
   if [ $resto -eq 0 ]
   then
      echo "El numero es par"
   else
      echo "El numero es impar"
   fi


Código:

#MINI_AGENDA que guarda los datos en un fichero de texto.

#/bin/bash

while [ $con!='N' ]
do
echo "1-Dar de alta a una persona"
echo "2-Eliminar una persona"
echo "3-Buscar una persona"
echo "4-Listar agenda completa"
echo "5-Ordenar agenda alfabeticamente"
echo "6-Salir"

read -p "Introduzca una opción" op
case $op in
   1)read -p "Introduzca el nombre " nombre
     read -p "Introduce el apellido " apellido
     read -p "Introduce el sobrenombre " nick
     read -p "Introduce el telefono " telefono
     read -p "Fecha de nacimiento(con el formato dd/mm/aa) " fecha
     echo -n "$nombre:$apellido:$nick:$telefono:$fecha">>agenda.txt      
   ;;

   2)read -p "Introduzca el nombre a borrar " nombre
     cat agenda.txt|grep -v $nombre>>aux.txt
     mv aux.txt agenda.txt
   ;;

   3)read -p "Introduzca el sobrenombre a buscar " nick
     cat agenda.txt|grep $nombre
   ;;

   4)cat agenda.txt
   ;;

   5)cat agenda.txt|sort >>aux.txt
          mv aux.txt agenda.txt
   ;;
       
        6)exit 0
        ;;
esac

read -p "¿Desea continuar S/N? " con
done


Código:
#Script que convierte un fichero a mayúsculas o mínusculas segun el parámetro 2. El parámetro 1 será el nombre del fichero.

#!/bin/bash

if [ !-z $1 ] then
   if [ ! -z $2 ] then
   
      if [ $2 -eq 1 ] then
         echo "Convirtiendo fichero a minusculas"
         cat $1|tr [A-Z] [a-z]>aux.txt
         mv aux.txt $1
      fi
   

      if [ $2 -eq 2 ] then
         echo "Convirtiendo fichero a mayusculas "
         cat $1 |tr [a-z] [A-Z]>aux.txt
         mv aux.txt $1
      fi
   fi
fi


Código:

#Script que al introducir nombre de un programa lo elimina de memoria.

#!/bin/bash

read -p "Introduce el nombre del programa a eliminar de memoria " programa
ps -A |grep $programa |cut -f2 -d' '>/tmp/aux

exec < /tmp/aux  #Hace k todos los read a partir de ahora lea de este fichero
read proceso #Lee la primera linea del fichero /tmp/aux

while [ $proceso ] #Mientras haya procesos en el fichero /tmp/aux se ejecuta el while
do
   kill -9 $proceso
   read proceso
done
exec>&_


Este es un pequeño manual para comenzar a programar en bash, distribuidlo, copiadlo, modificadlo. xDD
Si el moderador encuentra errores o quiere modificar algo k lo haga sin problemas.
Saludos


Ultima edición por kolombino el Lun May 26, 2008 10:49 am; editado 3 veces
Volver arriba
Ver perfil del usuario Enviar mensaje privado
perezd
Yo soy el foro
Yo soy el foro


Registrado: 31 Ene 2007
Mensajes: 2184
Ubicación: Tercer Mundo, Uruguay

MensajePublicado: Lun May 26, 2008 1:57 am    Título del mensaje: Responder citando
Opa! Exelente trabajito amigo!

Personalmente tambien me sirvio, ya que programo ShellScripts tambien...

Un saludos y continua aportando a la Comunidad Linuxera de este foro...
_________________
"El Software es Como el Sexo, Cuando es Gratis, Mejor"
Tutoriales, Guias, Problemas y Dudas sobre GNU/Linux - Foro Linux
Volver arriba
Ver perfil del usuario Enviar mensaje privado
Mostrar mensajes anteriores:   
Publicar Nuevo Tema   Responder al Tema    Índice del Foro Foroz comunity :: Foro Linux / Software Libre Todas las horas están en GMT + 1 Hora
Página 1 de 1
Saltar a:  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
 
Articulos relacionados
En Descargas/informatica >> Manual de reparacion de unidades de C...
En Tutoriales Informáticos >> Manual de VMware 5.5 para probar desa...
En Tutoriales Informáticos >> Manual Universal Restore (Clonacion c...
En Hardware >> Voltaje auto para Q6600 o manual (OC) ?
En Software >> manual Adobe Acrobat 9 Pro Extended??
 

 
Foroz comunity Tema RSS 




by phpBB  
informatica Videos graciosos webmasters theme by Scott Stubblefield Top foroz