Estou escrevendo um script para alterar algumas configurações de acordo com a localização e para fazer isso selecionei o nome do host como referência. Meu objetivo é que, se minha condição de nome de host se tornar realidade, faça isso. Para isso, estou escrevendo um script de shell que compara poucas coisas na instrução if, quero imprimir a condição if de sucesso, mas não consigo fazer isso. Aqui está meu roteiro.
#!/bin/bash
location1=india
location2=eurpoe
location3=asia
location4=usa
location5=africa
location6=tokyo
echo "Checking Hostname"
hstname=`hostname | cut -f1 -d'-'`
echo "This is the $hstname"
#if [ $hstname == $location1 ] && [ $hstname == $location2 ] && [ $hstname == $location3 ] && [ $hstname == $location4 ] && [ $hstname == $location5 ] && [ $hstname == $location6 ] ;
if [[ ( $hstname == $location1 ) || ( $hstname == $location2 ) || ( $hstname == $location3 ) || ( $hstname == $location4 ) || ( $hstname == $location5 ) || ( $hstname == $location6 ) ]] ;
then
echo "This is part of " ;##Here i want to print true condition of above if statement##
else
echo "Please set Proper Hostname location wise." ;
fi
Não consigo encontrar uma maneira de imprimir uma condição que se tornou verdadeira na instrução if.
Responder1
Armazene os locais válidos em uma única variável e faça um loop sobre ela:
VALID_LOCATIONS="india europe asia usa africa tokyo"
hstname=`hostname | cut -f1 -d'-'`
for LOC in $VALID_LOCATIONS
do
if [[ $LOC == $hstname ]]; then
LOCATION=$LOC
fi
done
if [[ $LOCATION == "" ]]; then
echo "Please set Proper Hostname location wise."
else
echo "This is part of $LOCATION"
fi
Resultado:
This is part of europe
Responder2
Você pode usar
if [ $hstname == $location1 ] || [ $hstname == $location2 ] || [ $hstname == $location3 ] ; then
Mas não esqueça dos espaços!!
Talvez seja melhor usar "case" com todos os locais na condição.