Documentos de Académico
Documentos de Profesional
Documentos de Cultura
● Correo: fcarmine@udc.edu.ar
● Duración: Cuatrimestral
● Ciclo Lectivo: 2021
● 2° Cuatrimestre
Contenidos de la unidad
Comandos: mv, cp, rm, file, du, less, more, grep, cat, tail, head, cut,
diff, grep. Empaquetado y desempaquetado de archivos. Comando: tar.
GNU/Linux es un sistema:
– Clave (password)
para acceder al sistema
– Carpeta personal
Donde el usuario guarda sus propias carpetas y archivos (por
defecto en /home/username)
● Añadir usuarios:
– # adduser <username>
● Borrar usuarios:
– # userdel <username>
● Añadir grupos:
– # addgroup <groupname>
● Borrar grupos:
– # groupdel <groupname>
Administración de usuarios y grupos en
interfaz de comandos
# usermod -d /home/profes/pepe -m
cambia la carpeta del usuario pepe a /home/profes/pepe.
-m hace que se mueva todo el contenido.
– El propietario (user)
– Miembros del grupo al que pertenece el archivo (group)
– Otros usuarios (other)
Permisos
Permisos
Sintaxis:
Ejemplos:
Cambiar de propietario:
sudo chown <usuario> (archivo o carpeta)
sudo chown <usuario> -R <carpeta> (carpeta y todo su contenido)
Lenguaje de Programación C
Características de C
int main() {
printf(“Hola mundo!!\n”);
system("pause");
return 0;
}
Compilación vs. Interpretación
Lenguajes compilados
Lenguajes interpretados
Compilados
Interpretados
#!/bin/bash
● Variables
● Estructuras selectivas
● Estructuras repetitivas
● Funciones
● Librerías
Bash: Uso de variables
VARIABLE_1=Hola
Variable_1=”Hola mundo”
N=127 N=$Variable1
Las variables son globales por defecto. Para declarar variables locales
se antepone la palabra reservada local:
local NOMBRE="Jose"
echo "Hola señor $NOMBRE.
Asignado Resultados De Comandos A
Variables
#!/bin/bash
ATRIBUTOS_SCRIPT=`/bin/ls -l $0`
echo $ATRIBUTOS_SCRIPT
Variables Numéricas
#!/bin/bash
let A=100
let B=200
let C=$A+$B
#!/bin/bash
#!/bin/bash
# muestra algunos de los parámetros recibidos
echo "El 1er parámetro es: $1"
echo "El 3er parámetro es: $3"
echo "El 9no parámetro es: $9"
Invocación:
./muestra_param.sh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
El 1er parámetro es: 1
El 3er parámetro es: 3
El 9no parámetro es: 9
Parámetros especiales
Parámetro Uso
------------------------------------------------------------
$0 Contiene el nombre del script tal como es invocado
$* El conjunto de todos los parámetros en un solo argumento
$@ El conjunto de argumentos, un argumento por parámetro
$# El número de parámetros pasados al script
$? El código de retorno del último comando
$$ El PID del shell que ejecuta el script
$! El PID del último proceso ejecutado en segundo plano
Parámetros especiales: Ejemplos
#!/bin/bash Invocado:
#params.sh
#muestra el nombre del script ./params.sh 1 2 3 cuatro 5 seis
#y la cantidad de parámetros El nombre de mi script es: ./params.sh
He recibido 6 parámetros
echo "El nombre del script es: $0"
echo "He recibido $# parámetros" ./params.sh hola mundo
El nombre de mi script es: ./params.sh
He recibido 2 parámetros
#!/bin/bash Invocado:
#mi_ping.sh
#utilizo parámetro especial $? ./mi_ping.sh localhost
IP=$1 Ok, host activo
ping $IP
if [ $? -eq 0 ];then
echo “OK, host activo” ./mi_ping.sh 192.168.0.1
else Alerta, host no responde
echo “Alerta, host no responde”
fi
Parámetros especiales: Ejemplos
#!/bin/bash #!/bin/bash
#Lo que contiene literalmente #Sustituye lo que contiene
MENSAJE= ‘Hola $USER’ MENSAJE= “Hola $USER”
echo $MENSAJE echo $MENSAJE
Comillas invertidas `
#!/bin/bash
#Devuelve la salida del comando entre las comillas invertidas
USUARIOS=`who | wc -l`
echo $USUARIOS
Funciones
Sirve para organizar un script en unidades lógicas de manera que sea más
fácil mantenerlo y programarlo.
function nombre_de_funcion(){
comandos_del_shell
}
Funciones
#!/bin/bash
let A=100
let B=200
function suma(){
let C=$A+$B
echo "Suma: $C"
}
function resta(){
let C=$A-$B
echo "Resta: $C"
}
suma
resta
Comparación de cadenas
Selectivas:
● case: Ejecuta una serie de comandos dependiendo del valor de una variable.
Repetitivas:
● until: Ejecuta una serie de comandos hasta que una condición se cumpla.
Sintaxis: Sintaxis:
#!/bin/bash
#
# Comprobando terminación de un comando
#
DIRECTORIO="/tmp/test"
COMANDO="/bin/mkdir $DIRECTORIO"
if $COMANDO then
echo "$DIRECTORIO ha sido creado"
else
echo "$DIRECTORIO no pudo ser creado"
fi
Estructuras selectivas: if / then / else
#!/bin/bash
#
# Comparacion de cadenas alfanuméricas
#
CADENA1="uno"
CADENA2="dos"
CADENA3=""
if [ -z $CADENA3 ]; then
echo "\$CADENA3 esta vacia"
fi
Estructuras selectivas: if / then / else
#!/bin/bash
#
# Comparacion de valores numericos
#
let NUM1=1
let NUM2=2
let NUM3=3
Ejemplo 1: Ejemplo 2:
#!/bin/bash
/usr/bin/host $HOST
echo "-----------------------"
done
Estructuras selectivas: case
Ejemplo 1: Ejemplo 2:
Ejemplo 1: Ejemplo 2:
#!/bin/bash #!/bin/bash
c=1 c=1
while [ $c -le 5 ]; do
echo "Bienvenido $c veces" while [ $c -le 5 ]; do
c=$(( $c + 1 )) echo "Bienvenido $c veces"
done c=$(( $c + 1 ))
done
Estructuras repetitivas: until
Ejemplo 1: Ejemplo 2:
Ejemplo 1:
#!/bin/bash
OPCIONES="Hola Salir"
Ejemplo 1: Ejemplo 2:
#!/bin/bash #!/bin/bash
function hola {
echo ¡Hola! mensaje “hola a todos”
mensaje “Chau adios”
}
hola salir
salir
Librerías en Bash
Ejemplo 1: Ejemplo 2:
#!/bin/bash #!/bin/bash
# mi_libreria.sh
source mi_libreria.sh
function mensaje { mensaje “hola a todos”
echo $1 mensaje “Chau adios”
} salir
function hola {
echo ¡Hola!
}
function salir {
exit
}
Archivos de configuración de bash
Se utilizan para definir variables y/o ejecutar comandos al ingresar al sistema, cuando se invoca un nuevo
shell o al cerrar la sesión
El más importante es .bas_profile, el cual es leído por el shell para ejecutar los comandos que contiene cada
vez que se ingresa al sistema
Archivos de configuración de bash
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
SHELL=/bin/bas
MANPATH=/usr/man:/usr/X11/man
EDITOR=/usr/bin/vi
PS1='\ :\w\ '
PS2='S '
set -o ignoreeof
export EDITOR
Si se agregan nuevas líneas no serán consideradas hasta que el archivo .bas_profile sea leído/ejecutado
nuevamente, reingresando al sistema, por ejemplo
•.bas _logout es leído y ejecutado cada vez que se sale del login
shell
• Ejemplos:
$ cd -/libros
$ rm *.bck
$ find / -name a* &
Caracteres especiales
El carácter de escape
• Es el carácter \ (backslash)
• Evita que el siguiente carácter sea interpretado por el shell
$ echo $1234
234
$ echo \$1234
$1234
• Ejemplo:
$ echo Texto escrito en \
> mas de una linea
Texto escrito en mas de una linea
Comillas dobles
• Excepciones:
- $ y ' siguen manteniendo sus significados especiales
- \ sigue manteniendo su significado especial sólo si antecede los caracteres
, ', “, \ o newline.
• Ejemplos:
$ echo “El reloj tiene un valor de $123”
El reloj tiene un precio de 23
• Excepción: \newline
• Ejemplos:
$ VAR=10
$ echo '$VAR'
$VAR
\a alerta (alerta)
\b retroceso (backspace)
\n nueva línea (new line)
\t tab horizontal (horizontal tab)
\v tab vertical (vertical tab)
\\ barra invertida (backslash)
• Ejemplos:
$ echo Barra invertida = $'\\'
Barra invertida = \
• Referencia indirecta: Si el valor de una variable es el nombre de una segunda podemos recuperar el
valor de la segunda a través la primera
$ dosmil=numero
$ numero=2000
$ echo $dosmil #referencia directa
numero
• Variables Locales
- Presentes en la instancia actual del shell
- No disponibles para programas iniciados desde el shell (no exportadas)
• Variables de Entorno
- Disponibles por todo proceso hijo del shell
- Muy útiles para la escritura de scripts y programas
- Pueden visualizarse mediante el comando env
- Se pueden agregar variables al entorno mediante export
- Nombres en mayúsculas por convención
• Variables de Shell
- Establecidas y utilizadas por el shell para su funcionamiento
- Algunas son variables de entorno otras son locales
- Pueden visualizarse mediante el comando set
- Convencionalmente tienen nombres en mayúsculas
• Las variables enteras en Bash son enteros con signo (32 bits)
• Posibilidad de overflow
•Utilizar el lenguaje bc en los scripts si es necesario realizar cálculos de punto flotante o emplear funciones
matemáticas de bibliotecas
• Ejemplos:
$ echo "2.35 + 56.90" | bc > 59.25
$ echo "sqrt(2)" | bc > 1
$ echo "sqrt(2.0)" | bc > 1.4
Arrays
• Sintaxis:
set [-abdefkmntuvxBCHP] [(-|+)o opcion] [argumento...]
-n Lee comandos pero no los ejecuta, útil para depurar sintácticamente scritps
-v Muestra las líneas de entrada del shell tal cual son leídas
-x Muestra una traza de un comando y sus argumentos luego de aplicar expansiones
• Ejemplo:
while getopts ":ab:c" opt; do
case $opt in
a ) procesar la opción -a ;;
b ) procesar la opción -b
$OPTARG es el argumento de la opción ;;
c ) procesar la opción -c ;;
\? ) echo 'usage: alice [-a] [-b barg] [-c] args...'
exit 1
esac
done