How do I pass long-style command line options to a bash script using getopt? The 2019 Stack Overflow Developer Survey Results Are In Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) 2019 Community Moderator Election Results Why I closed the “Why is Kali so hard” questiongetopt, getopts or manual parsing - what to use when I want to support both short and long options?shell script options pass through to sub-commandWhat is wrong with my init.d script [Segmentation fault]Command line options with argument in shell scriptPass options / parameters - arguments to bash scriptAbbreviated long options on the command line of xclipHow can options be parsed in a Bash script, leaving unrecognized options after the “--”?How to pass every line of a file as options to a command?Pass params for getopt from a script that does not use getoptBash Script Wind Chill using getopt and bc
Working through the single responsibility principle (SRP) in Python when calls are expensive
What information about me do stores get via my credit card?
The variadic template constructor of my class cannot modify my class members, why is that so?
How to test the equality of two Pearson correlation coefficients computed from the same sample?
Am I ethically obligated to go into work on an off day if the reason is sudden?
Derivation tree not rendering
Are spiders unable to hurt humans, especially very small spiders?
How to copy the contents of all files with a certain name into a new file?
Can undead you have reanimated wait inside a portable hole?
Make it rain characters
Relations between two reciprocal partial derivatives?
ELI5: Why do they say that Israel would have been the fourth country to land a spacecraft on the Moon and why do they call it low cost?
How do you keep chess fun when your opponent constantly beats you?
Does Parliament hold absolute power in the UK?
How to delete random line from file using Unix command?
Single author papers against my advisor's will?
ipsec, esp: Which key is used to generate the HMAC
Scientific Reports - Significant Figures
In horse breeding, what is the female equivalent of putting a horse out "to stud"?
Arduino Pro Micro - switch off LEDs
Empty set is subset of every set? If yes, why that...
Why did all the guest students take carriages to the Yule Ball?
How many people can fit inside Mordenkainen's Magnificent Mansion?
Why can't wing-mounted spoilers be used to steepen approaches?
How do I pass long-style command line options to a bash script using getopt?
The 2019 Stack Overflow Developer Survey Results Are In
Announcing the arrival of Valued Associate #679: Cesar Manara
Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)
2019 Community Moderator Election Results
Why I closed the “Why is Kali so hard” questiongetopt, getopts or manual parsing - what to use when I want to support both short and long options?shell script options pass through to sub-commandWhat is wrong with my init.d script [Segmentation fault]Command line options with argument in shell scriptPass options / parameters - arguments to bash scriptAbbreviated long options on the command line of xclipHow can options be parsed in a Bash script, leaving unrecognized options after the “--”?How to pass every line of a file as options to a command?Pass params for getopt from a script that does not use getoptBash Script Wind Chill using getopt and bc
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
I have this script that I have cobbled together from bits of lore I've gleaned from googling:
#!/usr/bin/env bash
usage()
declare -r script_name=$(basename "$0")
echo """
Usage:
"$script_name" [option] <name>
Option:
-host <foo.com
main()
if [[ $# -eq 0 ]]; then
usage
exit 1
fi
OPTIONS=$(getopt -o '' -l help,host,accountId -- "$@")
eval set -- "$OPTIONS"
while true
do
case $1 in
-help) usage
exit 0
;;
-accountId) ACCOUNTID=$2; shift 2;;
-host) HOST=$2 shift 2;;
--) shift ; break ;;
esac
done
echo host: $HOST, accountId: $ACCOUNTID
main "$@"
Here's what it outputs:
$ . test.sh -help
host: , accountId:
$ . test.sh -host foo.com -accountId 001123456789
host: , accountId:
I'm a bash scripting newbie. What have I done wrong?
bash shell-script options getopts
New contributor
braveterry is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
add a comment |
I have this script that I have cobbled together from bits of lore I've gleaned from googling:
#!/usr/bin/env bash
usage()
declare -r script_name=$(basename "$0")
echo """
Usage:
"$script_name" [option] <name>
Option:
-host <foo.com
main()
if [[ $# -eq 0 ]]; then
usage
exit 1
fi
OPTIONS=$(getopt -o '' -l help,host,accountId -- "$@")
eval set -- "$OPTIONS"
while true
do
case $1 in
-help) usage
exit 0
;;
-accountId) ACCOUNTID=$2; shift 2;;
-host) HOST=$2 shift 2;;
--) shift ; break ;;
esac
done
echo host: $HOST, accountId: $ACCOUNTID
main "$@"
Here's what it outputs:
$ . test.sh -help
host: , accountId:
$ . test.sh -host foo.com -accountId 001123456789
host: , accountId:
I'm a bash scripting newbie. What have I done wrong?
bash shell-script options getopts
New contributor
braveterry is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
A long option is usually preceded by--, as in--accountId.
– Kusalananda♦
yesterday
add a comment |
I have this script that I have cobbled together from bits of lore I've gleaned from googling:
#!/usr/bin/env bash
usage()
declare -r script_name=$(basename "$0")
echo """
Usage:
"$script_name" [option] <name>
Option:
-host <foo.com
main()
if [[ $# -eq 0 ]]; then
usage
exit 1
fi
OPTIONS=$(getopt -o '' -l help,host,accountId -- "$@")
eval set -- "$OPTIONS"
while true
do
case $1 in
-help) usage
exit 0
;;
-accountId) ACCOUNTID=$2; shift 2;;
-host) HOST=$2 shift 2;;
--) shift ; break ;;
esac
done
echo host: $HOST, accountId: $ACCOUNTID
main "$@"
Here's what it outputs:
$ . test.sh -help
host: , accountId:
$ . test.sh -host foo.com -accountId 001123456789
host: , accountId:
I'm a bash scripting newbie. What have I done wrong?
bash shell-script options getopts
New contributor
braveterry is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
I have this script that I have cobbled together from bits of lore I've gleaned from googling:
#!/usr/bin/env bash
usage()
declare -r script_name=$(basename "$0")
echo """
Usage:
"$script_name" [option] <name>
Option:
-host <foo.com
main()
if [[ $# -eq 0 ]]; then
usage
exit 1
fi
OPTIONS=$(getopt -o '' -l help,host,accountId -- "$@")
eval set -- "$OPTIONS"
while true
do
case $1 in
-help) usage
exit 0
;;
-accountId) ACCOUNTID=$2; shift 2;;
-host) HOST=$2 shift 2;;
--) shift ; break ;;
esac
done
echo host: $HOST, accountId: $ACCOUNTID
main "$@"
Here's what it outputs:
$ . test.sh -help
host: , accountId:
$ . test.sh -host foo.com -accountId 001123456789
host: , accountId:
I'm a bash scripting newbie. What have I done wrong?
bash shell-script options getopts
bash shell-script options getopts
New contributor
braveterry is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
braveterry is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
braveterry is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
asked yesterday
braveterrybraveterry
1012
1012
New contributor
braveterry is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
braveterry is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
braveterry is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
A long option is usually preceded by--, as in--accountId.
– Kusalananda♦
yesterday
add a comment |
A long option is usually preceded by--, as in--accountId.
– Kusalananda♦
yesterday
A long option is usually preceded by
--, as in --accountId.– Kusalananda♦
yesterday
A long option is usually preceded by
--, as in --accountId.– Kusalananda♦
yesterday
add a comment |
1 Answer
1
active
oldest
votes
Minor bug, there should be a ; after the HOST=$2
If you want to use a single dash in front of long options, you can add the -a option to getopt.
Also as the host and accountId have required options, they should be followed by a :
OPTIONS=$( getopt -a -o '' -l help,host:,accountId: -- "$@" )
(camelCase isn't the best for options, how about just accountid instead of accountId)
And I generally prefer to give both long and short options, so would use:
OPTIONS=$( getopt -a -o 'h:a:' -l help,host:,accountId: -- "$@" )
and
-a|--accountId) ACCOUNTID=$2; shift 2;;
-h|--host) HOST=$2; shift 2;;
You should also check the result code from getopt, if the options are wrong you don't want to continue:
So after the OPTIONS=$(... line add the following:
if [[ $? -ne 0 ]] ; then
usage ; exit 1
fi
And on a minor aside, if the usage is being displayed, you probably always want to exit, so why not put the exit 1 at the end of usage, then you could use:
[[ $# -eq 0 ]] && usage
...
[[ $? -ne 0 ]] && usage
...
--help) usage;;
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "106"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
braveterry is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f512127%2fhow-do-i-pass-long-style-command-line-options-to-a-bash-script-using-getopt%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Minor bug, there should be a ; after the HOST=$2
If you want to use a single dash in front of long options, you can add the -a option to getopt.
Also as the host and accountId have required options, they should be followed by a :
OPTIONS=$( getopt -a -o '' -l help,host:,accountId: -- "$@" )
(camelCase isn't the best for options, how about just accountid instead of accountId)
And I generally prefer to give both long and short options, so would use:
OPTIONS=$( getopt -a -o 'h:a:' -l help,host:,accountId: -- "$@" )
and
-a|--accountId) ACCOUNTID=$2; shift 2;;
-h|--host) HOST=$2; shift 2;;
You should also check the result code from getopt, if the options are wrong you don't want to continue:
So after the OPTIONS=$(... line add the following:
if [[ $? -ne 0 ]] ; then
usage ; exit 1
fi
And on a minor aside, if the usage is being displayed, you probably always want to exit, so why not put the exit 1 at the end of usage, then you could use:
[[ $# -eq 0 ]] && usage
...
[[ $? -ne 0 ]] && usage
...
--help) usage;;
add a comment |
Minor bug, there should be a ; after the HOST=$2
If you want to use a single dash in front of long options, you can add the -a option to getopt.
Also as the host and accountId have required options, they should be followed by a :
OPTIONS=$( getopt -a -o '' -l help,host:,accountId: -- "$@" )
(camelCase isn't the best for options, how about just accountid instead of accountId)
And I generally prefer to give both long and short options, so would use:
OPTIONS=$( getopt -a -o 'h:a:' -l help,host:,accountId: -- "$@" )
and
-a|--accountId) ACCOUNTID=$2; shift 2;;
-h|--host) HOST=$2; shift 2;;
You should also check the result code from getopt, if the options are wrong you don't want to continue:
So after the OPTIONS=$(... line add the following:
if [[ $? -ne 0 ]] ; then
usage ; exit 1
fi
And on a minor aside, if the usage is being displayed, you probably always want to exit, so why not put the exit 1 at the end of usage, then you could use:
[[ $# -eq 0 ]] && usage
...
[[ $? -ne 0 ]] && usage
...
--help) usage;;
add a comment |
Minor bug, there should be a ; after the HOST=$2
If you want to use a single dash in front of long options, you can add the -a option to getopt.
Also as the host and accountId have required options, they should be followed by a :
OPTIONS=$( getopt -a -o '' -l help,host:,accountId: -- "$@" )
(camelCase isn't the best for options, how about just accountid instead of accountId)
And I generally prefer to give both long and short options, so would use:
OPTIONS=$( getopt -a -o 'h:a:' -l help,host:,accountId: -- "$@" )
and
-a|--accountId) ACCOUNTID=$2; shift 2;;
-h|--host) HOST=$2; shift 2;;
You should also check the result code from getopt, if the options are wrong you don't want to continue:
So after the OPTIONS=$(... line add the following:
if [[ $? -ne 0 ]] ; then
usage ; exit 1
fi
And on a minor aside, if the usage is being displayed, you probably always want to exit, so why not put the exit 1 at the end of usage, then you could use:
[[ $# -eq 0 ]] && usage
...
[[ $? -ne 0 ]] && usage
...
--help) usage;;
Minor bug, there should be a ; after the HOST=$2
If you want to use a single dash in front of long options, you can add the -a option to getopt.
Also as the host and accountId have required options, they should be followed by a :
OPTIONS=$( getopt -a -o '' -l help,host:,accountId: -- "$@" )
(camelCase isn't the best for options, how about just accountid instead of accountId)
And I generally prefer to give both long and short options, so would use:
OPTIONS=$( getopt -a -o 'h:a:' -l help,host:,accountId: -- "$@" )
and
-a|--accountId) ACCOUNTID=$2; shift 2;;
-h|--host) HOST=$2; shift 2;;
You should also check the result code from getopt, if the options are wrong you don't want to continue:
So after the OPTIONS=$(... line add the following:
if [[ $? -ne 0 ]] ; then
usage ; exit 1
fi
And on a minor aside, if the usage is being displayed, you probably always want to exit, so why not put the exit 1 at the end of usage, then you could use:
[[ $# -eq 0 ]] && usage
...
[[ $? -ne 0 ]] && usage
...
--help) usage;;
edited yesterday
answered yesterday
XrXcaXrXca
813
813
add a comment |
add a comment |
braveterry is a new contributor. Be nice, and check out our Code of Conduct.
braveterry is a new contributor. Be nice, and check out our Code of Conduct.
braveterry is a new contributor. Be nice, and check out our Code of Conduct.
braveterry is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f512127%2fhow-do-i-pass-long-style-command-line-options-to-a-bash-script-using-getopt%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
-bash, getopts, options, shell-script
A long option is usually preceded by
--, as in--accountId.– Kusalananda♦
yesterday