Ich schreibe ein Skript, um einige Einstellungen je nach Standort zu ändern, und dazu habe ich den Hostnamen als Benchmark ausgewählt. Mein Ziel ist, dies zu tun, wenn meine Hostnamenbedingung erfüllt wird. Dazu schreibe ich ein Shell-Skript, das einige Dinge in einer if-Anweisung vergleicht. Ich möchte die erfolgreiche if-Bedingung ausgeben, finde aber keine Möglichkeit dazu. Hier ist mein Skript.
#!/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
Ich kann keine Möglichkeit finden, die Bedingung auszudrucken, die in der if-Anweisung wahr ist.
Antwort1
Speichern Sie die gültigen Standorte in einer einzigen Variablen und führen Sie eine Schleife darüber aus:
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
Ergebnis:
This is part of europe
Antwort2
Sie können
if [ $hstname == $location1 ] || [ $hstname == $location2 ] || [ $hstname == $location3 ] ; then
Aber die Leerzeichen nicht vergessen!!
Es wäre vielleicht besser, „Case“ mit allen Standorten in der Bedingung zu verwenden.