Solved

"unexpected operator" error in sh script

Posted on 2010-11-25
3
1,529 Views
Last Modified: 2012-05-10
I made a wrapper script so my password isn't logged into bash_history and also so I don't have to do so much typing for a few common "vmrun" commands.

It works fine but, unfortunately, I am getting the following error:

$ ./vvmrun -p list
./vvmrun: line 40: [: -v: unary operator expected

On another computer the error is "unexpected operator."

Help appreciated...

Thanks,
Frank

#!/bin/sh
# Define Version Number & Description
version="1.0"
desc="Wrapper for vmrun"
program=`echo $0 |sed -e 's#^\./##'`
# Define help
help="
$program $version, $desc\n
Usage: $program \[Options\] command\n
Example: $program -p > command\n
\n
Options \n
\n
-s Show the command that will be run--no action taken.\n
-p Prompt for password.\n
-H Remote hostname (default=local hostname).\n
"   # see wget -h for "help" layout ideas

# define variables
host=`hostname`

# if no arguments then print help and exit
if [ $# = 0 ]; then
    echo $help && exit
fi

# options followed by a ":" take arguments--";" optional arguments
while getopts "hspH:" option; do
    case "$option" in
	h) echo $help && exit;;
	s) show=1;;
	p) passwd=1;;
	H) host="$OPTARG";;
	[?]) echo "Exiting due to illegal option" && exit;;
    esac
done
shift `expr $OPTIND - 1`

# do stuff here
if ! [ -v $passwd ] ; then 
    stty -echo
    read -p "Password: " passw; echo
    stty echo
    command="vmrun -T server -h http://$host:8222/sdk -u frank -p $passw"
else
    command="vmrun -T server -h http://$host:8222/sdk"
fi

if ! [ -v $show ] ; then 
    echo $command $@
else 
    $command $@
fi
exit 0

Open in new window

0
Comment
Question by:ibanja
3 Comments
 
LVL 23

Assisted Solution

by:Maciej S
Maciej S earned 50 total points
Comment Utility
There is no such test like -v.
Refer to "man test" for possible tests.
0
 
LVL 48

Accepted Solution

by:
Tintin earned 200 total points
Comment Utility
if ! [ -v $passwd ] ; then


should be

if  [  "$passwd" -eq 1 ] ; then

or

if  [ -n "$passwd" ] ; then

0
 

Author Closing Comment

by:ibanja
Comment Utility
Not sure where I got the "-v" from.

Thanks!
0

Featured Post

Highfive + Dolby Voice = No More Audio Complaints!

Poor audio quality is one of the top reasons people don’t use video conferencing. Get the crispest, clearest audio powered by Dolby Voice in every meeting. Highfive and Dolby Voice deliver the best video conferencing and audio experience for every meeting and every room.

Join & Write a Comment

This Windows batch file is useful for organizing image files from a digital camera or other source, but can have many other uses.  It simply renames the file(s) to match their create date.  For example, if you took a picture today at 1:40pm and the …
Utilizing an array to gracefully append to a list of EmailAddresses
Learn several ways to interact with files and get file information from the bash shell. ls lists the contents of a directory: Using the -a flag displays hidden files: Using the -l flag formats the output in a long list: The file command gives us mor…
This video explains how to create simple products associated to Magento configurable product and offers fast way of their generation with Store Manager for Magento tool.

771 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now