scripts

variables d'entorn d'un procés

si el procés tengués el pid 3660 a /proc/3660/environ accediriem a totes les variables d'entorn relacionades amb aquell procés. el caràcter de separació és null (\0), amb una petita traducció de caràcters podem llegir-ho amb facilitat:

cat /proc/3660/environ | tr '\0' '\n'

comprovar paràmetres

# Check command-line options
ASSUME="" # default value. Don't assume yes
while getopts np:y OPTION
do
    case $OPTION in
    n)  export DEBIAN_FRONTEND=noninteractive
        ;;
    p)  export DEBIAN_PRIORITY="$OPTARG"
        ;;
    y)  ASSUME=" --assume-yes"
        ;;
    esac
done

muzgajim.sh

aquest script s'ha d'executar regularment per l'usuari que utilitzi el gajim.

#!/bin/bash
 
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11"
 
# compte gajim
COMPTE="jabber.dk1"
 
# metode de comprovacio externa
echo -n "* comprovant ip real:  "
PETICIONS="http://www.dnsstuff.com/ http://www.myip.nl/ http://www.hostip.info/"
for i in $PETICIONS ; do
    # echo "DEBUG [$i]"
    PAGINA=`lynx --dump "$i"`
    IPREAL=`( echo "$PAGINA" | grep -m 1 "IP:" || echo "$PAGINA" | grep -m 1 "ddress:" ) | cut -d":" -f2 | cut -d" " -f2`
    # echo "DEBUG: IPREAL [$i] [$IPREAL]"
    [ "$IPREAL" != "" ] && break
done
 
echo "$IPREAL "
 
# ip status
echo -n "* comprovant ip del status: "
IP_GAJIM=`gajim-remote get_status_message "$COMPTE"`
[ "$?" != "0" ] && echo "error en comunicar-se amb el gajim" && exit 1
 
echo "$IP_GAJIM"
 
if [ "$IPREAL" != "$IP_GAJIM" ]; then
    echo "canviant el missatge d'estat del compte [$COMPTE]"
    gajim-remote change_status online "$IPREAL" "$COMPTE"

muzfotos

Script per ordenar per dia i hora segons la informació exif de la pròpia imatge.

#!/bin/bash
 
# repositori de les fotos
DFOTOS="/media/hdb2/dadesmuz/docs/fotos"
# DFOTOS="/tmp/un"
# DVIDEOS="/media/hdb2/dadesmuz/docs/fotos/videos"
 
##########################################
# a partir d'aqui no fa falta tocar res
echo "muzfotos v0.4"
echo "repositori de fotos: $DFOTOS"
 
# directori on cercar fotos (opcional)
DORIG="$1"
 
# extensions de les fotos i els videos separades per espais
EXT="jpg avi tiff mov mpg"
# EXT="jpg"
 
# comprovacions de seguretat
comprova_dirs(){
    if [ ! -w "$DFOTOS" ]; then
        echo "ERROR: el directori [$DFOTOS] no existeix o no tens permis d'escriptura!"
        exit 1
    fi
}
 
comprova_soft(){
    # programes necessaris
    # si nomes s'utilitza el sistema per directoris el gphoto no
    # es realment necessari i es pot eliminar
    SOFT="exif gphoto2"
    for i in $SOFT ; do
        ON=`which $i`
        [ "$ON" == "" ] && echo "ERROR: no s'ha trobat l'executable [$i]" && exit 3
    done
}
 
##########################################
 
# medote per directori. genera un llistat dels fitxers
dir_orig(){
    if [ ! -e "$DORIG" ]; then
        echo "ERROR: no existeix el directori especificat [$DORIG]!"
        exit 2
    fi
    # echo "cercant fotos dins [$DORIG]..."
    # ajustam les extensions
    for i in $EXT ; do
        EXTS="${EXTS}${SEP}${i}"
        SEP='\|'
        # echo "DEBUG: extensions [$EXTS]"
    done
    LLISTAT=`find "$DORIG" -iregex ".*\.\($EXTS\)"`
    # echo "DEBUG: llistat dir_orig [$LLISTAT]"
    # echo "$LLISTAT"
}
 
# metode gphoto. genera un llistat dels fitxers
fgphoto(){
    #directori temporal
    DFOTEMP=`mktemp -d /tmp/fotos_XXXXXX`
    cd "$DFOTEMP"
    # echo "DEBUG: creant el directori temporal $DFOTEMP"
    # echo "iniciant el gphoto2..."
    gphoto2 -P
    if [ "$?" != "0" ]; then
        echo "ERROR: hi ha hagut algun problema amb el gphoto2!"
        rm -rf "$DFOTEMP"
        exit 4
    fi
    # LLISTAT=`find "$DFOTEMP"`
    # ajustam les extensions
    for i in $EXT ; do
        EXTS="${EXTS}${SEP}${i}"
        SEP='\|'
        # echo "DEBUG: extensions [$EXTS]"
    done
    LLISTAT=`find "$DFOTEMP" -iregex ".*\.\($EXTS\)"`
    # echo "DEBUG: llistat fgphoto [$LLISTAT]"
    # echo "$LLISTAT"
}
 
fllistat(){
    # si li passam un directori com a parametre utilitza
    # el metode per directori
    if [ "$DORIG" != "" ]; then
        # LLISTAT=`dir_orig`
        dir_orig
        [ "$?" != "0" ] && echo "$LLISTAT" && exit 1
    else
        # LLISTAT=`fgphoto`
        fgphoto
        [ "$?" != "0" ] && echo "$LLISTAT" && exit 1
    fi
    # echo "DEBUG: fllistat [$LLISTAT]"
}
 
# rutina per extreure la data i transformar-la en una cadena
# valida per a noms de fitxers
trans_data_exif(){
    FOTO="$1"
    DIA_HORA=`exif -t 0x0132 "$FOTO" | grep -m 1 Value | cut -d" " -f4-5 | tr ":" "-"`
    [ "$DIA_HORA" == "" ] && DIA_HORA="unknown"
    echo "$DIA_HORA"
}
 
# rutina de creacio de directoris i fitxers
dirs_fitxers(){
    # FITXERS=`fllistat`
    FITXERS="$LLISTAT"
    [ "$?" != "0" ] && echo "$FITXERS" && exit 1
    # echo "DEBUG: llistat dels fitxers [$FITXERS]"
    IFSORIG="$IFS"
    IFS="
"
    for i in $FITXERS ; do
        # echo "DEBUG: comprovant fitxer $i"
        DIAHORA=`trans_data_exif $i`
        # echo "DEBUG: [$i] -> [$DIAHORA]"
        DIA=`echo "$DIAHORA" | cut -d" " -f1`
        HORA=`echo "$DIAHORA" | cut -d" " -f2`
        FEXT=`echo "${i##*.}" | tr [A-Z] [a-z]`
        # comprovam l'existencia d'un directori amb el dia
        DIRDIA="${DFOTOS}/${DIA}"
        [ ! -e "$DIRDIA" ] && mkdir -v "$DIRDIA"
        FNOM="$DIRDIA/${DIA}_${HORA}.$FEXT"
        # algunes cameres no posen l'hora. utilitzam un incremental
        # si trobam una foto amb el mateix nom
        CONT=1
        while [ -e "$FNOM" ]; do
            # echo "DEBUG: el fitxer [$FNOM] ja existeix"
            FNOM="$DIRDIA/${DIA}_${HORA}_${CONT}.${FEXT}"
            let "CONT +=1"
        done
        # copiam la foto al desti amb el nom canviat
        cp -v "$i" "$FNOM"
    done
 
    IFS="$IFSORIG"
}
 
# cridam a les funcions
comprova_dirs
comprova_soft
 
#fgphoto
 
fllistat
dirs_fitxers
 
# llencam el gqview
gqview "$DFOTOS"
echo "adeu!"

instal.sh

script d'instal·lació d'una màquina intranet. presuposa un servidor ldap entra d'altres coses.

#!/bin/bash
 
# script de configuració de la instalació de màquines linux
# abo@brujulatelecom.com
 
SNOM="# brujiinstal"
VER="v0.41"
echo "$SNOM $VER"
 
 
 
########
# ldap #
########
SLDAP=deposit.brujulatelecom.com
BASEDN="dc=brujulatelecom,dc=com"
 
# paquets
PAQUETS="libpam-ldap libnss-ldap nfs-common"
 
 
##################
##              ##
## pawa rutines ##
##              ##
##################
 
 
 
# rutina de comprovacio de versio
LVER="$SNOM $VER - NO MODIFICAR AQUESTA LINEA! #"
cercaV(){
    # se li passa un fitxer com a paràmetre
 
    echo -e "\n\t ____________________________________"
    echo -e "\t|__ comprovant $1 __|"
 
 
    # si no el troba mostra un error
    if [ ! -e "$1" ]; then
	echo -e "  __ ERROR!!: NO S'HA TROBAT $1  __"
	echo "  __ COMPROVA QUE ELS PAQUETS RELACIONATS ESTIGUIN INSTALATS __"
	exit 1
    fi
    # si no troba la versió retorna el valor 99
    TEST=`cat $1 | grep "$VER"`
    if [ -z "$TEST" ]; then
	return 99
	else
	    echo -e "\t## $1 no necessita cap modificació ##"
    fi
}
 
# rutina de backup d'arxius modificats
backupF(){
    # se li passa un arxiu com a parametre i
    # fa una copia incremental
    ARXIU=$1
    VELL=$ARXIU.vell
    CONTADOR=1
    # increment en cas que existeixi el mateix arxiu
    while [ -e "$VELL$CONTADOR" ] ; do
	echo "  __ $VELL$CONTADOR ja existeix __"
	let CONTADOR=$CONTADOR+1
	# VELL=$VELL$CONTADOR
    done
    echo -e "  __ copiant $ARXIU a $VELL$CONTADOR __\n"
    cp $ARXIU $VELL$CONTADOR
}
 
# rutina per comprovar el resultat de la modificació
# d'un arxiu
compF(){
    # espera un fitxer
    cat "$1"
    echo -e "\n\t__ comprova que la configuració sigui correcte __"
    read a
}
 
 
###################
##               ##
## modificacions ##
##               ##
###################
 
# paquets
finstpaquets(){
    # modificam el apt
    DIST=`grep -m1 "^deb.*://.*main.*" /etc/apt/sources.list`
    case $DIST in
	*debian*testing|*debian*etch*)
	    REPOS="deb http://ftp.fr.debian.org/debian/ testing main contrib non-free"
	;;
	*debian*stable*|*debian*sarge*)
	    REPOS="deb http://ftp.fr.debian.org/debian/ stable main contrib non-free"
	;;
	*ubuntu*breezy*)
	    REPOS="deb http://es.archive.ubuntu.com/ubuntu breezy main restricted universe multiverse
deb http://es.archive.ubuntu.com/ubuntu breezy-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu breezy-backports main universe multiverse restricted
deb http://ubuntu-backports.mirrormax.net/ breezy-extras main universe multiverse restricted"
	;;
	*ubuntu*dapper*)
	    REPOS="# principals
deb http://es.archive.ubuntu.com/ubuntu/ dapper main restricted universe multiverse
deb http://es.archive.ubuntu.com/ubuntu/ dapper-updates main restricted universe multiverse
deb http://es.archive.ubuntu.com/ubuntu/ dapper-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ dapper-security main restricted universe multiverse
 
# penguin liberation front (w32codecs, opera, etc)
deb http://packages.freecontrib.org/ubuntu/plf/ dapper free non-free
# wine dapper (oficial de la gent de winehq)
deb http://wine.budgetdedicated.com/apt dapper main"
	;;
    esac
    echo "$REPOS" > /etc/apt/sources.list
    apt-get update
 
    # s'han de forcar els paquets perque s'instal.lin
    # amb el apt sense demanar es
    export DEBIAN_PRIORITY=noninteractive
    export DEBIAN_FRONTEND=critical
    for i in $PAQUETS ; do
        echo "comprovant paquet [$i]"
        dpkg -s $i > /dev/null 2>&1
        if [ "$?" != "0" ]; then
            echo "instal.lant [$i]"
            apt-get install $i
        fi
    done
}
finstpaquets
 
 
nss(){
#    echo -e "\n\n\t ____________________________________"
#    echo -e "\t|__ configurant /etc/nsswitch.conf __|\n"
 
    ARX=/etc/nsswitch.conf
    cercaV $ARX
    if [ "$?" == "99" ]; then
	backupF $ARX	
	NOU=`sed "s/^passwd:.*$/$LVER\npasswd: compat ldap/" $ARX`
	NOU=`echo "$NOU" | sed "s/^group:.*$/group: compat ldap/"`
	NOU=`echo "$NOU" | sed "s/^shadow:.*$/shadow: compat ldap/"`
	echo "$NOU" > $ARX
	# echo "$NOU"    
	compF $ARX
    fi
}
nss
 
libnss(){
    ARX=/etc/libnss-ldap.conf
    cercaV $ARX
    if [ "$?" == "99" ]; then
	backupF $ARX
	NOU="$LVER\nhost $SLDAP\nbase $BASEDN\nldap_version 3\n"
	echo -e $NOU > $ARX
	compF $ARX
    fi
}
libnss
 
ldapconf(){
    # aquesta es la que miren els clients ldap per fer peticions
    ARX=/etc/ldap/ldap.conf
    cercaV $ARX
    if [ "$?" == "99" ]; then
        backupF $ARX
        NOU="$LVER\nBASE dc=brujulatelecom, dc=com\nURI ldap://deposit\n"
        echo -e $NOU > $ARX
        compF $ARX
    fi
}
ldapconf
 
#######
# PAM #
#######
 
confpam(){
    PAMARXS="auth account session password"
    for F in $PAMARXS ; do
	ARX="/etc/pam.d/common-$F"
	cercaV $ARX    
	if [ "$?" == "99" ]; then
	    case "$F" in
		auth)
		    #if [ "$F" == "auth" ]; then
		    NOU="$LVER
$F	sufficient	pam_ldap.so
$F	required	pam_unix.so try_first_pass nullok_secure
"		;;
 
		session)
	    	    #else
		    NOU="$LVER
$F	required	pam_mkhomedir.so umask=0077
$F	sufficient	pam_ldap.so
$F	required	pam_unix.so
"
		;;
 
		*)
		    NOU="$LVER
$F	sufficient	pam_ldap.so
$F	required	pam_unix.so
"		
		;;
 
	    # fi	    
	    esac
 
	    backupF $ARX
	    echo "$NOU" > $ARX
	    compF $ARX
	fi
    done
}
confpam
 
libpam(){
    # 
    ARX=/etc/pam_ldap.conf
    cercaV $ARX    
    if [ "$?" == "99" ]; then
	NOU="$LVER\nhost $SLDAP\nbase $BASEDN\nldap_version 3\npam_password crypt\n"
	backupF $ARX
	echo -e "$NOU" > $ARX
	compF $ARX
    fi    
}
libpam
 
echo "adeu!"

prompterror

script que retorna un valor diferent de 0. està orientat a usar-se amb el prompt perquè avisi quan el codi d'error d'una comanda ha sigut diferent de 0.

#!/bin/bash
# s'ha de posar aixo a $PS1: \$(prompterror \$?)
# ex: PS1="\u@\h:\w\$(prompterror \$?)\$ "
 
ERROR="$1"
 
[ "$ERROR" == "0" ] || [ "$ERROR" == "" ] && exit
 
echo "($ERROR)"
scripts/start.txt · Darrera modificació: 2007/12/21 16:30 per muzzol
chimeric.de = chi`s home Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0