shellscript

Nov 11 13:48

Obtener la interfaz de red wireless

awk -F: '/:/ {gsub(" ","",$1); print $1}' /proc/net/wireless
Nov 11 11:05

Listado hardware y sus identificadores

$ (lspci;lspci -n) | sort > lspci.lst
 
# esto obtiene una lista como la siguiente:
00:02.0 0300: 8086:27a2 (rev 03)
00:02.0 VGA compatible controller: Intel Corporation Mobile 945GM/GMS,
943/940GML Express Integrated Graphics Controller (rev 03)
01:00.0 0200: 11ab:4362 (rev 22)
01:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8053 PCI-E Gigabit
Ethernet Controller (rev 22)
02:00.0 0200: 168c:001c (rev 01)
02:00.0 Ethernet controller: Atheros Communications Inc.
Nov 07 09:13

Imprimir una columna de una linea filtrandola por su contenido con awk

Como me he decidido a guardar toda sentencia sed/awk que vaya usando y me lleve más de 5mins resolverla para tenerlo a mano a posteriori, aquí pongo otro snippet que imprimirá; una columna de una linea filtrandola por su contenido con una condición.
# esto imprimirá solo las columnas que contengan "root"
 
$ awk '{for (i=1;i<=NF;i++)  if ( $i ~ "root" ) print $i}' /proc/cmdline
 
# Se le podrían poner condiciones más complejas, por ejemplo, usando regex.
Lenguaje: 
bash
Nov 06 13:27

Sustituir un bloque de un archivo por un texto

#!/bin/sh
 
sed -i.bak -n -e '1,/### BEGIN AUTOMAGIC KERNELS LIST/ p' \
       -e '/### BEGIN AUTOMAGIC KERNELS LIST/ a\
Una lí­nea \
otra línea \
\
¿Una entrada del kernel?' \
       -e '/### END DEBIAN AUTOMAGIC KERNELS LIST/,$ p' menu.lst
 
### Explicación de parámetros ###
## -i.bak
# Hace que se sustituya en el mismo archivo (menu.lst), pero guardando una copia
# del original con la extensión que se le pase a -i .
Nov 04 11:30

Borrar la linea número N de un fichero con 'sed'

Aquellos que uséis ssh a diario con máquinas virtuales y demás, conoceréis el incordio que es arreglar esto: "Offending key in /home/usuario/.ssh/known_hosts:60" Normalmente yo abría con un "vi /home/usuario/.ssh/known_hosts +60" pulsaba dos veces la tecla 'd' y ':x', pero esto se hacía pesado, así que empecé a hacerlo con 'sed'. Y aquí tenéis dos ejemplos sencillos, uno para imprimir la linea N y otro para borrarla respectivamente:
sed -n '60p' /home/usuario/.ssh/known_hosts
sed -i '60d' /home/usuario/.ssh/known_hosts
Lenguaje: 
bash
Oct 27 18:20

Menú básico en bash

#!/bin/bash
 
 
while [ "$#" -gt 0 ]
do
	case $1 in
	-h | --help)
		echo "Ayuda del programa $(basename $0)"
                echo "   blablaba"
		shift
		;;
	-l | --list)
		echo "Lista de optiones:"
                echo " -h | --help  Descripción"
                echo " -l | --list  Descripción"
                echo " -a | --append [parámetro]  Descripción"
		shift
		;;
 
	-a | --append)
		echo "Opción con parámetro:"
                shift
                parameter="$1"
		shift
		;;
	*)  
		echo "Otras opciones"
		shift
		;;
	esac
done
Oct 09 05:47

Arrays en BASH

### Arrays en bash ###
 
## Declarar un array
# 1 - Con typeset o declare
typeset ARRAY[10] # Definido un array de nombre ARRAY de 10 elementos
typeset -a VECTOR # Definido un array de nombre VECTOR sin tamaño definid
decalre ARRAY[10] # Definido un array de nombre ARRAY de 10 elementos
declare -a VECTOR # Definido un array de nombre VECTOR sin tamaño definid
 
# 2 - Declarando y asignando
LIST[0]="Tomate"  # Se crea un array LIST cuyo primer elemento es "tomate"
NAMES=(Pepe Ana Juan Antonio María)  # Se crea una lista yle asigna los nombre.
 
## Asignar valores
# NOMBRE_ARRAY[indic
Oct 09 03:47

Obtener los módulos de los dispositivos PCI de una máquina

# search modules for pci devices
get_pci_modules () {
    while read IGNORE ID IGNORE
    do
        VENDOR=`echo $ID | cut -b1-4`
        DEVICE=`echo $ID | cut -b5-8`
        DEVENTRY=`echo 0x0000${VENDOR} 0x0000${DEVICE}`
        cat /lib/modules/`uname -r`/*.pcimap | grep "$DEVENTRY" | cut -d ' ' -f1
    done
}
 
for MODULE in `get_pci_modules < /proc/bus/pci/devices | sort -u` ; do
    echo $MODULE 
done
Oct 09 03:40

Obtener la IP de una interfaz de red (eth0), pero sólo la IP

ifconfig eth0 | awk '/inet addr/ {split ($2,A,":"); print A[2]}'
Oct 09 03:32

Borrar una línea específica con sed

# borrar la línea 18 del archivo '~/.ssh/known_hosts'
sed -i '18 d' ~/.ssh/known_hosts
 
# o también 
sed -i 18d ~/.ssh/known_hosts
 
# borrar algunas líneas:
# borrar 6 líneas a partir de la línea 8
sed -i 8,+6d file.txt 
 
 
# borrar la línea donde se encuentre el texto 'TO DELETE'
sed -i '/TO DELETE/ d' file.txt