ventilación una realiza pulmonar perfusión perfusion indicaciones gammagrafía gammagrafia enfermeria cómo cuidados contraindicaciones bash scripting programming-languages

una - Bash: compruebe si el nombre de host es vq*¿cómo usar comodines?



gammagrafía pulmonar indicaciones y contraindicaciones (4)

Esto eliminará vq del comienzo de la cadena. Si la condición es verdadera, tu nombre de host coincide con vq*

hostname=`hostname -s` if ! [ "${hostname#v-q}" = "${hostname}" ]; then echo "1" fi

Tengo el siguiente código y necesito que repita 1 si el nombre de host coincide con v-qai01 o cualquier otro servidor vq *:

if [ `hostname -s` -eq `v-q*` ]; then echo "1" fi

Tengo varios errores:

./run.sh: line 3: v-q*: command not found ./run.sh: line 3: [: v-qai01: unary operator expected

Alguna sugerencia por favor?

¿Qué pasa si tengo el próximo caso?

hostname=`hostname -s` portalesWildcard=v-*ws* qaiservers={''v-qai01'' ''v-qai02''} portales={''t1wsyellar01'' } if [[ ${hostname} = ${qaiservers} ]]; then echo "yes" fi

Gracias


puede usar la declaración de case :

case $(hostname -s) in v-q*) echo yes ;; *) echo no ;; esac


Use doble corchetes y el operador = aceptará comodines:

#!/bin/bash if [[ $(hostname -s) = v-q* ]]; then ... fi

También tiene un operador =~ para las coincidencias de expresiones regulares cuando necesitas una coincidencia de cadenas más avanzada. Esto verificaría que el nombre de host también termine con uno o más dígitos:

#!/bin/bash if [[ $(hostname -s) =~ ^v-q.*[0-9]+$ ]]; then ... fi


El problema real que tuvo el póster original fue que usaron trazos retrospectivos alrededor de la cuerda:

if [ `hostname -s` -eq `v-q*` ]; then

en lugar de comillas de cadena. Los Backticks le dicen al shell que ejecute la cadena dentro de ellos como un comando. En este caso, el shell intentó ejecutar:

v-q*

que falló