PDF de programación - Bash: Ejemplos

Imágen de pdf Bash: Ejemplos

Bash: Ejemplosgráfica de visualizaciones

Actualizado el 17 de Abril del 2021 (Publicado el 25 de Septiembre del 2018)
990 visualizaciones desde el 25 de Septiembre del 2018
101,4 KB
18 paginas
Creado hace 17a (01/05/2007)
Bash: Ejemplos

Bash: Ejemplos

Por Paco Aldarias Raya

Impreso: 1 de mayo de 2007

Email: pacolinux arroba inicia punto es
Web: http://pagina.de/pacodebian
Con Linux Debian. En Valencia (España)
El documento tiene version .html, y .pdf, cambiando en el navegador la

parte final podrás acceder a ambos.

Este documento es de libre reproducción siempre que se cite su fuente.

Realizado con: LATEX

Índice

Índice

1. Introducción

2. bash

3. Arbol de directorios

4. Renombrar ficheros

5. Borrar los archivos contenidos en un fichero

6. Borrar los ficheros que comiencen con p en el directorio ac-

tual y en todos sus subdirectorios

7. Mover los ficheros

8. Para descomprimir todos los archivos zip de una carpeta en

otra

1

1

1

1

2

3

3

3

3

Por Paco Aldarias

1/17

Bash: Ejemplos

9. Copiar un fichero en otro poniendo la fecha y hora

10.Analizar el arranque y realizar algo

11.Enviar n mensajes de correo

12.Clonar usuarios

13.Sustituir un texto por otro

13.1. sec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.2. tr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

14.Quitar los blancos de los nombre de los archivos

15.Buscar todas las imagenes y renombrarlas por la hora actual

16.Renombrar canciones

17.Sacar las ips de las máquinas conectadas en la red indicada
17.1. opcion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17.2. opcion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17.3. opcion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18.Sacar el nombre de la maquina o dns

19.Reducir fotos

20.Cambiar todos los enlaces de las paginas de una carpeta por

otro enlace

21.Reemplazar un texto por un fichero

22.Quitar un texto en un fichero

23.Obtener la edad

24.Recursos del pc con bash

25.Script del dns dinamico cdmon

26.Bibliografía

4

4

5

5

6
6
6

6

6

7

8
8
8
9

9

10

10

10

11

12

12

13

17

Por Paco Aldarias

2/17

Bash: Ejemplos

1.

Introducción

2. bash

Vamos a ver ejemplo de uso del bash

3. Arbol de directorios

Para obtener el arbol de directorios.

func_recursiva()

{
for OBJ in *
do

if [ -L "${OBJ}" ]
then

#echo "[e] ${OBJ} <-- Enlace"
continue

fi

(
if [ -d "${OBJ}" ]
then

#echo "[d] ${OBJ} <-- Directorio"
cd "${OBJ}"
pwd
#du -s -c -h
func_recursiva

fi
)

#echo "[f] ${OBJ} <- Fichero"

done
}

func_recursiva

Por Paco Aldarias

3/17

Bash: Ejemplos

4. Renombrar ficheros

Elimina una extensión .tar final de archivo.tar.bz2.tar para dejarlo en

archivo.tar.bz2.

1. Suponiendo que el nombre del archivo no contenga ”.2 que los archivos

esten en el directorio en el que ejecutes esto:

for nombre in *.tar.bz2.tar; do

nuevo_nombre=‘echo $nombre | gawk -F. ’{print $1"."$2"."$3}’‘
mv $nombre $nuevo_nombre

done

2. Este guión, con la opción -ss, elimina el sufijo indicado de los objetivos:

for fich in *.tar; do mv fich $(nombase -ss.tar $fich);done

3. El signo del dolar indica el final de línea; la construcción s/x/y/ es la

clásica utilizada para sustituir x por y:

rename ’s/.tar$//’ *.tar

5. Borrar los archivos contenidos en un fiche-

ro

Esto borra los ficheros contenidos en fichero.txt, q es de la forma /carpe-

ta/fichero1.txt /carpeta/fichero2.txt

1. xargs -i rm "{}" < fichero.txt

2. for linea in ’cat fichero.txt’

do

rm $linea;

done

Por Paco Aldarias

4/17

Bash: Ejemplos

6. Borrar los ficheros que comiencen con p en
el directorio actual y en todos sus subdi-
rectorios

find ./ -name "p*" -exec rm -f {} \;

find -name ’p*’ -type f -exec rm {} \;

7. Mover los ficheros

Que contienen el texto Way a la carpeta /wind/musica/way/:

find /lector -name "*Way*" -exec mv {} /wind/musica/way/ \;

8. Para descomprimir todos los archivos zip

de una carpeta en otra

echo DESCOPRIMIENDO ZIPS
echo Ejemplo: ./unzip.sh /origen/ /destino

cd $1
for i in $(ls *.zip); do
f=$(echo $i | cut -d. -f1);
echo [*] Descomprimiendo $i en $2$f;
mkdir $1$f;
cd $1$f;
unzip $1$i -d $2/$f;
done

9. Copiar un fichero en otro poniendo la fe-

cha y hora

echo Ejemplo: ./copiar.sh fichero
echo copiando $1 $1$(date +%d-%m-%Y-%H-%M)
cp $1 $1$(date +%d-%m-%Y-%H-%M)

Por Paco Aldarias

5/17

Bash: Ejemplos

10. Analizar el arranque y realizar algo

Se trata de tener un arranque del dma controlado.
Me surgio la necesidad de que al arrancar mi disco duro, el cual no iba

bien. Me salía este error:

Oct 9 12:24:42 pacohost kernel: hda: dma_intr: error=0x84
{ DriveStatus ErrorBadCRC }

Oct 9 12:24:42 pacohost kernel: hda: dma_intr: status=0x51
{ DriveReady SeekComplete Error }

La idea era comprobar que si en el arranque sale este error desactive el

dma, paraque no salga mas este error.

Veamos los ficheros que utilizo:
Aquí analizo la salida de dmesg, si contiene la cadena status, aplico el

script hd.sh que desactiva el dma.

cat /etc/rc2.d/S01ifhd.sh
#!/bin/bash
echo ANALISIS DMA:
if [ -n "$(dmesg | grep ’status=0x51’)" ]; then

echo "Error de dma"
/root/hd.sh

else

echo OK DMA

fi

cat /root/hd.sh
hdparm -k1 -c0 -d0 -X64 /dev/hda

11. Enviar n mensajes de correo

Vamos a ver la forma de enviar n mesajes a un email:
Veamos el script:

echo Ejempplo: ./mailbucle.sh 10 [email protected]
echo enviando $1 mensajes a $2
for i in ‘seq 1 $1‘;

Por Paco Aldarias

6/17

Bash: Ejemplos

do
#echo "SPAMMMMMMMMMMMMMMMM" | mail -s "" paco
mail -u usuario -s "encabezado" $2 < kk.txt

Siendo kk.txt el fichero q se envia.

12. Clonar usuarios

Esto permite copiar todos los ficheros de un usuario en /etc/skel, para q

al crear un usuario tenga la misma configuración.

echo Ejemplo -siendo root-: ./skel.sh paco
usu=$1
echo Copiando ficheros del usuario $usu
cd /home/$usu
tar cpBf /etc/skel/$usu.tar.gz .

echo Extrayendo esqueleto del usuario $usu
cd /etc/skel/
tar xvBpf $usu.tar.gz
rm $usu.tar.gz

Usando ssh:

ssh usuario@maquina_remnota tar -cvpSf - / | tar -xvpf -

13. Sustituir un texto por otro

13.1.

sec

Sustituye .o por .ko

cat util | sed -e "s/.o/.ko/" > util1
mv util1 util

13.2.

tr

cat xx
abc def
ghi abc
jkl mno
abc pqr

Por Paco Aldarias

7/17

Bash: Ejemplos

tr abc 123 < xx
123 def
ghi 123
jkl mno
123 pqr

14. Quitar los blancos de los nombre de los

archivos

for i in *; do

nuevo=‘echo $i | sed -s ’s/\ //g’‘;
mv "${i}" ${nuevo};

done

O tambien así:

for i in *; do mv "$i" "‘echo $i | tr ’ ’ ’_’‘"; done

15. Buscar todas las imagenes y renombrar-

las por la hora actual

El script renombraba las imagenes en función de la fecha y hora, y en
el caso de que varias fotos fueran hechas en en mismo segundo, añadía una
letra al nombre (a, b o c).

#! /bin/bash
shopt -s extglob # for improved file pattern matching
for imgname in *.+(jpg|JPG);
do

newname="$(head $imgname|strings|sed -n ’/[0-9]\{4\}\:.*/ {s/ /+/g; s/:/-/g; s/$/.jpg/; p}’|uniq)"
# if there is already another file with the same name append an extension (b or c).
# Just thinking a bit more this can be improved, but IMHO it will work OK:
if ls ${newname%%.jpg}* &> /dev/null; then

[ -f ${newname%%.jpg}b.jpg ]; then newname=${newname%%.jpg}c.jpg

if
elif [ -f ${newname} ]; then newname=${newname%%.jpg}b.jpg
fi

fi

mv ${imgname} ${newname}

Por Paco Aldarias

8/17

Bash: Ejemplos

done

16. Renombrar canciones

Vamos a cambiar de nombre a muchos archivos, son archivos mp3 y la

estructura es la siguiente:

Grupo - cancion - num - Disco.mp3 (el grupo tiene espacios en blanco)
y quiero que termine en num-cancion.mp3.
Script para bash

for i in *.mp3
do

titulo=‘id3 -lR $i | grep -e "^Title" | cut -f2- -d ’ ’‘
artista=‘id3 -lR | grep -e "^Artist" | cut -f2- -d ’ ’‘
album=‘id3 -lR | grep -e "^Album" | cut -f2- -d ’ ’‘
num=‘id3 -lR | grep -e "^Track" | cut -f2- -d’ ’‘
mv "$i" "$artista-$titulo-$num-$album.mp3"

done

Lees directamente de cada fichero mp3 la información que tiene para

renombrar el archivo con su contenido

17. Sacar las ips de las máquinas conectadas

en la red indicada

17.1.

opcion

# Nmap-pacolinx
# Este script saca las ips de las máquinas conectadas en la red indicada
# Por Paco Aldarias
# Fecha: 15.05.04
# pacolinux arroba inicia punto es
# Valencia - España

t=temp.txt # fichero temporal
f=nmap.txt # fichero resultado
r=192.168.0.1-3

# rango de busqueda de la red

echo [Nmap-pacolinx] Maquinas conectadas en la red $r

Por Paco Aldarias

9/17

Bash: Ejemplos

nmap -sP -n $r > $t
lineas=‘wc -l < $t‘ # cogemos la linea
I=3
while [ $I -lt $lineas ] # recorremos todas la lineas menos la ultima
do
linea=‘sed -n ${I}l $t‘
ip=‘echo $linea | cut -d" " -f2‘
echo $ip >> $f
I=‘expr $I + 1‘
done
cat $f
rm -f $t $f

17.2.

opcion

esto tb se puede hacer asi:

nmap -sP 192.168.0.* |grep appears |cut -f3 -d" " |tr \( " " |tr \) " " \
> nmap.txt

Esto filtra la linea q tienes las ips:

nmap -sP 192.168.0.* |grep appears

Es decir saca esto:

Host paco (192.168.0.1) appears to be up.

Esto saca la ip, q la 3ra cadena:

nmap -sP 192.168.0.1 |grep appears |cut -f3 -d" "

Es decir saca esto:
(192.168.0.1)

La última parte reemplaza los parentesis por blancos:

nmap -sP 192.168.0.* |grep appears |cut -f3 -d" " |tr \( " " |tr \) " "

Es decir saca esto: 192.168.0.1

17.3.

opcion

nmap -sP 192.168.0.0-1 | awk ’/appears to be up/ {print $3}’ | sed ’s/[()]//g’ \
> nmap.txt

Por Paco Aldarias

10/17

Bash: Ejemplos

18. Sacar el nombre de la maquina o dns

La orden es host x.x.x.x siendo x.x.x.x la ip.
Ejemplo:

#host 192.168.0.1
Name: paco
Address: 192.168.0.1

Queremos que saque el nombre, en este paco seria:

paco

Se puede hacer asi:

host 192.168.0.1 | grep Name | cut -f2 -d " "

o tb así:

host 192.168.0.1 | awk ’/Name: / {print $2}’

19. Reducir fotos

apt-get install libjpeg-progs
mkdir ../fotos-reducidas
for a in ‘ls *.jpg‘; do

djpeg -scale 1/4 $a | cjpeg -q 95 > ../fotos-reducidas/$a

done

20. Cambiar todos los enlaces de las paginas

de una carpeta por otro enlace

Esto cambia el enlace http://pagina.de/pacodebian por http://www.iespana.es/pacolatex

en todas las paginas web del directorio.

find . -type f -name \*.html -print |
  • Links de descarga
http://lwp-l.com/pdf13613

Comentarios de: Bash: Ejemplos (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad