user1778354
user1778354

Reputation: 333

bash using getopts

Example of script usage

./foo.sh -v -r /home/ -s /home/user/file
./foo.sh -r /home/ -s /home/user/file

In parameter I always need a file or a folder to scan and a file for the database (-s database file)

inside foo.sh

function entrance()
{
while getopts "v:r:s" opt; do
  case $opt in
    v)
      echo "-v was triggered, Verbose mode" >&2
      ;;
    r)
      echo "-r was triggered, recursive mode: $OPTARG" >&2
      ;;
    s)
      echo "-s was triggered, DATABASE: $OPTARG" >&2
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      exit 1
      ;;
    :)
      echo "Option -$OPTARG requires an argument." >&2
      exit 1
      ;;
  esac
done
}

I don't know why it doesn't work.

Please fix me.

Thanks

Upvotes: 2

Views: 750

Answers (1)

d33tah
d33tah

Reputation: 11561

You probably forgot about $@ while calling the function. See this:

#!/bin/bash

function entrance() {
while getopts "v:r:s" opt; do
  case $opt in
    v)
      echo "-v was triggered, Verbose mode" >&2
      ;;
    r)
      echo "-r was triggered, recursive mode: $OPTARG" >&2
      ;;
    s)
      echo "-s was triggered, DATABASE: $OPTARG" >&2
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      exit 1
      ;;
    :)
      echo "Option -$OPTARG requires an argument." >&2
      exit 1
      ;;
  esac
done
}

entrance "$@"

And some explanation: Using getopts within user-defined-function in bourne shell

Upvotes: 2

Related Questions