[BASH] Funkcja --help...
: 10 lut 2009, 09:32
jak zrobić ab jeżeli ktoś wpisze kod.sh --help to pojawi się pomoc?
Polskie forum użytkowników Ubuntu
https://ubuntu.pl/forum/
Kod: Zaznacz cały
sudo apt-get install manpages-posix
man getopts
Kod: Zaznacz cały
# Main script
if [ $# -ne 0 ]; then
if [ "$1" == "--now" ] || [ "$1" == "-n" ]; then
# Create file to compare.
touch -t `date +%m%d%H%m` /tmp/$$
# Find all files that are modified today (since start of create file in /tmp)
# in current or $path directory and its sub-directories:
find $path -type f -newer /tmp/$$
# Clean after work
rm -f /tmp/$$
exit 0
elif [ "$1" == "--help" ] || [ "$1" == "-h" ]; then
echo ""
echo "Usage $0 OPTION"
echo "Test scripts environment."
echo ""
echo "Mandatory arguments to long options are mandatory for short options too."
echo -e " -h, --help\t\tdisplay this help and exit"
echo -e " -n, --now\t\tfind last modified files"
exit 0
else
echo "$0: unrecognized option \`$1\`"
echo "Try \`$0 --help\` for more information."
exit 0
fi
else
echo "$0: unrecognized option \`$1\`"
echo "Try \`$0 --help\` for more information."
exit 0
fi
Kod: Zaznacz cały
Each short option can have multiple long option equivalents,
although this is in violation of the CLIP specification and
should be used with caution. You must enclose each long
option equivalent parentheses, as follows:
getopts "f:(file)(input-file)o:(output-file)"
In the above example, both --file and --input-file are the
equivalent of -f, and --output-file is the equivalent of -o.
Kod: Zaznacz cały
while getopts "h(help)ab:c" opcja
do
case $opcja in
h) DRUKUJ_POMOC;;
a) OBSŁUŻ_OPCJĘ_A;;
b) OBSŁUŻ_OPCJĘ_B (podany argument jest w zmiennej OPTARG);;
c) OBSŁUŻ_OPCJĘ_C;;
?) Rzuć błędem, że nie ma takiej opcji;;
esac
done
Kod: Zaznacz cały
getopts "h(help)"
Kod: Zaznacz cały
getopts "h:(help)"
Kod: Zaznacz cały
i=$OPTARG
Kod: Zaznacz cały
pdftk A=INPUT_FILE1.pdf B=INPUT_FILE2.pdf cat A1E B2 output OUTPUT_FILE.pdf
Kod: Zaznacz cały
#!/bin/sh
function pomoc ()
{
echo "Wyświetli pomoc"
}
while [ $# -gt 0 ]
do
case $1 in
-h|--help) pomoc ;;
esac
shift 1
done
Obsługuje. Pod warunkiem, że istnieje jednoliterowy alias. Ostatecznie, te przykłady które podałem działają...nUmer pisze:getops nie obsługuje długiej opcji poprzedzonej dwoma minusami
Parametrów czy argumentów? Nie potrzeba przecież więcej niż jednego argumentu do parametru, lepiej to rozbić na dwa. A jeśli pytasz o parametry, nie argumenty parametrów, to szczerze mówiąc nie rozumiem.rryk pisze:heh a jak mam mieć zamiar parę parametrów to jak się do poszczególnych odwołać??
Kod: Zaznacz cały
while getopts "m:k:" opcja
do
case $opcja in
m) message=$OPTARG;;
k) costam=$OPTARG;;
?) echo "error";;
esac
done
Tak. Pisałem o tym przecież...rryk pisze:do jakiej zmiennej jest zapisywane to co podam np jeden parametr dla -m jeden dla -k i zapisze to w takim kodzieto zadziała??Kod: Zaznacz cały
while getopts "m:k:" opcja do case $opcja in m) message=$OPTARG;; k) costam=$OPTARG;; ?) echo "error";; esac done
Rozbij go na dwa, zazwyczaj da się to jakoś naturalnie zrobić. Jeśli naprawdę chcesz przekazać jako parametr napis ze spacją, to otocz go cudzysłowami, żeby był traktowany jako całość. W przypadku liczb to zazwyczaj nie ma sensu.rryk pisze:jesli argument dla parametru m wynosi wiecej niz jeden wyraz to będzie jakiś problem??
Tylko tak jak napisałem - w cudzysłowie.rryk pisze:acha spox ale bez rozbijania to by takie coś działało ??
Kod: Zaznacz cały
while getopts "h(help)i(info)u(uptime)w(wyslij)m(miejsce)" opcja
Długie opcje poprzedza się dwoma kreskami, krótkie jedną. Chodzi o to, że dzięki takiemu podejściu krótkie opcje można grupować, np. zamiast pisać:rryk pisze:jak wpisze ./skrypt.sh -uptime to się uruchamia uptime, info i miejsce ^^ a chodziło mi o sam uptime.
Kod: Zaznacz cały
program -a -b -c n
Kod: Zaznacz cały
program -abc n
Kod: Zaznacz cały
./skrypt.sh --uptime