λÃüÁîÀ´Òƶ¯2¸öλÖá£
ÕýÈç»ù±¾¹¦ÄÜÒ»Ñù£¬Õâ¸ö¹ý³Ì¿ÉÒÔÔÚÈκÎÄãËùÑ¡ÔñµÄµØ·½¹¤×÷£¨Çë¼Çס£¬°üÀ¨Ã¿¸öÑ¡ÏîµÄÊʵ±µÄÑ¡Ïî²ÎÊý£©£º
$ ./test17 -b test1 -a -d
Found the -b option, with parameter value test1 Found the -a option -d is not an option $
ÏÖÔÚÄãÓÐÄÜÁ¦ÔÚÄãµÄ½Å±¾Öд¦ÀíÃüÁîÐÐÑ¡Ïµ«ÕâÒ²ÓоÖÏÞÐÔ£¬ÀýÈ磬Èç¹ûÄã³¢ÊÔ½«¶à¸öÑ¡Ïî×éºÏÔÚÒ»¸ö²ÎÊýÖУ¬Õ⽫²»¹¤×÷£º
$ ./test17 -ac -ac is not an option $
ÔÚLinuxÖÐÕâÊÇÒ»ÖÖ³£¼ûµÄ½áºÏÑ¡ÏîµÄ×ö·¨£¬Èç¹ûÄãµÄ½Å±¾ÊÇÓû§ÓѺõģ¬ÄãҪΪÄãµÄÓû§ÌṩÕâÒ»¹¦ÄÜ¡£ÐÒÔ˵ÄÊÇ£¬»¹ÓÐÁíÒ»ÖÖ·½·¨¿ÉÒÔ°ïÖúÎÒÃÇ¡£
Using the getopt command£¨Ê¹ÓÃgetoptÃüÁ
getoptÃüÁîÊÇ´¦ÀíÃüÁîÐÐÑ¡ÏîºÍ²ÎÊýµÄÒ»¸öºÜºÃµÄ¹¤¾ß¡£Ëü½«¸üÈÝÒ×ÔÚÄãµÄ½Å±¾ÖзÖÎöÃüÁîÐвÎÊý¡£ The command format£¨ÃüÁî¸ñʽ£©
getoptÃüÁî¿ÉÒÔÁгöÈκÎÐÎʽµÄÃüÁîÐÐÑ¡ÏîºÍ²ÎÊý£¬²¢ÇÒ×Ô¶¯°ÑËüÃÇת»»³ÉÊʵ±µÄ¸ñʽ¡£ËüʹÓÃÃüÁî¸ñʽ£º
getopt options optstring parameters
Ëü¶¨ÒåÁËÃüÁîÐÐÖÐʹÓõÄÓÐЧѡÏî¡£Ëü»¹¶¨ÒåÁËÄÄЩѡÏîÐèÒªÒ»¸ö²ÎÊýÖµ¡£
Ê×ÏÈ£¬Áгöÿһ¸öÄãÒªÔÚÄãµÄ½Å±¾ÖÐʹÓõÄÃüÁîÐÐÑ¡ÏȻºó£¬ÔÚÐèÒª²ÎÊýÖµµÄÑ¡Ïîºó·ÅÖÃÒ»¸öðºÅ¡£ ÕâÊÇÒ»¸ö¼òµ¥µÄÀý×Ó£º
$ getopt ab:cd -a -b test1 -cd test2 test3 -a -b test1 -c -d -- test2 test3 $
optstring¶¨ÒåÁËËĸöÓÐЧµÄÑ¡ÏîµÄ×Öĸ£¬A£¬B£¬C£¬D¡£Ëü»¹¶¨ÒåÁËÑ¡ÏîBÐèÒªÒ»¸ö²ÎÊýÖµ¡£µ±getoptÃüÁîÔËÐÐʱ£¬Ëü¼ì²éÌṩµÄ²ÎÊýÁÐ±í¡£
Èç¹ûÄãÖ¸¶¨µÄÒ»¸öÑ¡Ïî²»ÔÚoptstring£¬Ä¬ÈÏÇé¿öÏÂgetoptÃüÁî²úÉúÒ»¸ö´íÎóÐÅÏ¢£º
$ getopt ab:cd -a -b test1 -cde test2 test3 getopt: invalid option -- e -a -b test1 -c -d -- test2 test3 $
Èç¹ûÄãÄþÔ¸ºöÂÔ´íÎóÐÅÏ¢£¬Ê¹ÓÃ-qÑ¡ÏîµÄÃüÁ
$ getopt -q ab:cd -a -b test1 -cde test2 test3 -a -b ¡¯test1¡¯ -c -d -- ¡¯test2¡¯ ¡¯test3¡¯ $
×¢Ò⣬getoptÃüÁîÑ¡Ïî±ØÐëÁÐÔÚoptstring֮ǰ¡£ÏÖÔÚÄãÓ¦¸Ã¿ÉÒÔ×¼±¸ºÃÔÚÄãµÄ½Å±¾ÖÐʹÓÃÕâ¸öÃüÁî´¦ÀíÃüÁîÐÐÑ¡Ïî¡£
Using getopt in your scripts£¨ÔÚÄãµÄ½Å±¾ÖÐʹÓÃgetopt£© Äú¿ÉÒÔʹÓýű¾getoptÃüÁî¸ñʽµÄÈκÎÃüÁîÐÐÑ¡Ïî»ò²ÎÊýÊäÈë½Å±¾¡£ÕâÓе㼬ÊÖ£¬µ«¿ÉÒÔʹÓá£
¾÷ÇÏÊÇÓøñʽ»¯µÄ°æ±¾Ìæ»»ÏÖÓÐgetoptÃüÁîÉú³ÉÃüÁîÐÐÑ¡ÏîºÍ²ÎÊý¡£×öÕâ¸öµÄ·½·¨ÊÇʹÓü¯ºÏÃüÁî¡£
ÔÚµÚ5ÕÂÖУ¬Äã¿´µ½ÁËÉèÖõÄÃüÁî¡£Ôڽű¾ÖеIJ»Í¬µÄ±äÁ¿ÉèÖÃÃüÁîµÄ¹¤×÷¡£5ÕÂչʾÁËÈçºÎʹÓü¯ºÏÃüÁîÀ´ÏÔʾËùÓеÄϵͳ»·¾³±äÁ¿¡£ÉèÖÃÃüÁîµÄÑ¡ÏîÖ®Ò»ÊÇË«³å¡£
È»ºó£¬¾÷ÇÏÊǽ«Ôʼ½Å±¾ÃüÁîÐвÎÊýgetoptÃüÁȻºóË͸øÉèÖÃÃüÁîºÍ¸ñʽ»¯ºÃµÄgetoptÈ¡´úÔÀ´µÄÃüÁîÐвÎÊýgetoptÃüÁîµÄÊä³ö¡£Õâ¿´ÆðÀ´ÏñÕâÑù£º
set -- `getopts -q ab:cd \
ʹÓÃÕâÖÖ¼¼Êõ£¬ÎÒÃÇÏÖÔÚ¿ÉÒÔ±àд½Å±¾À´´¦ÀíÎÒÃǵÄÃüÁîÐвÎÊý£º
$ cat test18 #!/bin/bash
# extracting command line options and values with getopt
set -- `getopt -q ab:c \while [ -n \
do
case \
-a) echo \-b) param=\
echo \the -b option, with parameter value $param\shift ;;
-c) echo \--) shift break;;
*) echo \Esac shift done count=1
for param in \do
echo \count=$[ $count + 1 ] done $
Äã»á×¢Òâµ½£¬ÕâÓëtest17µÄ½Å±¾ÊÇ»ù±¾ÏàͬµÄ¡£Î¨Ò»¸Ä±äµÄÊÇgetopt
Ïà¹ØÍÆ¼ö£º