On 8/23/2012 8:24 PM, Matthew Kruer wrote:
> Just a peer review
> This script works, but I want to know if there is a more elegant way of doing it.
> Thanks
> #!/bin/bash
> #
> CONSOLEOUT="%-50s"
> default_hostname1() {
> HOSTNAME_1=`hostname -s`
> }
> #Set Defaults
> default_hostname1
> while [[ $CORRECT != "y" ]]
> do
> #### Enter First Hostname ###
> if [[ -n $HOSTNAME_1 ]] ; then
> DEFAULT_HOSTNAME_1="$HOSTNAME_1"
> FORMATED_DEFAULT_HOSTNAME_1="[$HOSTNAME_1]"
> fi
> printf "$CONSOLEOUT" "Enter First Hostname $FORMATED_DEFAULT_HOSTNAME_1"
> read HOSTNAME_1
> if [[ -n $DEFAULT_HOSTNAME_1 ]] && [[ -z $HOSTNAME_1 ]] ; then
> HOSTNAME_1=$DEFAULT_HOSTNAME_1
> fi
> #### Enter Second Hostname ###
> if [[ -n $HOSTNAME_2 ]] ; then
> DEFAULT_HOSTNAME_2="$HOSTNAME_2"
> FORMATED_DEFAULT_HOSTNAME_2="[$HOSTNAME_2]"
> fi
> printf "$CONSOLEOUT" "Enter Second Hostname $FORMATED_DEFAULT_HOSTNAME_2"
> read HOSTNAME_2
> if [[ -n $DEFAULT_HOSTNAME_2 ]] && [[ -z $HOSTNAME_2 ]] ; then
> HOSTNAME_2=$DEFAULT_HOSTNAME_2
> fi
> while [[ -z $HOSTNAME_2 ]]
> do
> printf "$CONSOLEOUT" "Invalid Hostname, Enter Second Hostname"
> read HOSTNAME_2
> done
> ### Confirm ####
> echo "Host 1 is $HOSTNAME_1"
> echo "Host 2 is $HOSTNAME_2"
> echo "Is this correct? [y/n]"
> read CORRECT
> done
Seems fine, but I'd probably make a function out of the common parts for the 2
HOSTNAMEs, see below.
#!/bin/bash
#
CONSOLEOUT="%-50s"
default_hostname() {
HOSTNAME[$1]=`hostname -s`
}
get_hostname() {
if [[ -n ${HOSTNAME[$1]} ]] ; then
DEFAULT_HOSTNAME[$1]="${HOSTNAME[$1]}"
FORMATED_DEFAULT_HOSTNAME[$1]="[${HOSTNAME[$1]}]"
fi
printf "$CONSOLEOUT" "Enter Hostname $1 [${HOSTNAME[$1]}]"
read HOSTNAME[$1]
if [[ -n ${DEFAULT_HOSTNAME[$1]} ]] && [[ -z ${HOSTNAME[$1]} ]] ; then
HOSTNAME[$1]=${DEFAULT_HOSTNAME[$1]}
fi
}
#Set Defaults
default_hostname 1
while [[ $CORRECT != "y" ]]
do
#### Enter First Hostname ###
get_hostname 1
#### Enter Second Hostname ###
get_hostname 2
while [[ -z ${HOSTNAME[2]} ]]
do
printf "$CONSOLEOUT" "Invalid Hostname, Enter Second Hostname"
read HOSTNAME[2]
done
### Confirm ####
echo "Host 1 is ${HOSTNAME[1]}"
echo "Host 2 is ${HOSTNAME[2]}"
echo "Is this correct? [y/n]"
read CORRECT
done
I don't really follow your logic, though, in the way you have a default for host
1 but not host 2 and then you have a separate loop to populate host 2 after you
try to get it. There may be a simpler solution.
Ed.