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ó