No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

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
Recursos

Aportes 54

Preguntas 12

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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.

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)

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.

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

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

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]

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

Para hacer saltos de linea en BASH se hace asi

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

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.

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.

Mejor usen zsh, para poner color en la terminal
tambien instalen Plug y temas para vim para mejorar la visualizacion,claro esto en local.
Por que en un ambiente pro, no creo que te animeso se deba cambiarlo.

Las variables de entorno son variables definidas para el shell actual y heredadas por cualquier shell o proceso secundario. Las variables de entorno se utilizan para transmitir información a procesos que se producen desde el shell.
Variables frecuentes de entorno y de shell
Algunas variables de entorno y de shell son muy útiles y se utilizan con bastante frecuencia. Aquí hay algunas variables frecuentes de entorno con las que se encontrará:

SHELL: Describe el shell que interpretará cualquier comando que ingrese. En la mayoría de los casos, será bash de forma predeterminada, pero se pueden establecer otros valores si prefiere otras opciones.
TERM: Especifica el tipo de terminal a emular cuando se ejecuta el shell. Se pueden emular diferentes terminales de hardware para diferentes requisitos de funcionamiento. Sin embargo, generalmente no tendrá que preocuparse por esto.
USER: El usuario que inició sesión actualmente.
PWD: El directorio actual de trabajo.
OLDPWD: El directorio anterior de trabajo. Esto se mantiene en el shell para volver a su directorio anterior ejecutando cd -.
LS_COLORS: Define los códigos de color que se utilizan para añadir de forma opcional un resultado de color al comando ls. Esto se utiliza para distinguir diferentes tipos de archivos y proporcionar más información al usuario de forma rápida.
MAIL: La ruta al buzón del usuario actual.
PATH: Una lista de directorios que el sistema comprobará cuando busque comandos. Cuando un usuario escriba un comando, el sistema comprobará los directorios en este orden para el ejecutable.
LANG: Las configuraciones actuales de idioma y localización, incluida la codificación de caracteres.
HOME: El directorio principal del usuario actual.
_: El comando más reciente ejecutado anteriormente.
Además de estas variables de entorno, algunas variables de shell que aparecerán a menudo son:

BASHOPTS: La lista de opciones que se utilizaron cuando se ejecutó bash. Esto puede ser útil para averiguar si el entorno de shell funcionará de la forma que usted desea.
BASH_VERSION: La versión de bash que se está ejecutando, en un formato que los usuarios puedan leer.
BASH_VERSINFO: La versión de bash, en un resultado que un equipo pueda leer.
COLUMNS: El número de ancho de columnas que se utilizan para generar el resultado en la pantalla.
DIRSTACK: La pila de directorios que están disponibles con los comandos pushd y popd.
HISTFILESIZE: La cantidad de líneas del historial de comandos que se almancenan en un archivo.
HISTSIZE: La cantidad de líneas del historial de comandos que se permiten en la memoria.
HOSTNAME: El nombre de host de la computadora en este momento.
IFS: El separador de campo interno para separar las entradas en la línea de comandos. De forma predeterminada, es un espacio.
PS1: La definición de la entrada del comando principal. Esto se utiliza para definir cómo se ve la entrada de la línea de comandos cuando se inicia una sesión de shell. PS2 se utiliza para declarar las entradas de la línea de comandos secundarias para cuando un comando se extiende a varias líneas.
SHELLOPTS: Opciones de shell que se pueden configurar con la opción set.
UID: El UID del usuario actual.

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?

En vez de:

export nombre
export edad

Intentar:

export nombre edad 

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.

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).

Puede ocurrir que tal vez al al abrir un manual o un archivo de texto grande no te deje manipular con las flechas puedes usar:

  • Ctrl + k = para subir
  • Ctrl + m = para bajar

Alguien sabe quién es la chica del inicio? no la había visto 😃 jaja. Por cierto, jalá ya actualicen el curso de Administración de Servidores de Linux, péeesimo profesor

las variables de entorno se encuentran en el directorio -> /etc/profile
recuerda que para editar este archivo necesitas usar sudo

sudo vim /etc/profile

El comando “env” muestra las variables de entorno sin necesidad de editar el archivo profile

<code> env

Y esto es lo que muestra en la terminal

<code> SHELL=/bin/bash
SESSION_MANAGER=local/leoangel-HP-Laptop-15-ef2xxx:@/tmp/.ICE-unix/1938,unix/leoangel-HP-Laptop-15-ef2xxx:/tmp/.ICE-unix/1938
QT_ACCESSIBILITY=1
COLORTERM=truecolor
XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg
SSH_AGENT_LAUNCHER=gnome-keyring
XDG_MENU_PREFIX=gnome-
GNOME_DESKTOP_SESSION_ID=this-is-deprecated
LANGUAGE=es_CO:es
GNOME_SHELL_SESSION_MODE=ubuntu
SSH_AUTH_SOCK=/run/user/1000/keyring/ssh
XMODIFIERS[email protected]=ibus
DESKTOP_SESSION=ubuntu
GTK_MODULES=gail:atk-bridge
PWD=/home/leoangel/Documentos/platzi
LOGNAME=leoangel
XDG_SESSION_DESKTOP=ubuntu
XDG_SESSION_TYPE=wayland
SYSTEMD_EXEC_PID=2174
XAUTHORITY=/run/user/1000/.mutter-Xwaylandauth.UXUZT1
HOME=/home/leoangel
USERNAME=leoangel
IM_CONFIG_PHASE=1
LANG=es_CO.UTF-8
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
XDG_CURRENT_DESKTOP=ubuntu:GNOME
VTE_VERSION=6800
WAYLAND_DISPLAY=wayland-0
GNOME_TERMINAL_SCREEN=/org/gnome/Terminal/screen/d562e3db_0d34_4d34_8d4a_25e696913c2a
GNOME_SETUP_DISPLAY=:1
LESSCLOSE=/usr/bin/lesspipe %s %s
XDG_SESSION_CLASS=user
TERM=xterm-256color
LESSOPEN=| /usr/bin/lesspipe %s
USER=leoangel
GNOME_TERMINAL_SERVICE=:1.120
DISPLAY=:0
SHLVL=1
QT_IM_MODULE=ibus
XDG_RUNTIME_DIR=/run/user/1000
XDG_DATA_DIRS=/usr/share/ubuntu:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin
GDMSESSION=ubuntu
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
OLDPWD=/home/leoangel/Documentos
_=/usr/bin/env

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

“Opcion de sucre” min 4:48, como te mataron mi Ecuador. Entiendase como sucre la moneda de Ecuador antes de la dolarización que tambien como la del simbolo del dolar $

Otro lugar para colocar las variables de entorno para el sistema es /etc/environment

Excelente clase

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.

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.