Portál AbcLinuxu, 1. listopadu 2025 19:22
#!/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
done
chtě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
účel ale splňuje.less /usr/share/doc/util-linux/examples/getopt-parse.bash
když zadám tento skript ./neco.sh -a text1 -b text2 -c text3
jak by vypadli 3 proměnné pro ty text1 až text3?
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.