Curso de Programación en Bash Shell

Curso de Programación en Bash Shell

Marco Antonio Toscano Freire

Marco Antonio Toscano Freire

Declaración de Variables y Alcance en Bash Shell

6/43

Lectura

¡Un saludo, Platzinauta!👋🏻

¡Ups! De momento esta clase no está disponible en nuestra plataforma, pero sí la tenemos en YouTube.

Para no interrumpir tu aprendizaje te dejamos el video y link para que puedas verla en YouTube.

Link a YouTube

Pronto estará disponible en Platzi como el resto de clases.

Gracias por tu comprensión y nunca pares de aprender. 💚

En esta clase el profesor nos explica sobre la declaración y alcance de variables dentro de un programa Bash.

La programación Bash Shell es muy importante al momento de crear scripts que nos permitan automatizar procesos en cualquier sistema operativo UNIX como GNU/Linux, uno de los más usados en servidores.

Aportes 45

Preguntas 10

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

1 Variables de entorno
Ayudan a obtener infromacion del sistema, almacenar informacion temporal y modificar su informacion. Existen 2 tipos:

Variables Globales: Son visibles desde el shell que lo creo o desde cuaquier hijo de esa shell.

Variables Locales: Son visibles solo desde el shell que la creo.

Variable Persistente: Para crear una de estas es necesario introducirla en el archivo /etc/profile pero en el caso de los derivados debian si revisamos un poco el script nos damos cuenta que llama a otro archivo llamado /etc/bash.bashrc en el cual podemos crear las variables de entorno persistentes.

Por eso no funciona llamar la variable declarada en /etc/profile desde un shell

2 Variables de usuario
Son las variables que se corren dentro de un script como en cualquier programa de computadora C, C++ o Java

Variable global: Se puede usar desde otro script siempre y cuando sea llamado desde el script que contiene la variable.

-Variable local:_ Solo tiene alcance en el script que la creo.

Es horrible el azul que usa en la terminal, no puedo leer lo que escribe. No pongan esos colores y eviten dañarse los ojos.

Para visualizar las variables de entorno se hace printenv

LC_MEASUREMENT=es_CO.UTF-8
SSH_CONNECTION=192.168.56.1 51806 192.168.56.101 22
LESSCLOSE=/usr/bin/lesspipe %s %s
LC_PAPER=es_CO.UTF-8
LC_MONETARY=es_CO.UTF-8
LANG=es_CO.UTF-8
LC_NAME=es_CO.UTF-8
XDG_SESSION_ID=5
USER=ubuntu
PWD=/home/ubuntu/shellCourse
HOME=/home/ubuntu
LC_CTYPE=en_US.UTF-8
SSH_CLIENT=192.168.56.1 51806 22
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
LC_ADDRESS=es_CO.UTF-8
LC_NUMERIC=es_CO.UTF-8
SSH_TTY=/dev/pts/0
MAIL=/var/mail/ubuntu
TERM=xterm-256color
SHELL=/bin/bash
SHLVL=1
LANGUAGE=es_CO:es
LC_TELEPHONE=es_CO.UTF-8
LOGNAME=ubuntu
XDG_RUNTIME_DIR=/run/user/1000
PATH=/home/ubuntu/bin:/home/ubuntu/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
LC_IDENTIFICATION=es_CO.UTF-8
LESSOPEN=| /usr/bin/lesspipe %s
LC_TIME=es_CO.UTF-8
_=/usr/bin/printenv
OLDPWD=/home/ubuntu
ubuntu@uServer1:~/shellCourse$ 

Podemos hacer que se tome en cuanta la variable de entorno sin reiniciar el SO, con ayuda del comando source.

Vale aclarar, que al hacer chmod +x … se le da permiso de Ejecucion a TODOS los usuarios del sistema… Si queremos ser mas cautos y solo darle ejecucion, recomendaría usar: chmod u+x nombredelarchivo.sh

la difeencia es la ‘u’… se taduce a user + x (ejecucion)

Una buena práctica es declarar las variables en mayúsculas:
OPCION=0
NOMBRE=“Marco”

4:43 “Utilizamos el signo de sucre”. Hahaha muy buena profe. Como todo ecuatoriano del alma.

hola buenas tardes , para los que no tienen la iso de un ubuntu server la pueden descargar desde el curso de administración de servidores linux

Este video les puede aclarar la definicion de las variables y alcance, también explica como elaborar las variables de entorno permanentes:
https://www.youtube.com/watch?v=ZX58AHhXpyA

Para ver el alcance de las variables locales y globales apoyense con el comando bash (este comando abre subshells) y ejecuten sus variables locales y globales para apreciar la diferencia entre los alcances de cada una.

Si quieren declarar una variable de entorno o una variable en su shell bash la recomendación es hacerlo siempre en mayúsculas.

VARIABLE=valor

Es importante no dejar espacios entre el nombre de la variable y su valor

El video està caìdo.

Para hacer saltos de linea en BASH se hace asi

echo -e "Opcion: $opcion\nNombre: $nombre"

La verdad es que esta configuración para pasar los valores de las variables
de usuario entre disintos programas me parece super interesante y práctica.
Magnifica la sessión Marco Antonio. Un saludo.

Volví a editar el archivo en /etc/profile y comenté la variable
o lo que se añadió en la práctica del vídeo y el problema se solucionó
es decir, ya no manda le error que comenté abajo, sin embargo, ¿en qué afecta para las prácticas posteriores?

Utilizar espacios de esta manera (como personalmente hago cuando programo) no es admitido para crear una variable, porque Bash interpretará “opcion” como un comando

opcion = 0

Entonces la manera correcta es:

opcion=0

Shortcuts para moverse en comandos:

  • ctrl + a [Ir al Inicio del comando]
  • ctrl + e [Ir al Final del comando]

Genial la explicación de las variables. Como tip de sugiere usar mayúsculas para nombres de variables. En el ejemplo anterior seria OPCION y NOMBRE

hola buenas tardes quien me dice como pongo el auto completado ya edite mi archivo de vim.rc

Dice que el video no esta disponible…

FIle 1

#!/usr/bin/env bash
# lec_2_file_a.sh file

# !/bin/bash it is shown in the course
# chmod +x name_file //to add execution permission
# cp file_name_original new_file_name //to copy a file

#To define variables
myOption=0
myName=Marco

# $variable to obtain the value of a variable
echo "Option: $myOption and Name:$myName"

#to export the variable to the so level
export myName

#call other script
./lec_2_file_b.sh

File 2

#!/usr/bin/env bash
# lec_2_file_a.sh file

# !/bin/bash it is shown in the course

#variable taken from the so level variables
echo "Field taken from the first script $myName"

sudoedit es preferible sobre sudo [editor]. En particular porque con sudoedit, nuestro archivo .*rc es usado, en lugar de aquel que pertenezca al usuario que estamos personificando (usualmente es root).

Para los que deseen cambiar los colores de los comentarios del editor VIM, una opción es agregar la siguiente línea en el archivo “.vimrc”

colo desert

Ya hice todo y no se exporta la variable, cuando ejecuto el segundo archivo no me aparece la variable, y cuando ejecuto el primero, aparece lo del primero y lo que se supone debe aparecerme al ejecutarel segundo script.
ya me desilucione de este curso tal vez encuentre mejores en youtube.

Excelente clase

En vez de:

export nombre
export edad

Intentar:

export nombre edad 

Muy buena clase y explicación del profe.

Las variables de entorno se encuentran en:

vim /etc/profile

Para ejecutar variables locales (para un programa especifico), será declarandolas en un archivo, usar el comando echo y entrar al archivo usando ./

Corríganme si me equivoco;
Yo veo que los scripts de shell son como cualquier script donde escribes lo que quieres que haga el intérprete que en este caso es el shell (bash, o zsh o lo que tengas) son las mismas instrucciones que escribirías si quieres hacer algo desde la terminal.
Cuando corres un script de shell es como si el bash que que lo lanzó la ejecución tuviera una shell hija que es la que lo ejecuta y esta shell hija puede ver todas las variable globales y las que se hayan exportado con el comando export desde alguna shell padre. Entonces en este ejemplo ejecuta el script 2_variable.sh lo que produce una shell B que cuando llega a la utima linea lanza una shell C para ejecutar 2_variable_2.sh que tiene acceso a la variable nombre porque la shell B la exportó.

Es interesante porque desde cualquier shell tienes acceso a las variables globales por lo que las podrías utilizar sin siquiera declararlas desde cualquier script que hagas.

porque cuando ejecuto el segundo archivo llamado 2_varibles_2.sh
no me sale el nombre ?

Muy interesante, no habia manejado los alcance de las variables

Con esta clase aclare una duda que tenía desde aproximadamente 4 meses que vi las clases de introducción a la terminal.

muy bueno estoy aprendiendo mucho es emocionate

buenas no me esta tomando la variable nombre y cuando la exporto no se resalta de color azul

Hay algo que no me queda claro con respecto a esta clase. Con este ejercicio que hemos realizado, hemos conseguido imprimir el contenido del script2 en el script1 con las variables del mismo script1. Pero que pasaría si yo quisiera imprimir la variable del script1 en el script2??

genial

Listo, aprendiendo variables

Para los que tiene problema para guardar y les dice algo como “Modo solo lectura” “readonly”, deben abrir el archivo etc/profile como super usuarios o sea: sudo vim etc/profile.
solo deben poner la contraseña y listo.

En el minuto 6 de la clase 6, al hacer (cp 2_variables.sh 2_variables_2.sh ) y luego ls, a mi me sale un archivo extra que es: 2_variables.sh~ .¿Alguien sabe cuál es la razón?

Enfocándonos en la programación Bash, existen dos tipos de variables en un sistema operativo; esto, sin importar de qué sistema operativo estemos hablando, pues sucede así en todos.

  • Variables de usuario
  • Variables de sistema operativo (variables de entorno)

Las variables de entorno o variables del sistema operativo se configuran en el archivo /etc/profile.

La declaración de una variable se lleva a cabo definiendo primeramente el nombre de la variable, seguido del signo de asignación (=) y seguido del valor, todo lo anterior sin espacios de por medio. Por ejemplo:

  • option=59
  • name=Juan
  • name=Juan Cajamarca
  • name="Pedro Gonzales"
    Estas variables, están siendo declaradas dentro de un script, y sólo existirán dentro de ese script. Si deseamos que la variable tenga un alcance hacia otro script, debemos exportarla y realizar la ejecución del otro script desde el principal. La exportación de la variable la logramos de dos maneras:
name=Juan
export name
export num_options=2

Linux es CASE sensitive

Tuve problemas para usar variables con un string de más de dos palabras, y para poder hacerlo tuve que encerrarlos en ‘’, espero le sirva si alguien más tuvo el problema ;3

# !/bin/bash
# Programa para revisar la declaración de variables
# Autor: Marco Toscano Freire - @martosfre

opcion=0
nombre=Marco

echo "Opción: $opcion y Nombre: $nombre"

# Exportar la variable nombre para que este disponible a los demás procesos
export nombre

# Llamar al siguiente script para recuperar la variable
./2_variables_2.sh```

Que clase tan genial, ahora entiendo tantas cosas de manera tan simple!!

Ahora que quiero entrar a mi perfil en Ubuntu cuando ingreso la contraseña
me manda un error más o menos así: /etc/profile: (un número que no recuerdo):bash:

Corregir lo más pronto posible.

Supongo que se debe a la variable que se ingresó, si es así, ¿qué debería hacer para que a pesar
de ingresar una nueva variable de entorno mi sistema operativo no se vea afectado?

saludos y muy buena clase.