Download - Intérprete de Comandos Script
1
Intérprete de ComandosScript
Kepa Bengoetxea
1
Referencia:
• http://www.tldp.org/LDP/abs/html/• http://www.e-ghost.deusto.es/docs/shellScriptin.html• man bash• http://es.tldp.org/Manuales-LuCAS/blfs-es/blfs-es-5.0/postlfs/profile.html
1
Emulador de Terminal
• Emulador de terminal:Un emulador de terminal es un programa informático que simula el funcionamiento de un terminal de un ordenador central a través de una red de telecomunicaciones entre dicho ordenador central y el ordenador que ejecuta el emulador de terminal
• Existen diferentes “emuladores de terminal”:
– El emulador de terminal por excelencia es Telnet
– En los ordenadores personales destacan PuTTY y ssh– Para el escritorio Gnome: gnome-terminal– Para sistema de ventanas X Window System: xterm
1
Emulador de Terminal
• Uso emulador de Terminal:– Acceder a un shell de UNIX – Se limitan a enviar y recibir caracteres de texto a través de
una red de comunicaciones. Los caracteres enviados se corresponden con pulsaciones en el teclado y los caracteres recibidos corresponden con la pantalla visualizada. Lo único que los diferencia es el tipo de terminal físico emulado. Dos modelos básicos:VT-100 y 3270
1
Shell o Intérprete de Comandos
• Un shell es un programa que interpreta y ejecuta los comandos que el usuario escribe en un indicador de línea de comandos. Cuando inicie una terminal la aplicación activará el shell predeterminado especificado en la cuenta del sistema.
1
Shell o Intérprete de Comandos
• Tipos:– Sh: Bourne shell– Csh:C shell. Ampliación sh con particularidades del
lenguaje C.– Bash: GNU Bourne-Again shell. Linux (defecto). Parecido
al sh. Sigue el standard IEEE POSIX(Portable Operating System Interface X de Unix, se traduce en, Sistema Operativo Portable basado en UNIX)
– Tcsh:Es la versión csh para Linux.• Cada usuario tiene un shell por defecto, que se asocia a la
hora de crear el usuario.
1
Shell o Intérprete de Comandos• Un Interprete de Comandos “bash” es un aplicación de
usuario, no es parte del kernel(Si hacemos make xconfig no aparece por ningún lado. )
$dpkg-query -l bash->bash
3.2-0ubuntu7
$ dpkg-query -L bash
/bin/bash
/etc/skel/.bashrc
/etc/skel/.profile
/etc/skel/.bash_logout
rpm -qf /bin/bash ->bash-2.05b-38
$rpm -ql bash
/bin/bash
/bin/bash2
/bin/sh
/etc/skel/.bash_logout
/etc/skel/.bash_profile
/etc/skel/.bashrc ...
1
Shell o Intérprete de Comandos
• Intérpretes de comandos: Command.com, bash...• Su funcionamiento es:
•Lee la entrada introducida por el usuario •Comprueba si el comando es
1.-un comando interno (Ejm:/bin/ls)2.-un alias (alias dir='ls')3.-un programa ejecutable(./principal.exe)
buscando en los caminos de su “echo $PATH”, si no lo encuentra dará un error.•Si lo encuentra,lo ejecuta. Si no es un comando o un programa dará error.
1
Curiosidades:
• Historial de comandos: – history: muestra los comandos ejecutados por el usuario
asociados a un número– !nº : ejecuta el comando de dicho número.– Tecla arriba: ejecuta el último comando ejecutado.
• Uso del tabulador: ap [tab] rellena con apache
1
Curiosidades:
• Uso ?,*,[]: – grep 4 *– grep 4 ???eba– grep 4[1-3] prueba
414243
– grep [Kk]epa prueba– grep 4[13] prueba
4143
1
Creación de un ScriptScript->Es un fichero de comandos.1. Editar:$vi ejemplo
#crea un directorio ’lana’ y muestra sus ficheros ocultosmkdir lanacd lanals –a
2. $chmod u+rx ejemplo3. #copy ejemplo /usr/local/bin/4. $ejemplo Nota: ./ejemplo si el script no está en los caminos del
PATH (mirar con echo $PATH)
1
Entorno y Variables#echo $SHELL ->/bin/bash#vi mensaje
echo “Estás en un curso de A.S.O: $nombre”#nombre=”Linux”#./mensaje#?#echo $nombre#?#export nombre #./mensaje#?Abre una nueva terminal:gnome-terminal#./mensaje
1
Entorno y Variables
./mensaje ->Llamada a una bash hijo, que ejecuta dicho script.
#vi mensajesleep 15
# chmod 700 mensaje
(Antes de ejecutar)
# ps -lFF S UID PID PPID C PRI NI ADDR SZ WCHAN RSS PSR STIME TTY TIME
CMD
0 S kepa 3860 3858 0 76 0 - 1099 wait4 1244 0 18:14 pts/2 00:00:00 bash
0 R kepa 4093 3860 0 77 0 - 563 - 748 0 22:23 pts/2 00:00:00 ps -lF
1
Entorno y Variables
(Después de ejecutar)#./mensaje &[1] 4100
# ps -lFF S UID PID PPID C PRI NI ADDR SZ WCHAN RSS PSR STIME TTY TIME
CMD
0 S kepa 3860 3858 0 75 0 - 1099 wait4 1248 0 18:14 pts/2 00:00:00 bash
1 S kepa 4100 3860 0 75 0 - 1099 wait4 1252 0 22:26 pts/2 00:00:00 bash
0 S kepa 4101 4100 0 77 0 - 933 - 480 0 22:26 pts/2 00:00:00 sleep 20
0 R kepa 4102 3860 0 78 0 - 563 - 748 0 22:26 pts/2 00:00:00 ps -lF
1
Entorno y Variables
• 3 zonas de memoria:
– Área de datos locales al shell– Área de datos globales al shell– Área de datos globales a todos los shell
1
Entorno y Variables
• Área de datos locales:
– Sólo es accesible en ese shell– Ningún subproceso(hijo) que se genere puede
acceder a él– Uso: Mientras se ejecuta el proceso– Se crea con: nom-variable-local=X– Se borra con:unset nom-variable-local
1
Entorno y Variables
• Área de datos globales al shell:
– Accesibles para tu bash y los hijos de ese bash. Si abres otro shell o terminal no vale!
– Crear: export nombre=”Linux” ó nombre=”Linux” y export nombre
– Borrar: export –n nombre
1
Entorno y Variables
• Área de datos globales a todos los shell:– Accesibles durante toda la sesión– Uso: Conocer las características de la sesión como: tipo
de terminal, rutas de búsqueda, directorio de presentación, indicativo de sistema etc...
– Editando /etc/profile; $HOME/.bashrc; $HOME/.bash_profile
#vi .bash_profilePATH=$PATH:$HOME/binexport PATH
1
Entorno y Variables:Comandos
• set: Muestra la lista de variables locales definidas.• env:Muestra las variables globales o de entorno. Son
utilizadas por el sistema pero están a disposición del usuario.
• HOME: Contiene cual es dir.trabajo• PATH: Contiene lista de directorios a buscar• CDPATH:Contiene una lista de directorios a los que
podremos acceder sin añadir su path.• PPID:Contiene el identificador de proceso padre• PWD: el path del directorio donde estoy
1
Entorno y VariablesComandos:echo
• SHLVL: Indica el nivel de anidación de intérpretes de comandos invocados.
• RANDOM: devuelve un número aleatorio.• SECONDS: muestra los segundos desde que se invocó.
• echo:Muestra el contenido(variable o texto)• echo $HOME
– >/home/kepa• echo –e "el contenido de mi carpeta:\n `ls -a` "
Nota:La opción -e permite incluir carac-s escape y comandos entre comillas graves dentro de texto con comillas dobles (` es la tecla de donde esta el [)
1
Entorno y Variables
• Las variables en el bash son sin tipo, son una lista de caracteres que permite operaciones aritméticas si todos los caracteres son dígitos.
• Ejm:a=1a=`expr $a + 1`echo "$a"a="b"echo `expr $a + 1`
$ ./pru 2expr: argumento no numérico
1
Comandos:echo
• echo– Caracteres escape:
– \c evita el salto de línea– \n inserta un salto de línea– \f inserta un salto de página– \t inserta un tabulador– \v inserta un tabulador vertical– \b código de retroceso– \r retorno de carro– \nnnn genera el código ASCII del número octal
1
Comandos:echoCaracteres especiales (*,$,\,?,etc) son interpretados antes de pasarlos a echo, para controlar que tengan efecto o no se utilizan:
– Comillas simples(‘): Impide la interpretación» echo ‘$BEGO‘ ->$BEGO
– Comillas graves(`): Lo interpreta como comando» echo –e " mi carpeta:\n `cd` “ ->/home/kepa
– Comillas dobles("): Permite la intepretación de $,\, comillas simples, comillas dobles
» echo "$HOME“ ->/home/kepa– \ Elimina el significado del sgte carácter
» echo "\$HOME"->$HOME
1
Estructuras de Control:test
• test: permite realizar comparaciones entre valores y variables, así como una serie de chequeos sobre ficheros– Comparar dos cadenas:
$test “hola” = “hola”echo $?0$test “hola” = “hola1”echo $?1
1
Estructuras de Control:test– Comparar dos variables: cadenas
nomvar1=”kaixo”nomvar=”kaixo”test $nomvar = $nomvar1echo $?0
– Comparar dos variables: númerosnum1=1num2=1test $num1 = $num2echo $?0
1
Estructuras de Control:test
– Tratamiento de cadenas:• test $cad1 = $cad2• test $cad1 != $cad2• test -z $cad #verdadero si cad esta vacía• test -n $cad #verdadero si cad no es nula• test $cad #verdadero si cad no es nula
– Tratamiento de expresiones numéricas:• test $num1 -eq $num2• test $num1 -ne $num2• test $num1 -lt $num2• test $num1 -le $num2• test $num1 -gt $num2• test $num1 -ge $num2
1
Estructuras de Control:test• Tratamiento de Ficheros:
Ejm: nomfich="prueba.txt" test -f $nomfich
echo $? -> 0 – Retorna true(0) si...test -e $nomfich #si existe el fichtest -f $nomfich #si es fich normal (no un dir o un
dispositivo)test -s $nomfich #si su tamaño es distinto de 0test -d $nomfich #si es directoriotest -b $nomfich #si es un disp. de bloque (fd0,hda, ...)
1
Estructuras de Control:test
• Tratamiento de Ficheros: test -c $nomfich #si es un disp. de carácter (keyboard,
modem, sound card, etc.)test -p $nomfich #si es una tuberíatest -h/-L $nomfich #si es un enlace simbólicotest -S $nomfich #si es un sockettest -r $nomfich #si tienes permiso de lecturatest -w $nomfich # si tienes permiso de escrituratest -x $nomfich # si tienes permiso de ejecucióntest -O $nomfich # si eres el propietario
1
Estructuras de Control:test
• Opciones Fichero: Retorna true si...test -G $nomfich #si pertenece al grupo del ficherotest -N $nomfich #si ha sido modificado desde la última
vez que lo leístetest $nomfich1 -nt $nomfich2 #Si $nomfich1 es más
reciente que $nomfich2test $nomfich1 -ot $nomfich2 #Si $nomfich1 es posterior
a $nomfich2test $nomfich1 -ef $nomfich2 #Si $nomfich1 y $nomfich2 son enlaces duros del mismo fichero
1
Estructuras de Control:test
• Opciones:– ! expr devuelve valor booleano contrario a la expr– expr1 -a expr2 es un AND– expr1 -o expr2 es un OREjm:y=1x=1if test $x -eq 1 -a $y -eq 1then echo "iguales"fi
1
Estructuras de Control:test
– Ejemplo:if test -e $1then echo "El fichero $1 existe"else echo "El fichero $1 no existe"fi
1
Comandos:read
• read: Permite la introducción de valores a través de un guión.
echo "introduce un directorio"
read dir
if test -d $dir
then
echo "El contenido del directorio es $dir"
echo "`ls $dir`"
fi
1
Comandos:expr• Trabajar con números: expr
echo `expr 2 + 200` -> 202expr 4 \* 2expr 4 \> 2expr 4 % 2expr 4 \>= 2expr 4 / 2Nota: \ para evitar mezclar con los caracteres
especiales: *(cualquier carc),>,< (redireccionamiento)....
1
Comandos:expr
• Ejm1: $vi pru
echo "Introduce dos números:"read n1 n2echo "La suma es `expr $n1 + $n2` "
$ chmod u+x pru$ ./pruIntroduce dos números:2 5La suma es 7
1
Comandos:expr
• Ejm2:$vi pru
echo "Introduce dos números:"read n1 n2echo "La multiplicación es `expr $n1 \* $n2` "
$ chmod u+x pru$ ./pruIntroduce dos números:2 5La multiplicación es 10
1
Estructura de Control: números y [ ]
• Otra manera de trabajar con números: [ ]if [ $valor1 -eq(=) $valor2 ] then
echo $valor1fi
Dejar un espacio
1
Estructura de Control:Cadenas: test,[[]],(())
• test :Ejm: if test $1 = "LINUX" then echo "$1=LINUX"fiif test $1 = $2 then echo "$1=$2"fi#no utilizar -eq con caracteres!
1
Cadenas:test,[[]],(())
• [[ ]] :Ejm: if [[ $1 == "LINUX" ]] then echo "$1=LINUX"fiif [[ $1 == $2 ]] then echo "$1=$2"fi#no utilizar -eq con caracteres!#no utilizar -eq con caracteres!if [[ $1 -eq $2 ]]if [[ $1 -eq $2 ]] then echo "$1=$2"then echo "$1=$2"fifi
1
Uso:test,[[]],(())
if (( $1-eq $2 )) then echo "$1=$2"fiif (($1==$2)) then echo "$1=$2"fi
1
Entorno y Variables:Parámetros
• Parámetros: $0,$1,$2,$3...$9– $0 contiene el nombre del script– $1 el primer parámetro que se le pasa al script.– $# indica el nº de parámetros con el que se ha llamado
al script.– $* lista de todos los parámetros.– $? código de error generado por la última orden. (0 true
y <>0 false)
1
Entorno y Variables:Parámetros
• shift: Si necesitamos más de 9 parámetros, se desplaza hacia la izquierda en una posición, así $1 toma el valor de $2
• Otra manera de obtener los argumentos después del $9, es utilizando llaves, por ejm: ${10}, ${11}, ${12}Ejm: $vi pruecho "${11}"
./pru 1 2 3 4 5 6 7 8 9 10 1111
1
Entorno y Variables: Parámetros
echo "El nombre del programa es $0"echo "El valor del primer parámetro es $1"echo "El valor del segundo parámetro es $2"echo "El numero de parámetros introducido es $#"echo "La lista de todos los parámetros es $*"shift echo "El valor del segundo parámetro después de un shift queda
en $1"echo "El valor que retorno es $?"
./pru 1 2 3 4 5 6 7 8 9 10 11
1
Estructuras de Control: Secuencia
• Secuencial comandos:$ ls dir1 ; ls dir2 ; ls dir3 > fich.txt
• Grupo de comandos:$ (ls lana;ls dos) > fitx.txt
1
Trucos
• Expansión de llaves:$ echo {one,two,red,blue}fishonefish twofish redfish bluefish
• Sustitución de Comandos: $(command) donde command tiene salida estándar. Se usa para asignar el valor a una variable o para pasar como parámetro a otro comando.
$ date +%d-%b-%Y
24-sep-2007
$ today=$(date +%d-%b-%Y)
$ echo $today
24-sep-2007
$ rpm -ql $(rpm -qa | grep httpd)
1
Estructuras de Control:For
• For: ejecuta tantas veces como elementos en listafor contador in 1 2 3do
echo "El bucle durante $contador veces"doneNota: Va cogiendo los diferentes valores de la lista hasta
que finaliza cuando contador es null.
1
Estructuras de Control:For
• For: ejecuta tantas veces como elementos en listacadena=$(seq 1 3)for a in $cadenado
echo holadoneseq 9 -1 1seq 1 9
1
Estructuras de Control: Select
• select: Similar al for. Una vez ejecutado el grupo de comandos volverá a mostrarnos la lista de opciones sucesivamente hasta que pulsemos (Ctrl+C ó Ctrl+D)select user in alum301 alum302 alumn303do
echo "Enviando mensaje a $user"mail $user <msg
done
1
Estructuras de Control:Select
• select:$ ./pru1) alum3012) alum3023) alumn303#? 2 (Introducido por teclado)Enviando mensaje a alum302
1
Estructuras de Control:Select
• select:#? 3 (Introducido por teclado)Enviando mensaje a alumn303#? /home/kepa/dead.letter... Saved message in
/home/kepa/dead.letter#? Ctrl+D (Introducido por teclado)
1
Estructuras de Control:Case
• case: vi menuecho "1: Mostrar fecha y hora"echo "2: listar directorio"echo "Introduzca su opcion"read opcioncase $opcion in
1)date;; 2)ls $HOME;; *)echo "Entrada no valida. adios";;esac
1
Estructuras de Control:Case
• case: Elige una opción entre $ ./pru1: Mostrar fecha y hora2: listar directorioIntroduzca su opcion2Admin Contrapatentes.txt gcc.sxi
1
Estructuras de Control:If
• if: $ ./pru lanaif mkdir $1then
echo "Creando directorio $1"echo "Copiando ficheros"cp ~/.* $1
elseecho "Error al crear el directorio $1"
fi
1
Estructuras de Control:If-elifif test condition1 then
command elif test condition2 # Same as elseif
then command
else default-command
fi
1
Estructuras de Control:while|until
• While|until:– while verdadero do ---- done– until falso do ----- done
while test $n -le 9do
echo "Introduzca un valor"read valor
acum=`expr $acum + $valor` n=`expr $n + 1`doneecho "Acumulado=$acum"
1
Estructuras de Control:function
• Function:$vi prueba
function buenosdias(){
echo “egunon $1”}buenosdias $1
$./prueba Kepa
egunon Kepa
1
Estructuras de Control:Exit
• exit: se usa para terminar un script o una función de un script. El valor que se devuelve lo recogerá el proceso padre.
• Todos los comandos retornan un exit donde 0 significa éxito y <> 0 un código de error. En caso de que nuestro script no tenga exit devolverá el estado del último comando ejecutado.
1
Estructuras de Control:Exit#!/bin/bash echo hello echo $? # Echo devuelve un 0 ya que el
comando se ha ejecutado con éxitolskdf # No reconoce el comandoecho $? # Devuelve <> 0 ya que el
comando ha falladoexit 113 # Retornará 113 al shell# Para verificar escribe "echo $?" después
de ejecutar el script.
1
Modos de ejecución de ScriptScript->Es un fichero de comandos.Ejm: vi ejemplo
mkdir lana
cd lana
ls –a
1.-$bash ejemplo2.-$ejemplo3.-$source ejemplo 4.-$. ejemplo5.-$exec ejemplo
1
Modos de ejecución de Script
Ejm1: more ejemplo1#! /bin/bash#crea un directorio ’lana’ y muestra sus ficheros ocultosmkdir lanacd lanals –a
(*) Comprobar si se modifica el directorio actual en los 5 diferentes modos.
1
Modos de ejecución de Script$ exec ejemplo1
Se ejecuta en el mismo proceso que le llama.Normalmente cuando se llama a un script secrea un subproceso hijo con fork para que lo ejecute.Aquí el comando reemplaza al shell y cuando elscript termina se cierra el shell, utilizándose enel último comando del script.
1
Modos de ejecución de Script
Ejm:vi pruebals$ exec ./prueba
1
Intérpretes: 2 Tipos
• Intérprete interactivo de conexión• Intérprete interactivo de no conexión
1
Intérpretes: 2 Tipos
1
Intérpretes: Conexión• Se ejecuta cuando abrimos una sesión con
telnet o ssh o programa mingetty...– El programa mingetty muestra un mensaje de login
(usuario: kepa passwd:******)– Después de introducir, se carga el /bin/login que lee
/etc/passwd o /etc/shadow– Si el usuario registrado está en dichos ficheros se inicia
una sesión interactiva con bash (se llama a /bin/bash), ésta ejecutará el script /etc/profile(todos los usuarios) y después uno de los siguientes scripts: ~/.bash_profile, ~/.bash_login o ~/.profile; y /etc/bashrc(si existe) y ~/.bashrc
1
Intérpretes: No Conexión
• Se ejecuta cuando ejecutamos directamente el comando /bin/bash– ejecuta /etc/bashrc(si existe) – ejecuta ~/.bashrc
1
Scripts: Inicio de Sesión./etc/profile (fedora)
USER=`id -un`LOGNAME=$USERMAIL="/var/spool/mail/$USER"HOSTNAME=`/bin/hostname`HISTSIZE=1000if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then INPUTRC=/etc/inputrcfiexport USER LOGNAME MAIL HOSTNAME HISTSIZE
INPUTRC
1
Scripts: Inicio de Sesión./etc/profile (Ubuntu)
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1)) and Bourne compatible shells (bash(1), ...)umask 022
if [ "$PS1" ]; then if [ "$BASH" ]; then PS1='\u@\h:\w\$ ' if [ -f /etc/bash.bashrc ];
then . /etc/bash.bashrc fi else if [ "`id -u`" -eq 0 ]; then PS1='# ' else PS1='$ ' fi fifi
1
Scripts:Inicio de Sesión.Variables de ambiente#archivo donde se almacena los comandos ejecutados
HISTFILE=~/.bash_history# Tamaño del ficheroHISTSIZE=1000# documentación en castellano del manMANPATH=/usr/share/man/esLANGUAGE=esLANG=es_ESexport LANG LANGUAGE MANPATH HISTFILE ...
1
Scripts:Inicio de Sesión.Variables de ambiente
#cambiar el tipo de terminal:#si nos conectamos desde linux o windowsTERM=vt100 o ansi#Consultar los tipos de terminal ir a :
/usr/share/terminfo#Cambiar y consultar la base terminfo desde el bash
con el programa: tput bold #terminal muestra con negrita
1
Scripts:Inicio de Sesión.Variables de ambiente
PS1 Y PS2• Contienen los prompts que bash presenta al usuario.• PS1: es el prompt principal (cuando espera
comandos)Ejm:[kepa@vppy118 share]$ echo $PS1[\u@\h \W]\$Puedo añadir PS1="[\u@\h \w \W]\$"[root@vppy118 ~ root]$export PS1Para más información: man bash
1
Scripts:Inicio de Sesión.Variables de ambientePS1 Y PS2
• PS2: es el prompt secundario (cuando espera a que se complete la información de un comando)
[kepa@vppy118 kepa]$echo $PS2 >[kepa@vppy118 kepa]$for a in $(seq 1 3)> do> echo hola> doneholaholahola
1
Scripts:Inicio de Sesión.
• En función del shell que se ejecute por defecto el fichero será diferente:
.login.bash_profile.profile
.profileFichero
Csh;tcshbashshShell
1
Scripts:Inicio de Sesión.Fedora:.bash_profileif [-f ~/.bashrc]; then
. ~/.bashrc
fi
PATH=$PATH:$HOME/bin
export PATH
unset USERNAME
Ubuntu:.profileif [ -n "$BASH_VERSION" ];
then
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
fi
if [ -d ~/bin ] ; then
PATH=~/bin:"${PATH}"
fi
1
Scripts:Personalización de entorno
.bashrc• Se ejecuta cuando abrimos un intérprete de
comandos , exceptuando cuando entramos en el inicio de sesión (que lo ejecuta el .bash_profile)
• Se utiliza para – Establecer el entorno para el prompt– Establecer el entorno para los scripts que ejecutemos.
1
Scripts: Personalización de entorno
• En función del shell que se ejecute por defecto el fichero será diferente:
.cshrc.bashrc(no tiene)
Fichero
Csh;tcshbashshShell
1
Scripts: Personalización de entorno
Fedora:.bashrc
if [-f etc/.bashrc]; then
. etc/.bashrc
fi
alias del=‘rm’
alias moer='more'
Ubuntu:.bashrc
export HISTCONTROL=ignoredups
export HISTCONTROL=ignoreboth
if [ "$TERM" != "dumb" ]; then
eval "`dircolors -b`"
alias ls='ls --color=auto'
fi ...
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
1
Scripts: fin de sesión
• En función del shell que se ejecute por defecto el fichero será diferente:
.logout.bash_logout.logoutFichero
Csh;tcshbashshShell
1
Scripts:fin de sesión
.bash_logout• Se ejecuta cuando salimos de la sesión• Se utiliza para
– Dar mensajes de despedida– Limpiar la pantalla
1
Scripts:fin de sesión.bash_logout(fedora)
clear
.bash_logout(Ubuntu)
# when leaving the console
clear the screen to
increase privacy
if [ "$SHLVL" = 1 ]; then
[ -x /usr/bin/clear_console ]
&& /usr/bin/clear_console
-q
fi
1
Scripts: fin de sesión
• Ejm:.bash_logoutcleardateecho ***********************echo Laster arte Kepaecho ***********************