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 鈥榰鈥欌 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 鈥淯tilizamos 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=鈥淢arco鈥

Utilizar espacios de esta manera (como personalmente hago cuando programo) no es admitido para crear una variable, porque Bash interpretar谩 鈥渙pcion鈥 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 鈥渆nv鈥 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 ?

鈥淥pcion 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 鈥淢odo solo lectura鈥 鈥渞eadonly鈥, 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.