
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 | |
---|---|
Dificultad | Hacedero (rss) |
Privilegios de root | No |
Requisitos | Bash ejecutándose en Linux o Unix |
Hora | 2m |
Para enterarse si se define una variable bash:
- Devuelve definitivo si una variable bash no está configurada o configurada como una esclavitud vacía: si [ -z ${my_variable+x} ];
- Intenta además: [ -z ${my_bash_var+y} ] && echo " $ my_bash_var no definido"
- Determine si una variable bash está configurada o no: [[ ! -z ${PURGEIMAGE+z} ]]&& echo "Establecer" || echo "No definido"
- 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: