Portál AbcLinuxu, 13. května 2025 17:02
#!/bin/bash while getopts ab VOLBA do case $VOLBA in a) echo "zadali jste parametr A";; b)echo "zadali jste paramtr B";; *) echo "zadali špatná paramtr exit 1;; esac donechtěl bych se zeptat, jak by se tento kod měl upravit abych v console mohl zadávat např: ./neco.sh -a text1 -b text2. a jak bych z toho mohl dostat text1 a text2, což je vlastně text kterej zadá uživatel. děkuji
getopts
, uvádím řešení s getopt
less /usr/share/doc/util-linux/examples/getopt-parse.bash
TEMP=`getopt -o ab:c:: --long a-long,b-long:,c-long:: \ -n 'example.bash' -- "$@"` if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi # Note the quotes around `$TEMP': they are essential! eval set -- "$TEMP" while true ; do case "$1" in -a|--a-long) echo "Option a" ; shift ;; -b|--b-long) echo "Option b, argument \`$2'" ; shift 2 ;; -c|--c-long) case "$2" in "") echo "Option c, no argument"; shift 2 ;; *) echo "Option c, argument \`$2'" ; shift 2 ;; esac ;; --) shift ; break ;; *) echo "Internal error!" ; exit 1 ;; esac done echo "Remaining arguments:" for arg do echo '--> '"\`$arg'" ; done
$ priklad -a A -b B -c C
#!/usr/bin/env bash TEMP=`getopt -o a:b:c: -n 'priklad' -- "$@"` eval set -- "$TEMP" while true; do case "$1" in -a) VAR_A="$2"; shift 2 ;; -b) VAR_B="$2"; shift 2 ;; -c) VAR_C="$2"; shift 2 ;; *) echo "ostatni: "$@""; break ;; esac done echo "$VAR_A" "$VAR_B" "$VAR_C"
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.