Tutoriales

Cómo revisar si la variable bash está definida en el script

I Necesito establecer una variable de entorno bash señal PURGEIMAGE y realizar acciones específicas en mi signo. Por ejemplo, si PURGEIMAGE establecer, luego purgar las imágenes de CDN o simplemente URL. Voy a nombrar a mi signo como PURGEIMAGE = yes ./purgecache.sh url1 url2. Entonces, ¿cómo sé si una variable bash se establece en la CLI y se usa en mi script bash que se ejecuta en sistemas Linux o similares a Unix?

Podemos producirse el -z opción al comando if o expresión condicional para revisar si una variable bash está definida en el script o no.

Detalles del tutorial
DificultadHacedero (rss)
Privilegios de rootNo
RequisitosBash ejecutándose en Linux o Unix
Hora2m



Para enterarse si se define una variable bash:

  1. Devuelve definitivo si una variable bash no está configurada o configurada como una esclavitud vacía: si [ -z ${my_variable+x} ];
  2. Intenta además: [ -z ${my_bash_var+y} ] && echo " $ my_bash_var no definido"
  3. Determine si una variable bash está configurada o no: [[ ! -z ${PURGEIMAGE+z} ]]&& echo "Establecer" || echo "No definido"
  4. Devuelve definitivo si la variable está activada Intento interpretación 4.2+: [ -v $VAR ] && echo "Bash $ VAR NO establecido"

if sintaxis del comando y ejemplo para ver si la variable bash se ardor PURGEIMAGE establecer o no

La sintaxis es simple:

if [ -z ${PURGEIMAGE+x} ];
then
    echo "We need to only purge URL from Clodudfront CDN ..."
else
    echo "We need to purge images and URL from Cloudfront CDN ..."
fi

O use el comando de prueba

if test -z ${PURGEIMAGE+y}
then
    echo "We need to only purge URL from Clodudfront CDN ..."
else
    echo "We need to purge images and URL from Cloudfront CDN ..."
fi

Luego ejecutamos nuestro script como
$ /path/to/script
$ PURGEIMAGE=whatever /path/to/script
# use the export command to export variable to sub-shells
$ export PURGEIMAGE=yes
$ /path/to/script

Todas las variables exportadas pueden tener títulos indefinidos de la próximo modo usando el comando unset
$ unset PURGEIMAGE
$ /path/to/script

Cómo $ {my_variable + x} funciona la sintaxis?

Imprimamos los comandos y sus argumentos a medida que se ejecuta el script usando el comando set:

set -x
./script
PURGEIMAGE=whatever ./script
export PURGEIMAGE=whatever
./script
unset PURGEIMAGE
./script
set +x

  • los $ {my_variable + x} es una expansión de parámetros de bash.
  • No evalúa nulo si my_variable está desarmado.
  • De lo contrario, sustituye a la esclavitud. X.
  • Puede utilizar cualquier esclavitud y no se limita a X. Por ejemplo, puedo usar foobar como sigue:
    # instead of 'x' we used 'foobar'
    # but 'x' seems like a good practice 
    if [ -z ${PURGEIMAGE+foobar} ];
    then
        echo "We need to only purge URL from Clodudfront CDN ..."
    else
        echo "We need to purge images and URL from Cloudfront CDN ..."
    fi

Otra opción para ver si la variable de shell bash está configurada o no

Podemos probar los operadores de control. La sintaxis es:

[ -z ${var+foo} ] && echo "${var} not defined"
[ -z ${var+foo} ] && echo "${var} not defined" || echo "${var} is defined"

Si la portabilidad no es su problema, intente [[[[ sintaxis

Las siguientes son opciones específicas de bash, y necesita la versión 4.x + de bash. Evitaría estos ejemplos debido a problemas de portabilidad si fuera usted, pero los proporciono a continuación, ya que están en las páginas de manual de bash.

[[ -z ${var+z} ]] && echo "${var} not defined" 
[[ -z ${var+z} ]] && echo "${var} not defined" || echo "${var} is defined"

Verificando si una variable está configurada en Bash o no

los -v VAR devuelve definitivo si la variable de shell VAR Está establecido:

[[ -v ${var} ]] && echo "${var} not defined" 
[[ -v ${var} ]] && echo "${var} not defined" || echo "${var} is defined"
[ -v ${var} ] && echo "${var} not defined" || echo "${var} is defined"

Poniendolo todo unido

## check bash variable defined or not ##
  if [  -z ${PURGEIMAGE+x} ]
  then
     case "$u" in
	     https://www.cyberciti.biz/faq/*) pattern="media/new/faq/";;
             https://www.cyberciti.biz/tips/*) pattern="/tips/wp-content/uploads/";;
	     https://www.cyberciti.biz/*) pattern="media/new/cms/";;
	     *) pattern="NULL"
     esac
     if [ "$pattern" != "NULL" ]
     then
	     echo ' * Getting a list of images to purge from url ... '
	     tmp_file="/tmp/index.html.$$"
	     wget -o /dev/null -O "$tmp_file" "$u"
	     if [ -f "$tmp_file" ]
	     then
		     img_urls="$img_urls $(grep -i 'img' "$tmp_file"  | grep -Po 'src="https://www.cyberciti.biz/faq/see-check-if-bash-variable-defined-in-script-on-linux-unix-macos/K.*?(?=")' | grep "$pattern" | grep -E -v 'inbox-sign-up.002.jpeg')"
		     rm -f "$tmp_file"
	     fi
     fi
     purge_images "$img_urls"
  fi
  purge_url "$u"

Resumiendo

CDN como Cloudfront y Cloudflare nos permite juntar en distinción tanto las imágenes como las páginas HTML de forma agresiva en el nodo de borde. Al juntar en distinción esos activos, podemos acelerar el sitio web. Sin retención, cuando actualizamos las páginas, debemos eliminar las URL y las imágenes del distinción. Sin retención, a menudo no se requiere que los magos purguen, ya que solo actualizamos las páginas. Este sencillo script bash me permite purgar activos según nuestras evacuación bajo demanda. Ver:

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba