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;








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?










share|improve this question







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

















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?










share|improve this question







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













0












0








0


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?










share|improve this question







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






share|improve this question







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.











share|improve this question







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.









share|improve this question




share|improve this question






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

















  • 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










1 Answer
1






active

oldest

votes


















1














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;;





share|improve this answer

























    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.









    draft saved

    draft discarded


















    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









    1














    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;;





    share|improve this answer





























      1














      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;;





      share|improve this answer



























        1












        1








        1







        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;;





        share|improve this answer















        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;;






        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited yesterday

























        answered yesterday









        XrXcaXrXca

        813




        813




















            braveterry is a new contributor. Be nice, and check out our Code of Conduct.









            draft saved

            draft discarded


















            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.




            draft saved


            draft discarded














            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





















































            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

            Popular posts from this blog

            Creating 100m^2 grid automatically using QGIS?Creating grid constrained within polygon in QGIS?Createing polygon layer from point data using QGIS?Creating vector grid using QGIS?Creating grid polygons from coordinates using R or PythonCreating grid from spatio temporal point data?Creating fields in attributes table using other layers using QGISCreate .shp vector grid in QGISQGIS Creating 4km point grid within polygonsCreate a vector grid over a raster layerVector Grid Creates just one grid

            Why is this plane circling around the Lucknow airport every day?Why do aircraft on Flight Radar 24 jump around randomly sometimes?What airport has this walkway over a taxiway?How does Chicago O'Hare's tower sequence aircraft at peak capacity?Which airport is featured in this Delta commercial?After a crash, for how long is the airport closed?Can a passenger plane stand still in the air, or hover at a fixed location above a ground?What are those trucks towing around, and why?What is this airport outside of Cairo, Egypt?Which US airport has the lowest circling MDH?What is this airport video?

            What is this called? Old film camera viewer?What makes a good film camera?What to do with an old film camera?What should one look for when buying a used film camera?What is the value and age of this pre-1967 Ricoh 35 mm camera?DSLR recommendation, question about old Canon 35mm film Camera & lensesCan anyone identify the silver rangefinder-style camera in this advertisement?What kind of a Polaroid 600-camera is this?Will an old film camera still work even when not used in a very long time?What is this camera / Can I develop the film?How to fit an action camera into antique (bellows) housing?What to check when buying used and old film bodies?