ක්රමය # 1: getopt [s] නොමැතිව bash භාවිතා කිරීම
යතුරු-අගය-යුගල තර්ක සම්මත කිරීමට පොදු ක්රම දෙකක් නම්:
Bash Space-Separated (උදා --option argument
:) (getopt [s] නොමැතිව)
භාවිතය demo-space-separated.sh -e conf -s /etc -l /usr/lib /etc/hosts
cat >/tmp/demo-space-separated.sh <<'EOF'
#!/bin/bash
POSITIONAL=()
while [[ $# -gt 0 ]]
do
key="$1"
case $key in
-e|--extension)
EXTENSION="$2"
shift # past argument
shift # past value
;;
-s|--searchpath)
SEARCHPATH="$2"
shift # past argument
shift # past value
;;
-l|--lib)
LIBPATH="$2"
shift # past argument
shift # past value
;;
--default)
DEFAULT=YES
shift # past argument
;;
*) # unknown option
POSITIONAL+=("$1") # save it in an array for later
shift # past argument
;;
esac
done
set -- "${POSITIONAL[@]}" # restore positional parameters
echo "FILE EXTENSION = ${EXTENSION}"
echo "SEARCH PATH = ${SEARCHPATH}"
echo "LIBRARY PATH = ${LIBPATH}"
echo "DEFAULT = ${DEFAULT}"
echo "Number files in SEARCH PATH with EXTENSION:" $(ls -1 "${SEARCHPATH}"/*."${EXTENSION}" | wc -l)
if [[ -n $1 ]]; then
echo "Last line of file specified as non-opt/last argument:"
tail -1 "$1"
fi
EOF
chmod +x /tmp/demo-space-separated.sh
/tmp/demo-space-separated.sh -e conf -s /etc -l /usr/lib /etc/hosts
ඉහත කොටස අවහිර කිරීමෙන් පිටවීම:
FILE EXTENSION = conf
SEARCH PATH = /etc
LIBRARY PATH = /usr/lib
DEFAULT =
Number files in SEARCH PATH with EXTENSION: 14
Last line of file specified as non-opt/last argument:
#93.184.216.34 example.com
Bash Equals-Separated (උදා --option=argument
:) (getopt [s] නොමැතිව)
භාවිතය demo-equals-separated.sh -e=conf -s=/etc -l=/usr/lib /etc/hosts
cat >/tmp/demo-equals-separated.sh <<'EOF'
#!/bin/bash
for i in "$@"
do
case $i in
-e=*|--extension=*)
EXTENSION="${i#*=}"
shift # past argument=value
;;
-s=*|--searchpath=*)
SEARCHPATH="${i#*=}"
shift # past argument=value
;;
-l=*|--lib=*)
LIBPATH="${i#*=}"
shift # past argument=value
;;
--default)
DEFAULT=YES
shift # past argument with no value
;;
*)
# unknown option
;;
esac
done
echo "FILE EXTENSION = ${EXTENSION}"
echo "SEARCH PATH = ${SEARCHPATH}"
echo "LIBRARY PATH = ${LIBPATH}"
echo "DEFAULT = ${DEFAULT}"
echo "Number files in SEARCH PATH with EXTENSION:" $(ls -1 "${SEARCHPATH}"/*."${EXTENSION}" | wc -l)
if [[ -n $1 ]]; then
echo "Last line of file specified as non-opt/last argument:"
tail -1 $1
fi
EOF
chmod +x /tmp/demo-equals-separated.sh
/tmp/demo-equals-separated.sh -e=conf -s=/etc -l=/usr/lib /etc/hosts
ඉහත කොටස අවහිර කිරීමෙන් පිටවීම:
FILE EXTENSION = conf
SEARCH PATH = /etc
LIBRARY PATH = /usr/lib
DEFAULT =
Number files in SEARCH PATH with EXTENSION: 14
Last line of file specified as non-opt/last argument:
#93.184.216.34 example.com
මෙම මාර්ගෝපදේශයෙහි${i#*=}
"උපස්ථර ඉවත් කිරීම" සඳහා වන සෙවීම වඩා හොඳින් තේරුම් ගැනීමට . එය ක්රියාකාරී ලෙස අනවශ්ය උපප්රොසෙස් ලෙස හඳුන්වන හෝ අනවශ්ය උපප්රොසෙස් දෙකක් ලෙස හැඳින්වේ.`sed 's/[^=]*=//' <<< "$i"`
`echo "$i" | sed 's/[^=]*=//'`
ක්රමය # 2: getopt [s] සමඟ bash භාවිතා කිරීම
සිට: http://mywiki.wooledge.org/BashFAQ/035#getopts
getopt (1) සීමාවන් (පැරණි, සාපේක්ෂව මෑත getopt
සංස්කරණ):
- හිස් නූල් වන තර්ක හැසිරවිය නොහැක
- කාවැද්දූ සුදු අවකාශය සමඟ තර්ක හැසිරවිය නොහැක
වඩාත් මෑත getopt
අනුවාද වල මෙම සීමාවන් නොමැත.
මීට අමතරව, getopts
මෙම සීමාවන් නොමැති POSIX shell (සහ වෙනත්) පිරිනැමීම . මම සරල getopts
උදාහරණයක් ඇතුළත් කර ඇත්තෙමි .
භාවිතය demo-getopts.sh -vf /etc/hosts foo bar
cat >/tmp/demo-getopts.sh <<'EOF'
#!/bin/sh
# A POSIX variable
OPTIND=1 # Reset in case getopts has been used previously in the shell.
# Initialize our own variables:
output_file=""
verbose=0
while getopts "h?vf:" opt; do
case "$opt" in
h|\?)
show_help
exit 0
;;
v) verbose=1
;;
f) output_file=$OPTARG
;;
esac
done
shift $((OPTIND-1))
[ "${1:-}" = "--" ] && shift
echo "verbose=$verbose, output_file='$output_file', Leftovers: $@"
EOF
chmod +x /tmp/demo-getopts.sh
/tmp/demo-getopts.sh -vf /etc/hosts foo bar
ඉහත කොටස අවහිර කිරීමෙන් පිටවීම:
verbose=1, output_file='/etc/hosts', Leftovers: foo bar
මෙහි ඇති වාසි getopts
:
- එය වඩා අතේ ගෙන යා හැකි අතර වෙනත් ෂෙල් වෙඩි වැනි ක්රියා කරනු
dash
ඇත.
-vf filename
සාමාන්ය යුනික්ස් ක්රමයට මෙන් තනි විකල්ප කිහිපයක් ස්වයංක්රීයව හැසිරවිය හැක .
අවාසිය getopts
නම් එයට හැසිරවිය හැක්කේ අතිරේක කේතයකින් තොරව කෙටි විකල්ප (පමණක් -h
නොවේ --help
) පමණි .
සියලු වාක්ය ඛණ්ඩ සහ විචල්යයන් අදහස් කරන්නේ කුමක්ද යන්න පැහැදිලි කරන getopts නිබන්ධනයක් ඇත. Bash දී, එහි ද help getopts
තොරතුරු විය හැකි අතර,.
zparseopts -D -E -M -- d=debug -debug=d
ඒ දෙකම ඇති-d
හා--debug
තුළ$debug
මාලාවක්echo $+debug[1]
0 හෝ 1 ආපසු අය එක් භාවිතා කරන්නේ නම්. Ref: zsh.org/mla/users/2011/msg00350.html