锘??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美承认网站,欧美国产日本高清在线,国产精品wwwwwwhttp://m.shnenglu.com/yeqing/category/2366.htmlzh-cnTue, 20 May 2008 12:55:01 GMTTue, 20 May 2008 12:55:01 GMT60Shell鑴氭湰璋冭瘯鎶鏈?/title><link>http://m.shnenglu.com/yeqing/articles/30919.html</link><dc:creator>澶滄瞾</dc:creator><author>澶滄瞾</author><pubDate>Mon, 27 Aug 2007 03:40:00 GMT</pubDate><guid>http://m.shnenglu.com/yeqing/articles/30919.html</guid><wfw:comment>http://m.shnenglu.com/yeqing/comments/30919.html</wfw:comment><comments>http://m.shnenglu.com/yeqing/articles/30919.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/yeqing/comments/commentRss/30919.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/yeqing/services/trackbacks/30919.html</trackback:ping><description><![CDATA[ 鏈枃鍏ㄩ潰緋葷粺鍦頒粙緇嶄簡shell鑴氭湰璋冭瘯鎶鏈紝鍖呮嫭浣跨敤echo, tee, trap絳夊懡浠よ緭鍑哄叧閿俊鎭紝璺熻釜鍙橀噺鐨勫鹼紝鍦ㄨ剼鏈腑妞嶅叆璋冭瘯閽╁瓙錛屼嬌鐢?#8220;-n”閫夐」榪涜shell鑴氭湰鐨勮娉曟鏌ワ紝 浣跨敤“-x”閫夐」瀹炵幇shell鑴氭湰閫愭潯璇彞鐨勮窡韙紝宸у鍦板埄鐢╯hell鐨勫唴緗彉閲忓寮?#8220;-x”閫夐」鐨勮緭鍑轟俊鎭瓑銆? 涓. 鍓嶈█ shell緙栫▼鍦╱nix/linux涓栫晫涓嬌鐢ㄥ緱闈炲父騫挎硾錛岀啛緇冩帉鎻hell緙栫▼涔熸槸鎴愪負涓鍚嶄紭縐鐨剈nix/linux寮鍙戣呭拰緋葷粺綆$悊鍛樼殑蹇呯粡涔嬭礬銆傝剼鏈皟璇曠殑涓昏宸ヤ綔灝辨槸鍙戠幇寮曞彂鑴氭湰閿欒鐨勫師鍥犱互鍙婂湪鑴氭湰婧愪唬鐮佷腑瀹氫綅鍙戠敓閿欒鐨勮錛屽父鐢ㄧ殑鎵嬫鍖呮嫭鍒嗘瀽杈撳嚭鐨勯敊璇俊鎭紝閫氳繃鍦ㄨ剼鏈腑鍔犲叆璋冭瘯璇彞錛岃緭鍑鴻皟璇曚俊鎭潵杈呭姪璇婃柇閿欒錛屽埄鐢ㄨ皟璇曞伐鍏風(fēng)瓑銆備絾涓庡叾瀹冮珮綰ц璦鐩告瘮錛宻hell瑙i噴鍣ㄧ己涔忕浉搴旂殑璋冭瘯鏈哄埗鍜岃皟璇曞伐鍏風(fēng)殑鏀寔錛屽叾杈撳嚭鐨勯敊璇俊鎭張寰寰寰堜笉鏄庣‘錛屽垵瀛﹁呭湪璋冭瘯鑴氭湰鏃訛紝闄や簡鐭ラ亾鐢╡cho璇彞杈撳嚭涓浜涗俊鎭錛屽埆鏃犲畠娉曪紝鑰屼粎浠呬緷璧栦簬澶ч噺鐨勫姞鍏cho璇彞鏉ヨ瘖鏂敊璇紝紜疄浠や漢涓嶈儨鍏剁箒錛屾晠甯歌鍒濆鑰呮姳鎬╯hell鑴氭湰澶毦璋冭瘯浜嗐傛湰鏂囧皢緋葷粺鍦頒粙緇嶄竴浜涢噸瑕佺殑shell鑴氭湰璋冭瘯鎶鏈紝甯屾湜鑳藉shell鐨勫垵瀛﹁呮湁鎵瑁ㄧ泭銆? 鏈枃鐨勭洰鏍囪鑰呮槸unix/linux鐜涓嬬殑寮鍙戜漢鍛橈紝嫻嬭瘯浜哄憳鍜岀郴緇熺鐞嗗憳錛岃姹傝鑰呭叿鏈夊熀鏈殑shell緙栫▼鐭ヨ瘑銆傛湰鏂囨墍浣跨敤鑼冧緥鍦˙ash3.1+Redhat Enterprise Server 4.0涓嬫祴璇曢氳繃錛屼絾鎵榪拌皟璇曟妧宸у簲涔熷悓鏍烽傜敤浜庡叾瀹僺hell銆? 浜? 鍦╯hell鑴氭湰涓緭鍑鴻皟璇曚俊鎭? 閫氳繃鍦ㄧ▼搴忎腑鍔犲叆璋冭瘯璇彞鎶婁竴浜涘叧閿湴鏂規(guī)垨鍑洪敊鐨勫湴鏂圭殑鐩稿叧淇℃伅鏄劇ず鍑烘潵鏄渶甯歌鐨勮皟璇曟墜孌點係hell紼嬪簭鍛橀氬父浣跨敤echo(ksh紼嬪簭鍛樺父浣跨敤print)璇彞杈撳嚭淇℃伅錛屼絾浠呬粎渚濊禆echo璇彞鐨勮緭鍑鴻窡韙俊鎭緢楹葷儲錛岃皟璇曢樁孌靛湪鑴氭湰涓姞鍏ョ殑澶ч噺鐨別cho璇彞鍦ㄤ駭鍝佷氦浠樻椂榪樺緱鍐嶈垂鍔涗竴涓鍒犻櫎銆傞拡瀵硅繖涓棶棰橈紝鏈妭涓昏浠嬬粛涓浜涘浣曟柟渚挎湁鏁堢殑杈撳嚭璋冭瘯淇℃伅鐨勬柟娉曘? 1. 浣跨敤trap鍛戒護 trap鍛戒護鐢ㄤ簬鎹曡幏鎸囧畾鐨勪俊鍙峰茍鎵ц棰勫畾涔夌殑鍛戒護銆? 鍏跺熀鏈殑璇硶鏄? trap 'command' signal 鍏朵腑signal鏄鎹曡幏鐨勪俊鍙鳳紝command鏄崟鑾峰埌鎸囧畾鐨勪俊鍙蜂箣鍚庯紝鎵瑕佹墽琛岀殑鍛戒護銆傚彲浠ョ敤kill –l鍛戒護鐪嬪埌緋葷粺涓叏閮ㄥ彲鐢ㄧ殑淇″彿鍚嶏紝鎹曡幏淇″彿鍚庢墍鎵ц鐨勫懡浠ゅ彲浠ユ槸浠諱綍涓鏉℃垨澶氭潯鍚堟硶鐨剆hell璇彞錛屼篃鍙互鏄竴涓嚱鏁板悕銆? shell鑴氭湰鍦ㄦ墽琛屾椂錛屼細浜х敓涓変釜鎵璋撶殑“浼俊鍙?#8221;錛?涔嬫墍浠ョО涔嬩負“浼俊鍙?#8221;鏄洜涓鴻繖涓変釜淇″彿鏄敱shell浜х敓鐨勶紝鑰屽叾瀹冪殑淇″彿鏄敱鎿嶄綔緋葷粺浜х敓鐨?錛岄氳繃浣跨敤trap鍛戒護鎹曡幏榪欎笁涓?#8220;浼俊鍙?#8221;騫惰緭鍑虹浉鍏充俊鎭璋冭瘯闈炲父鏈夊府鍔┿? 琛?1. shell浼俊鍙蜂俊鍙峰悕 浣曟椂浜х敓 EXIT 浠庝竴涓嚱鏁頒腑閫鍑烘垨鏁翠釜鑴氭湰鎵ц瀹屾瘯 ERR 褰撲竴鏉″懡浠よ繑鍥為潪闆剁姸鎬佹椂(浠h〃鍛戒護鎵ц涓嶆垚鍔? DEBUG 鑴氭湰涓瘡涓鏉″懡浠ゆ墽琛屼箣鍓? 閫氳繃鎹曡幏EXIT淇″彿,鎴戜滑鍙互鍦╯hell鑴氭湰涓鎵ц鎴栦粠鍑芥暟涓鍑烘椂錛岃緭鍑烘煇浜涙兂瑕佽窡韙殑鍙橀噺鐨勫鹼紝騫剁敱姝ゆ潵鍒ゆ柇鑴氭湰鐨勬墽琛岀姸鎬佷互鍙婂嚭閿欏師鍥?鍏朵嬌鐢ㄦ柟娉曟槸錛? trap 'command' EXIT銆鎴栥trap 'command' 0 閫氳繃鎹曡幏ERR淇″彿,鎴戜滑鍙互鏂逛究鐨勮拷韙墽琛屼笉鎴愬姛鐨勫懡浠ゆ垨鍑芥暟錛屽茍杈撳嚭鐩稿叧鐨勮皟璇曚俊鎭紝浠ヤ笅鏄竴涓崟鑾稥RR淇″彿鐨勭ず渚嬬▼搴忥紝鍏朵腑鐨?LINENO鏄竴涓猻hell鐨勫唴緗彉閲忥紝浠h〃shell鑴氭湰鐨勫綋鍓嶈鍙楓?$ cat -n exp1.sh 1 ERRTRAP() 2 { 3 echo "[LINE:$1] Error: Command or function exited with status $?" 4 } 5 foo() 6 { 7 return 1; 8 } 9 trap 'ERRTRAP $LINENO' ERR 10 abc 11 foo 鍏惰緭鍑虹粨鏋滃涓嬶細$ sh exp1.sh exp1.sh: line 10: abc: command not found [LINE:10] Error: Command or function exited with status 127 [LINE:11] Error: Command or function exited with status 1 鍦ㄨ皟璇曡繃紼嬩腑錛屼負浜嗚窡韙煇浜涘彉閲忕殑鍊鹼紝鎴戜滑甯稿父闇瑕佸湪shell鑴氭湰鐨勮澶氬湴鏂規(guī)彃鍏ョ浉鍚岀殑echo璇彞鏉ユ墦鍗扮浉鍏沖彉閲忕殑鍊鹼紝榪欑鍋氭硶鏄懼緱鐑︾悙鑰岀鎷欍傝岄氳繃鎹曡幏DEBUG淇″彿錛屾垜浠彧闇瑕佷竴鏉rap璇彞灝卞彲浠ュ畬鎴愬鐩稿叧鍙橀噺鐨勫叏紼嬭窡韙? 浠ヤ笅鏄竴涓氳繃鎹曡幏DEBUG淇″彿鏉ヨ窡韙彉閲忕殑紺轟緥紼嬪簭:$ cat –n exp2.sh 1 #!/bin/bash 2 trap 'echo “before execute line:$LINENO, a=$a,b=$b,c=$c”' DEBUG 3 a=1 4 if [ "$a" -eq 1 ] 5 then 6 b=2 7 else 8 b=1 9 fi 10 c=3 11 echo "end" 鍏惰緭鍑虹粨鏋滃涓嬶細$ sh exp2.sh before execute line:3, a=,b=,c= before execute line:4, a=1,b=,c= before execute line:6, a=1,b=,c= before execute line:10, a=1,b=2,c= before execute line:11, a=1,b=2,c=3 end 浠庤繍琛岀粨鏋滀腑鍙互娓呮櫚鐨勭湅鍒版瘡鎵ц涓鏉″懡浠や箣鍚庯紝鐩稿叧鍙橀噺鐨勫肩殑鍙樺寲銆傚悓鏃訛紝浠庤繍琛岀粨鏋滀腑鎵撳嵃鍑烘潵鐨勮鍙鋒潵鍒嗘瀽錛屽彲浠ョ湅鍒版暣涓剼鏈殑鎵ц杞ㄨ抗錛岃兘澶熷垽鏂嚭鍝簺鏉′歡鍒嗘敮鎵ц浜嗭紝鍝簺鏉′歡鍒嗘敮娌℃湁鎵ц銆? 2. 浣跨敤tee鍛戒護 鍦╯hell鑴氭湰涓閬撲互鍙婅緭鍏ヨ緭鍑洪噸瀹氬悜浣跨敤寰楅潪甯稿錛屽湪綆¢亾鐨勪綔鐢ㄤ笅錛屼竴浜涘懡浠ょ殑鎵ц緇撴灉鐩存帴鎴愪負浜嗕笅涓鏉″懡浠ょ殑杈撳叆銆傚鏋滄垜浠彂鐜扮敱綆¢亾榪炴帴璧鋒潵鐨勪竴鎵瑰懡浠ょ殑鎵ц緇撴灉騫墮潪濡傞鏈熺殑閭f牱錛屽氨闇瑕侀愭媯鏌ュ悇鏉″懡浠ょ殑鎵ц緇撴灉鏉ュ垽鏂棶棰樺嚭鍦ㄥ摢鍎匡紝浣嗗洜涓轟嬌鐢ㄤ簡綆¢亾錛岃繖浜涗腑闂寸粨鏋滃茍涓嶄細鏄劇ず鍦ㄥ睆騫曚笂錛岀粰璋冭瘯甯︽潵浜嗗洶闅撅紝姝ゆ椂鎴戜滑灝卞彲浠ュ熷姪浜巘ee鍛戒護浜嗐? tee鍛戒護浼氫粠鏍囧噯杈撳叆璇誨彇鏁版嵁錛屽皢鍏跺唴瀹硅緭鍑哄埌鏍囧噯杈撳嚭璁懼,鍚屾椂鍙堝彲灝嗗唴瀹逛繚瀛樻垚鏂囦歡銆備緥濡傛湁濡備笅鐨勮剼鏈墖孌碉紝鍏朵綔鐢ㄦ槸鑾峰彇鏈満鐨刬p鍦板潃錛?ipaddr=`/sbin/ifconfig | grep 'inet addr:' | grep -v '127.0.0.1' | cut -d : -f3 | awk '{print $1}'` #娉ㄦ剰=鍙峰悗闈㈢殑鏁村彞鏄敤鍙嶅紩鍙?鏁板瓧1閿殑宸﹁竟閭d釜閿?鎷搗鏉ョ殑銆? echo $ipaddr 榪愯榪欎釜鑴氭湰錛屽疄闄呰緭鍑虹殑鍗翠笉鏄湰鏈虹殑ip鍦板潃錛岃屾槸騫挎挱鍦板潃,榪欐椂鎴戜滑鍙互鍊熷姪tee鍛戒護錛岃緭鍑烘煇浜涗腑闂寸粨鏋滐紝灝嗕笂榪拌剼鏈墖孌典慨鏀逛負錛?ipaddr=`/sbin/ifconfig | grep 'inet addr:' | grep -v '127.0.0.1' | tee temp.txt | cut -d : -f3 | awk '{print $1}'` echo $ipaddr 涔嬪悗錛屽皢榪欐鑴氭湰鍐嶆墽琛屼竴閬嶏紝鐒跺悗鏌ョ湅temp.txt鏂囦歡鐨勫唴瀹癸細 $ cat temp.txt inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0 鎴戜滑鍙互鍙戠幇涓棿緇撴灉鐨勭浜屽垪(鍒椾箣闂翠互:鍙峰垎闅?鎵嶅寘鍚簡IP鍦板潃錛岃屽湪涓婇潰鐨勮剼鏈腑浣跨敤cut鍛戒護鎴彇浜嗙涓夊垪錛屾晠鎴戜滑鍙渶灝嗚剼鏈腑鐨刢ut -d : -f3鏀逛負cut -d : -f2鍗沖彲寰楀埌姝g‘鐨勭粨鏋溿? 鍏蜂綋鍒頒笂榪扮殑script渚嬪瓙錛屾垜浠篃璁稿茍涓嶉渶瑕乼ee鍛戒護鐨勫府鍔╋紝姣斿鎴戜滑鍙互鍒嗘鎵ц鐢辯閬撹繛鎺ヨ搗鏉ョ殑鍚勬潯鍛戒護騫舵煡鐪嬪悇鍛戒護鐨勮緭鍑虹粨鏋滄潵璇婃柇閿欒錛屼絾鍦ㄤ竴浜涘鏉傜殑shell鑴氭湰涓紝榪欎簺鐢辯閬撹繛鎺ヨ搗鏉ョ殑鍛戒護鍙兘鍙堜緷璧栦簬鑴氭湰涓畾涔夌殑涓浜涘叾瀹冨彉閲忥紝榪欐椂鎴戜滑鎯寵鍦ㄦ彁紺虹涓嬫潵鍒嗘榪愯鍚勬潯鍛戒護灝變細闈炲父楹葷儲浜嗭紝綆鍗曞湴鍦ㄧ閬撲箣闂存彃鍏ヤ竴鏉ee鍛戒護鏉ユ煡鐪嬩腑闂寸粨鏋滀細鏇存柟渚夸竴浜涖? 3. 浣跨敤"璋冭瘯閽╁瓙" 鍦–璇█紼嬪簭涓紝鎴戜滑緇忓父浣跨敤DEBUG瀹忔潵鎺у埗鏄惁瑕佽緭鍑鴻皟璇曚俊鎭紝鍦╯hell鑴氭湰涓垜浠悓鏍峰彲浠ヤ嬌鐢ㄨ繖鏍風(fēng)殑鏈哄埗錛屽涓嬪垪浠g爜鎵紺猴細 if [ “$DEBUG” = “true” ]; then echo “debugging” #姝ゅ鍙互杈撳嚭璋冭瘯淇℃伅 fi 榪欐牱鐨勪唬鐮佸潡閫氬父縐頒箣涓?#8220;璋冭瘯閽╁瓙”鎴?#8220;璋冭瘯鍧?#8221;銆傚湪璋冭瘯閽╁瓙鍐呴儴鍙互杈撳嚭浠諱綍鎮(zhèn)ㄦ兂杈撳嚭鐨勮皟璇曚俊鎭紝浣跨敤璋冭瘯閽╁瓙鐨勫ソ澶勬槸瀹冩槸鍙互閫氳繃DEBUG鍙橀噺鏉ユ帶鍒剁殑錛屽湪鑴氭湰鐨勫紑鍙戣皟璇曢樁孌碉紝鍙互鍏堟墽琛宔xport DEBUG=true鍛戒護鎵撳紑璋冭瘯閽╁瓙錛屼嬌鍏惰緭鍑鴻皟璇曚俊鎭紝鑰屽湪鎶婅剼鏈氦浠樹嬌鐢ㄦ椂錛屼篃鏃犻渶鍐嶈垂浜嬫妸鑴氭湰涓殑璋冭瘯璇彞涓涓鍒犻櫎銆? 濡傛灉鍦ㄦ瘡涓澶勯渶瑕佽緭鍑鴻皟璇曚俊鎭殑鍦版柟鍧囦嬌鐢╥f璇彞鏉ュ垽鏂璂EBUG鍙橀噺鐨勫鹼紝榪樻槸鏄懼緱姣旇緝綣佺悙錛岄氳繃瀹氫箟涓涓狣EBUG鍑芥暟鍙互浣挎鍏ヨ皟璇曢挬瀛愮殑榪囩▼鏇寸畝媧佹柟渚匡紝濡備笅闈唬鐮佹墍紺? $ cat –n exp3.sh 1 DEBUG() 2 { 3 if [ "$DEBUG" = "true" ]; then 4 $@銆銆 5 fi 6 } 7 a=1 8 DEBUG echo "a=$a" 9 if [ "$a" -eq 1 ] 10 then 11 b=2 12 else 13 b=1 14 fi 15 DEBUG echo "b=$b" 16 c=3 17 DEBUG echo "c=$c" 鍦ㄤ笂闈㈡墍紺虹殑DEBUG鍑芥暟涓紝浼氭墽琛屼換浣曚紶緇欏畠鐨勫懡浠わ紝騫朵笖榪欎釜鎵ц榪囩▼鏄彲浠ラ氳繃DEBUG鍙橀噺鐨勫兼潵鎺у埗鐨勶紝鎴戜滑鍙互鎶婃墍鏈夎窡璋冭瘯鏈夊叧鐨勫懡浠ら兘浣滀負DEBUG鍑芥暟鐨勫弬鏁版潵璋冪敤錛岄潪甯哥殑鏂逛究銆? 鍥為〉棣? 涓? 浣跨敤shell鐨勬墽琛岄夐」 涓婁竴鑺傛墍榪扮殑璋冭瘯鎵嬫鏄氳繃淇敼shell鑴氭湰鐨勬簮浠g爜錛屼護鍏惰緭鍑虹浉鍏崇殑璋冭瘯淇℃伅鏉ュ畾浣嶉敊璇殑錛岄偅鏈夋病鏈変笉淇敼婧愪唬鐮佹潵璋冭瘯shell鑴氭湰鐨勬柟娉曞憿錛熺瓟妗堝氨鏄嬌鐢╯hell鐨勬墽琛岄夐」錛屾湰鑺傚皢浠嬬粛涓浜涘父鐢ㄩ夐」鐨勭敤娉曪細 -n 鍙鍙杝hell鑴氭湰錛屼絾涓嶅疄闄呮墽琛? -x 榪涘叆璺熻釜鏂瑰紡錛屾樉紺烘墍鎵ц鐨勬瘡涓鏉″懡浠? -c "string" 浠巗trings涓鍙栧懡浠? “-n”鍙敤浜庢祴璇晄hell鑴氭湰鏄惁瀛樺湪璇硶閿欒錛屼絾涓嶄細瀹為檯鎵ц鍛戒護銆傚湪shell鑴氭湰緙栧啓瀹屾垚涔嬪悗錛屽疄闄呮墽琛屼箣鍓嶏紝棣栧厛浣跨敤“-n”閫夐」鏉ユ祴璇曡剼鏈槸鍚﹀瓨鍦ㄨ娉曢敊璇槸涓涓緢濂界殑涔犳儻銆傚洜涓烘煇浜泂hell鑴氭湰鍦ㄦ墽琛屾椂浼氬緋葷粺鐜浜х敓褰卞搷錛屾瘮濡傜敓鎴愭垨縐誨姩鏂囦歡絳夛紝濡傛灉鍦ㄥ疄闄呮墽琛屾墠鍙戠幇璇硶閿欒錛屾?zhèn)ㄤ笉寰椾笉鎵嬪伐鍋氫竴浜涚郴緇熺幆澧冪殑鎭㈠宸ヤ綔鎵嶈兘緇х畫嫻嬭瘯榪欎釜鑴氭湰銆? “-c”閫夐」浣縮hell瑙i噴鍣ㄤ粠涓涓瓧絎︿覆涓屼笉鏄粠涓涓枃浠朵腑璇誨彇騫舵墽琛宻hell鍛戒護銆傚綋闇瑕佷復(fù)鏃舵祴璇曚竴灝忔鑴氭湰鐨勬墽琛岀粨鏋滄椂錛屽彲浠ヤ嬌鐢ㄨ繖涓夐」錛屽涓嬫墍紺猴細 sh -c 'a=1;b=2;let c=$a+$b;echo "c=$c"' "-x"閫夐」鍙敤鏉ヨ窡韙剼鏈殑鎵ц錛屾槸璋冭瘯shell鑴氭湰鐨勫己鏈夊姏宸ュ叿銆?#8220;-x”閫夐」浣縮hell鍦ㄦ墽琛岃剼鏈殑榪囩▼涓妸瀹冨疄闄呮墽琛岀殑姣忎竴涓懡浠よ鏄劇ず鍑烘潵錛屽茍涓斿湪琛岄鏄劇ず涓涓?+"鍙楓?"+"鍙峰悗闈㈡樉紺虹殑鏄粡榪囦簡鍙橀噺鏇挎崲涔嬪悗鐨勫懡浠よ鐨勫唴瀹癸紝鏈夊姪浜庡垎鏋愬疄闄呮墽琛岀殑鏄粈涔堝懡浠ゃ?“-x”閫夐」浣跨敤璧鋒潵綆鍗曟柟渚匡紝鍙互杞繪澗瀵逛粯澶у鏁扮殑shell璋冭瘯浠誨姟,搴旀妸鍏跺綋浣滈閫夌殑璋冭瘯鎵嬫銆? 濡傛灉鎶婃湰鏂囧墠闈㈡墍榪扮殑trap ‘command’ DEBUG鏈哄埗涓?#8220;-x”閫夐」緇撳悎璧鋒潵錛屾垜浠?灝卞彲浠ユ棦杈撳嚭瀹為檯鎵ц鐨勬瘡涓鏉″懡浠わ紝鍙堥愯璺熻釜鐩稿叧鍙橀噺鐨勫鹼紝瀵硅皟璇曠浉褰撴湁甯姪銆? 浠嶄互鍓嶉潰鎵榪扮殑exp2.sh涓轟緥錛岀幇鍦ㄥ姞涓?#8220;-x”閫夐」鏉ユ墽琛屽畠錛?$ sh –x exp2.sh + trap 'echo "before execute line:$LINENO, a=$a,b=$b,c=$c"' DEBUG ++ echo 'before execute line:3, a=,b=,c=' before execute line:3, a=,b=,c= + a=1 ++ echo 'before execute line:4, a=1,b=,c=' before execute line:4, a=1,b=,c= + '[' 1 -eq 1 ']' ++ echo 'before execute line:6, a=1,b=,c=' before execute line:6, a=1,b=,c= + b=2 ++ echo 'before execute line:10, a=1,b=2,c=' before execute line:10, a=1,b=2,c= + c=3 ++ echo 'before execute line:11, a=1,b=2,c=3' before execute line:11, a=1,b=2,c=3 + echo end end 鍦ㄤ笂闈㈢殑緇撴灉涓紝鍓嶉潰鏈?#8220;+”鍙風(fēng)殑琛屾槸shell鑴氭湰瀹為檯鎵ц鐨勫懡浠わ紝鍓嶉潰鏈?#8220;++”鍙風(fēng)殑琛屾槸鎵цtrap鏈哄埗涓寚瀹氱殑鍛戒護錛屽叾瀹冪殑琛屽垯鏄緭鍑轟俊鎭? shell鐨勬墽琛岄夐」闄や簡鍙互鍦ㄥ惎鍔╯hell鏃舵寚瀹氬錛屼害鍙湪鑴氭湰涓敤set鍛戒護鏉ユ寚瀹氥?"set -鍙傛暟"琛ㄧず鍚敤鏌愰夐」錛?set +鍙傛暟"琛ㄧず鍏抽棴鏌愰夐」銆傛湁鏃跺欐垜浠茍涓嶉渶瑕佸湪鍚姩鏃剁敤"-x"閫夐」鏉ヨ窡韙墍鏈夌殑鍛戒護琛岋紝榪欐椂鎴戜滑鍙互鍦ㄨ剼鏈腑浣跨敤set鍛戒護錛屽浠ヤ笅鑴氭湰鐗囨鎵紺猴細 set -x銆銆銆 #鍚姩"-x"閫夐」 瑕佽窡韙殑紼嬪簭孌? set +x銆銆銆銆 #鍏抽棴"-x"閫夐」 set鍛戒護鍚屾牱鍙互浣跨敤涓婁竴鑺備腑浠嬬粛鐨勮皟璇曢挬瀛愨擠EBUG鍑芥暟鏉ヨ皟鐢紝榪欐牱鍙互閬垮厤鑴氭湰浜や粯浣跨敤鏃跺垹闄よ繖浜涜皟璇曡鍙ョ殑楹葷儲錛屽浠ヤ笅鑴氭湰鐗囨鎵紺猴細 DEBUG set -x銆銆銆 #鍚姩"-x"閫夐」 瑕佽窡韙殑紼嬪簭孌? DEBUG set +x銆銆銆 #鍏抽棴"-x"閫夐」 鍥為〉棣? 鍥? 瀵?-x"閫夐」鐨勫寮? "-x"鎵ц閫夐」鏄洰鍓嶆渶甯哥敤鐨勮窡韙拰璋冭瘯shell鑴氭湰鐨勬墜孌碉紝浣嗗叾杈撳嚭鐨勮皟璇曚俊鎭粎闄愪簬榪涜鍙橀噺鏇挎崲涔嬪悗鐨勬瘡涓鏉″疄闄呮墽琛岀殑鍛戒護浠ュ強琛岄鐨勪竴涓?+"鍙鋒彁紺虹錛屽眳鐒惰繛琛屽彿榪欐牱鐨勯噸瑕佷俊鎭兘娌℃湁錛屽浜庡鏉傜殑shell鑴氭湰鐨勮皟璇曟潵璇達紝榪樻槸闈炲父鐨勪笉鏂逛究銆傚垢榪愮殑鏄紝鎴戜滑鍙互宸у鍦板埄鐢╯hell鍐呯疆鐨勪竴浜涚幆澧冨彉閲忔潵澧炲己"-x"閫夐」鐨勮緭鍑轟俊鎭紝涓嬮潰鍏堜粙緇嶅嚑涓猻hell鍐呯疆鐨勭幆澧冨彉閲忥細 $LINENO 浠h〃shell鑴氭湰鐨勫綋鍓嶈鍙鳳紝綾諱技浜嶤璇█涓殑鍐呯疆瀹廮_LINE__ $FUNCNAME 鍑芥暟鐨勫悕瀛楋紝綾諱技浜嶤璇█涓殑鍐呯疆瀹廮_func__,浣嗗畯__func__鍙兘浠h〃褰撳墠鎵鍦ㄧ殑鍑芥暟鍚嶏紝鑰?FUNCNAME鐨勫姛鑳芥洿寮哄ぇ錛屽畠鏄竴涓暟緇勫彉閲忥紝鍏朵腑鍖呭惈浜嗘暣涓皟鐢ㄩ摼涓婃墍鏈夌殑鍑芥暟鐨勫悕瀛楋紝鏁呭彉閲?{FUNCNAME[0]}浠h〃shell鑴氭湰褰撳墠姝e湪鎵ц鐨勫嚱鏁扮殑鍚嶅瓧錛岃屽彉閲?{FUNCNAME[1]}鍒欎唬琛ㄨ皟鐢ㄥ嚱鏁?{FUNCNAME[0]}鐨勫嚱鏁扮殑鍚嶅瓧錛屼綑鑰呭彲浠ヤ緷姝ょ被鎺ㄣ? $PS4 涓繪彁紺虹鍙橀噺$PS1鍜岀浜岀駭鎻愮ず絎﹀彉閲?PS2姣旇緝甯歌錛屼絾寰堝皯鏈変漢娉ㄦ剰鍒扮鍥涚駭鎻愮ず絎﹀彉閲?PS4鐨勪綔鐢ㄣ傛垜浠煡閬撲嬌鐢?#8220;-x”鎵ц閫夐」灝嗕細鏄劇ずshell鑴氭湰涓瘡涓鏉″疄闄呮墽琛岃繃鐨勫懡浠わ紝鑰?PS4鐨勫煎皢琚樉紺哄湪“-x”閫夐」杈撳嚭鐨勬瘡涓鏉″懡浠ょ殑鍓嶉潰銆傚湪Bash Shell涓紝緙虹渷鐨?PS4鐨勫兼槸"+"鍙楓?鐜板湪鐭ラ亾涓轟粈涔堜嬌鐢?-x"閫夐」鏃訛紝杈撳嚭鐨勫懡浠ゅ墠闈㈡湁涓涓?+"鍙蜂簡鍚э紵)銆? 鍒╃敤$PS4榪欎竴鐗規(guī)э紝閫氳繃浣跨敤涓浜涘唴緗彉閲忔潵閲嶅畾涔?PS4鐨勫鹼紝鎴戜滑灝卞彲浠ュ寮?-x"閫夐」鐨勮緭鍑轟俊鎭備緥濡傚厛鎵цexport PS4='+{$LINENO:${FUNCNAME[0]}} ', 鐒跺悗鍐嶄嬌鐢?#8220;-x”閫夐」鏉ユ墽琛岃剼鏈紝灝辮兘鍦ㄦ瘡涓鏉″疄闄呮墽琛岀殑鍛戒護鍓嶉潰鏄劇ず鍏惰鍙蜂互鍙婃墍灞炵殑鍑芥暟鍚嶃? 浠ヤ笅鏄竴涓瓨鍦╞ug鐨剆hell鑴氭湰鐨勭ず渚嬶紝鏈枃灝嗙敤姝よ剼鏈潵紺鴻寖濡備綍鐢?#8220;-n”浠ュ強澧炲己鐨?#8220;-x”鎵ц閫夐」鏉ヨ皟璇晄hell鑴氭湰銆傝繖涓剼鏈腑瀹氫箟浜嗕竴涓嚱鏁癷sRoot(),鐢ㄤ簬鍒ゆ柇褰撳墠鐢ㄦ埛鏄笉鏄痳oot鐢ㄦ埛錛屽鏋滀笉鏄紝鍒欎腑姝㈣剼鏈殑鎵ц $ cat –n exp4.sh 1 #!/bin/bash 2 isRoot() 3 { 4 if [ "$UID" -ne 0 ] 5 return 1 6 else 7 return 0 8 fi 9 } 10 isRoot 11 if ["$?" -ne 0 ] 12 then 13 echo "Must be root to run this script" 14 exit 1 15 else 16 echo "welcome root user" 17 #do something 18 fi 棣栧厛鎵цsh –n exp4.sh鏉ヨ繘琛岃娉曟鏌ワ紝杈撳嚭濡備笅錛?$ sh –n exp4.sh exp4.sh: line 6: syntax error near unexpected token `else' exp4.sh: line 6: ` else' 鍙戠幇浜嗕竴涓娉曢敊璇紝閫氳繃浠旂粏媯鏌ョ6琛屽墠鍚庣殑鍛戒護錛屾垜浠彂鐜版槸絎?琛岀殑if璇彞緙哄皯then鍏抽敭瀛楀紩璧風(fēng)殑(鍐欐儻浜咰紼嬪簭鐨勪漢寰堝鏄撶姱榪欎釜閿欒)銆傛垜浠彲浠ユ妸絎?琛屼慨鏀逛負if [ "$UID" -ne 0 ]; then鏉ヤ慨姝h繖涓敊璇傚啀嬈¤繍琛宻h –n exp4.sh鏉ヨ繘琛岃娉曟鏌ワ紝娌℃湁鍐嶆姤鍛婇敊璇傛帴涓嬫潵灝卞彲浠ュ疄闄呮墽琛岃繖涓剼鏈簡錛屾墽琛岀粨鏋滃涓嬶細 $ sh exp4.sh exp2.sh: line 11: [1: command not found welcome root user 灝界鑴氭湰娌℃湁璇硶閿欒浜嗭紝鍦ㄦ墽琛屾椂鍗村張鎶ュ憡浜嗛敊璇傞敊璇俊鎭繕闈炲父濂囨?#8220;[1: command not found”銆傜幇鍦ㄦ垜浠彲浠ヨ瘯璇曞畾鍒?PS4鐨勫鹼紝騫朵嬌鐢?#8220;-x”閫夐」鏉ヨ窡韙細 $ export PS4='+{$LINENO:${FUNCNAME[0]}} ' $ sh –x exp4.sh +{10:} isRoot +{4:isRoot} '[' 503 -ne 0 ']' +{5:isRoot} return 1 +{11:} '[1' -ne 0 ']' exp4.sh: line 11: [1: command not found +{16:} echo 'welcome root user' welcome root user 浠庤緭鍑虹粨鏋滀腑錛屾垜浠彲浠ョ湅鍒拌剼鏈疄闄呰鎵ц鐨勮鍙ワ紝璇ヨ鍙ョ殑琛屽彿浠ュ強鎵灞炵殑鍑芥暟鍚嶄篃琚墦鍗板嚭鏉ワ紝浠庝腑鍙互娓呮鐨勫垎鏋愬嚭鑴氭湰鐨勬墽琛岃建榪逛互鍙婃墍璋冪敤鐨勫嚱鏁扮殑鍐呴儴鎵ц鎯呭喌銆傜敱浜庢墽琛屾椂鏄11琛屾姤閿欙紝榪欐槸涓涓猧f璇彞錛屾垜浠姣斿垎鏋愪竴涓嬪悓涓篿f璇彞鐨勭4琛岀殑璺熻釜緇撴灉錛?+{4:isRoot} '[' 503 -ne 0 ']' +{11:} '[1' -ne 0 ']' 鍙煡鐢變簬絎?1琛岀殑[鍙峰悗闈㈢己灝戜簡涓涓┖鏍鹼紝瀵艱嚧[鍙蜂笌绱ф尐瀹冪殑鍙橀噺$?鐨勫?琚玸hell瑙i噴鍣ㄧ湅浣滀簡涓涓暣浣擄紝騫惰瘯鐫鎶婅繖涓暣浣撹涓轟竴涓懡浠ゆ潵鎵ц錛屾晠鏈?#8220;[1: command not found”榪欐牱鐨勯敊璇彁紺恒傚彧闇鍦╗鍙峰悗闈㈡彃鍏ヤ竴涓┖鏍煎氨涓鍒囨甯鎬簡銆? shell涓繕鏈夊叾瀹冧竴浜涘璋冭瘯鏈夊府鍔╃殑鍐呯疆鍙橀噺錛屾瘮濡傚湪Bash Shell涓繕鏈塀ASH_SOURCE, BASH_SUBSHELL絳変竴鎵瑰璋冭瘯鏈夊府鍔╃殑鍐呯疆鍙橀噺錛屾?zhèn)ㄥ彲浠ラ氳繃man sh鎴杕an bash鏉ユ煡鐪嬶紝鐒跺悗鏍規(guī)嵁鎮(zhèn)ㄧ殑璋冭瘯鐩殑,浣跨敤榪欎簺鍐呯疆鍙橀噺鏉ュ畾鍒?PS4錛屼粠鑰岃揪鍒板寮?#8220;-x”閫夐」鐨勮緭鍑轟俊鎭殑鐩殑銆? 浜? 鎬葷粨 鐜板湪璁╂垜浠潵鎬葷粨涓涓嬭皟璇晄hell鑴氭湰鐨勮繃紼嬶細 棣栧厛浣跨敤“-n”閫夐」媯鏌ヨ娉曢敊璇紝鐒跺悗浣跨敤“-x”閫夐」璺熻釜鑴氭湰鐨勬墽琛岋紝浣跨敤“-x”閫夐」涔嬪墠錛屽埆蹇樹簡鍏堝畾鍒禤S4鍙橀噺鐨勫兼潵澧炲己“-x”閫夐」鐨勮緭鍑轟俊鎭紝鑷沖皯搴旇浠ゅ叾杈撳嚭琛屽彿淇℃伅(鍏堟墽琛宔xport PS4='+[$LINENO]'錛屾洿涓鍔蟲案閫哥殑鍔炴硶鏄皢榪欐潯璇彞鍔犲埌鎮(zhèn)ㄧ敤鎴蜂富鐩綍鐨?bash_profile鏂囦歡涓幓)錛岃繖灝嗕嬌浣犵殑璋冭瘯涔嬫梾鏇磋交鏉俱備篃鍙互鍒╃敤trap,璋冭瘯閽╁瓙絳夋墜孌佃緭鍑哄叧閿皟璇曚俊鎭紝蹇熺緝?yōu)畯鎺掓煡閿欒鐨勮寖鍥村Q屽茍鍦ㄨ剼鏈腑浣跨敤“set -x”鍙?#8220;set +x”瀵規(guī)煇浜涗唬鐮佸潡榪涜閲嶇偣璺熻釜銆傝繖鏍峰縐嶆墜孌甸綈涓嬶紝鐩鎬俊鎮(zhèn)ㄥ凡緇忓彲浠ユ瘮杈冭交鏉懼湴鎶撳嚭鎮(zhèn)ㄧ殑shell鑴氭湰涓殑鑷櫕浜嗐傚鏋滄?zhèn)ㄧ殑鑴氭湰鑳鲥澶嶆潅锛寴q橀渶瑕佹洿寮虹殑璋冭瘯鑳藉姏錛屽彲浠ヤ嬌鐢╯hell璋冭瘯鍣╞ashdb錛岃繖鏄竴涓被浼間簬GDB鐨勮皟璇曞伐鍏鳳紝鍙互瀹屾垚瀵箂hell鑴氭湰鐨勬柇鐐硅緗紝鍗曟鎵ц錛屽彉閲忚瀵熺瓑璁稿鍔熻兘錛屼嬌鐢╞ashdb瀵歸槄璇誨拰鐞嗚В澶嶆潅鐨剆hell鑴氭湰涔熶細澶ф湁瑁ㄧ泭銆傚叧浜巄ashdb鐨勫畨瑁呭拰浣跨敤錛屼笉灞炰簬鏈枃鑼冨洿錛屾?zhèn)ㄥ彲鍙傞槄http://bashdb.sourceforge.net/涓婄殑鏂囨。騫朵笅杞借瘯鐢ㄣ? 鍙傝冭祫鏂? 璇瘋闂細 GNU 鐨?bash 涓婚〉 璇蜂笅杞藉拰璇曠敤 Shell璋冭瘯鍣╞ashdb<img src ="http://m.shnenglu.com/yeqing/aggbug/30919.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/yeqing/" target="_blank">澶滄瞾</a> 2007-08-27 11:40 <a href="http://m.shnenglu.com/yeqing/articles/30919.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Linux鍛戒護琛岀▼搴忚璁?/title><link>http://m.shnenglu.com/yeqing/articles/15768.html</link><dc:creator>澶滄瞾</dc:creator><author>澶滄瞾</author><pubDate>Wed, 29 Nov 2006 01:29:00 GMT</pubDate><guid>http://m.shnenglu.com/yeqing/articles/15768.html</guid><wfw:comment>http://m.shnenglu.com/yeqing/comments/15768.html</wfw:comment><comments>http://m.shnenglu.com/yeqing/articles/15768.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/yeqing/comments/commentRss/15768.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/yeqing/services/trackbacks/15768.html</trackback:ping><description><![CDATA[ <p> <font color="#808080" size="2">Linux涓嬪緢澶氱▼搴忕敋鑷抽偅浜涘叿鏈夊浘褰㈢敤鎴風(fēng)晫闈紙graphical user interface錛孏UI錛夌殑紼嬪簭錛岄兘鑳芥帴鍙楀拰澶勭悊鍛戒護琛岄夐」銆傚浜庢煇浜涚▼搴忥紝榪欐槸涓庡叾浠栫▼搴忔垨鐢ㄦ埛榪涜浜や簰鐨勪富瑕佹墜孌點傚叿鏈夊彲闈犵殑澶嶆潅鍛戒護琛屽弬鏁板鐞嗘満鍒訛紝浼氫嬌寰楁?zhèn)ㄧ殑搴旂敤绋嬪簭鏇村ソ銆佹洿鏈夌敤銆備笉榪囧緢澶氬紑鍙戜漢鍛橀兘灝嗗叾瀹濊吹鐨勬椂闂磋姳鍦ㄤ簡緙栧啓鑷繁鐨勫懡浠よ瑙f瀽鍣紝鍗翠笉浣跨敤 getopt()錛岃屽悗鑰呮槸涓涓笓闂ㄨ璁℃潵鍑忚交鍛戒護琛屽鐞嗚礋鎷呯殑搴撳嚱鏁般?/font> </p> <p> <font color="#808080" size="2"> </font>聽</p> <p> <font color="#808080" size="2">1銆佸懡浠よ鍙傛暟<br />鍛戒護琛岀▼搴忚璁$殑棣栬浠誨姟鏄В鏋愬懡浠よ鍙傛暟錛孏UI媧劇殑紼嬪簭鍛樺緢灝戝叧蹇冭繖涓傝繖閲岋紝鎴戜滑瀵瑰弬鏁幫紙argument錛夐噰鐢ㄤ簡涓縐嶆瘮杈冮氫織鐨勫畾涔夛細鍛戒護琛屼笂闄ゅ懡浠ゅ悕涔嬪鐨勫瓧絎︿覆銆傚弬鏁扮敱澶氶」鏋勬垚錛岄」涓庨」涔嬮棿鐢ㄧ┖鐧界褰兼闅斿紑銆?br />鍙傛暟榪涗竴姝ュ垎涓洪夐」鍜屾搷浣滄暟銆傞夐」鐢ㄤ簬淇敼紼嬪簭鐨勯粯璁よ涓烘垨涓虹▼搴忔彁渚涗俊鎭紝姣旇緝鑰佺殑綰﹀畾鏄互鐭垝綰垮紑澶淬傞夐」鍚庡彲浠ヨ窡闅忎竴浜涘弬鏁幫紝縐頒負閫夐」鍙傛暟銆傚墿涓嬬殑灝辨槸鎿嶄綔鏁頒簡銆?br />2銆丳OSIX綰﹀畾<br />POSIX琛ㄧず鍙Щ妞嶆搷浣滅郴緇熸帴鍙o細Portable Operating System Interface錛岀數(shù)姘斿拰鐢?shù)瀛愬伐绋嬪笀鍗忎細锛圛nstitute of Electrical and Electronics Engineers錛孖EEE錛夋渶鍒濆紑鍙?POSIX 鏍囧噯錛屾槸涓轟簡鎻愰珮 UNIX 鐜涓嬪簲鐢ㄧ▼搴忕殑鍙Щ妞嶆с傜劧鑰岋紝POSIX 騫朵笉灞闄愪簬 UNIX銆傝澶氬叾瀹冪殑鎿嶄綔緋葷粺錛屼緥濡?DEC OpenVMS 鍜?Microsoft Windows NT錛岄兘鏀寔 POSIX 鏍囧噯銆?br />聽</font> </p> <p> <font color="#808080" size="2">涓嬮潰鏄疨OSIX鏍囧噯涓叧浜庣▼搴忓悕銆佸弬鏁扮殑綰﹀畾錛?/font> </p> <p> <font color="#808080" size="2">紼嬪簭鍚嶄笉瀹滃皯浜?涓瓧絎︿笖涓嶅浜?涓瓧絎︼紱 <br />紼嬪簭鍚嶅簲鍙寘鍚皬鍐欏瓧姣嶅拰闃挎媺浼暟瀛楋紱 <br />閫夐」鍚嶅簲璇ユ槸鍗曞瓧絎︽椿鍗曟暟瀛楋紝涓斾互鐭í鈥?鈥樹負鍓嶇洞錛?<br />澶氫釜涓嶉渶瑕侀夐」鍙傛暟鐨勯夐」錛屽彲浠ュ悎騫躲傦紙璀錛歠oo -a -b -c ---->foo -abc錛?<br />閫夐」涓庡叾鍙傛暟涔嬮棿鐢ㄧ┖鐧界闅斿紑錛?<br />閫夐」鍙傛暟涓嶅彲閫夈?<br />鑻ラ夐」鍙傛暟鏈夊鍊鹼紝瑕佸皢鍏跺茍鏈竴涓瓧涓蹭紶榪涙潵銆傝濡傦細myprog -u "arnold,joe,jane"銆傝繖縐嶆儏鍐典笅錛岄渶瑕佽嚜宸辮В鍐寵繖浜涘弬鏁扮殑鍒嗙闂銆?<br />閫夐」搴旇鍦ㄦ搷浣滄暟鍑虹幇涔嬪墠鍑虹幇銆?<br />鐗規(guī)畩鍙傛暟鈥?-'鎸囨槑鎵鏈夊弬鏁伴兘緇撴潫浜嗭紝鍏跺悗浠諱綍鍙傛暟閮借涓烘槸鎿嶄綔鏁般?<br />閫夐」濡備綍鎺掑垪娌℃湁浠涔堝叧緋伙紝浣嗗浜掔浉鎺掓枼鐨勯夐」錛屽鏋滀竴涓夐」鐨勬搷浣滅粨鏋滆鐩栧叾浠栭夐」鐨勬搷浣滅粨鏋滄椂錛屾渶鍚庝竴涓夐」璧蜂綔鐢紱濡傛灉閫夐」閲嶅錛屽垯欏哄簭澶勭悊銆?<br />鍏佽鎿嶄綔鏁扮殑欏哄簭褰卞搷紼嬪簭琛屼負錛屼絾闇瑕佷綔鏂囨。璇存槑銆?<br />璇誨啓鎸囧畾鏂囦歡鐨勭▼搴忓簲璇ュ皢鍗曚釜鍙傛暟'-'浣滀負鏈夋剰涔夌殑鏍囧噯杈撳叆鎴栬緭鍑烘潵瀵瑰緟銆?br />褰撶劧璁稿鏍囧噯浠庢亽璁告湭閬靛畧浠ヤ笂綰﹀畾錛屼富瑕佹槸鍘嗗彶鍏煎闂錛屽洜涓烘爣鍑嗗嚭鐜頒箣鍓嶏紝灝卞凡緇忓瓨鍦∟澶氱▼搴忎簡銆?/font> </p> <p> <font color="#808080" size="2">3銆丟NU闀塊夐」<br />GNU榧撳姳紼嬪簭鍛樹嬌鐢?-help銆?-verbose絳夊艦寮忕殑闀塊夐」銆傝繖浜涢夐」涓嶄粎涓嶄笌POSIX綰﹀畾鍐茬獊錛岃屼笖瀹規(guī)槗璁板繂錛屽彟澶栦篃鎻愪緵浜嗗湪鎵鏈塆NU宸ュ叿涔嬮棿淇濇寔涓鑷存х殑鏈轟細銆侴NU闀塊夐」鏈夎嚜宸辯殑綰﹀畾錛?/font> </p> <p> <font color="#808080" size="2">瀵逛簬宸茬粡閬靛驚POSIX綰﹀畾鐨凣NU紼嬪簭錛屾瘡涓煭閫夐」閮芥湁涓涓搴旂殑闀塊夐」銆?<br />棰濆閽堝GNU鐨勯暱閫夐」涓嶉渶瑕佸搴旂殑鐭夐」錛屼粎浠呮帹鑽愯鏈夈?<br />闀塊夐」鍙互緙╁啓鎴愪繚鎸佹儫涓鎬х殑鏈鐭殑瀛椾覆銆?<br />閫夐」鍙傛暟涓庨暱閫夐」涔嬮棿鎴栭氳繃絀虹櫧瀛楃媧婚氳繃涓涓?='鏉ュ垎闅斻?<br />閫夐」鍙傛暟鏄彲閫夌殑錛堝彧瀵圭煭閫夐」鏈夋晥錛夈?<br />闀塊夐」鍏佽浠ヤ竴涓煭妯嚎涓哄墠緙銆?/font> </p> <p> <font color="#808080" size="2">4銆佸熀鏈殑鍛戒護琛屽鐞嗘妧鏈?br />C紼嬪簭閫氳繃argc鍜宎rgv鍙傛暟璁塊棶瀹冪殑鍛戒護琛屽弬鏁般俛rgc鏄暣鍨嬫暟錛岃〃紺哄弬鏁扮殑涓暟錛堝寘鎷懡浠ゅ悕錛夈俶ain()鍑芥暟鐨勫畾涔夋柟寮忔湁涓ょ錛屽尯鍒粎鍦ㄤ簬argv濡備綍瀹氫箟錛?/font> </p> <p> <font color="#808080" size="2">int main(int argc, char *argv[])<br />{<br />聽聽 鈥︹?br />} int main(int argc, char **argv)<br />{<br />聽聽 鈥︹?br />}聽 </font> </p> <p> <br /> <font color="#808080" size="2">褰?C 榪愯鏃跺簱鐨勭▼搴忓惎鍔ㄤ唬鐮佽皟鐢ㄦ?zhèn)ㄧ?main() 鏃訛紝宸茬粡瀵瑰懡浠よ榪涜浜嗗鐞嗐俛rgc 鍙傛暟鍖呭惈鍙傛暟鐨勮鏁板鹼紝鑰?argv 鍖呭惈鎸囧悜榪欎簺鍙傛暟鐨勬寚閽堟暟緇勩俛rgv[0]鏄▼搴忓悕銆?/font> </p> <p> <font color="#808080" size="2">涓涓緢綆鍗曠殑鍛戒護琛屽鐞嗘妧鏈殑渚嬪瓙鏄痚cho紼嬪簭錛屽畠鍙互灝嗗弬鏁拌緭鍑哄埌鏍囧噯璁懼涓婏紝鐢ㄧ┖鏍肩闅斿紑錛屾渶鍚庢崲琛屻傝嫢鍛戒護琛岀涓涓弬鏁頒負-n錛岄偅涔堝氨涓嶄細鎹㈣銆?/font> </p> <p> <font color="#808080" size="2">娓呭崟1錛?/font> </p> <p> <font color="#808080" size="2">#include <stdio.h></font> </p> <p> <font color="#808080" size="2">int main(int argc, char **argv)<br />{<br />聽聽聽 int i, nflg;</font> </p> <p> <font color="#808080" size="2">聽聽聽 nflg = 0;<br />聽聽聽 if(argc > 1 && argv[1][0] == '-' && argv[1][1] == 'n'){<br />聽聽聽聽聽聽聽 nflg++;<br />聽聽聽聽聽聽聽 argc--;<br />聽聽聽聽聽聽聽 argv++;<br />聽聽聽 }<br />聽聽聽 for(i=1; i<argc; i++){<br />聽聽聽聽聽聽聽 fputs(argv[ i ], stdout);<br />聽聽聽聽聽聽聽 if(i < argc-1)<br />聽聽聽聽聽聽聽聽聽聽聽 putchar(' ');<br />聽聽聽 }<br />聽聽聽 if(nflg == 0)<br />聽聽聽聽聽聽聽 putchar('\n');</font> </p> <p> <font color="#808080" size="2">聽聽聽 return 0;<br />}<br />聽</font> </p> <p> <font color="#808080" size="2">涓婇潰浠g爜涓紝鍔犱寒鍖哄煙浠旂粏鐮旂┒涓涓嬶紝浼氬彂鐜板緢鏈夎叮銆?/font> </p> <p> <font color="#808080" size="2">echo紼嬪簭涓紝瀵逛簬鍛戒護琛屽弬鏁扮殑瑙f瀽鏄墜鍔ㄥ疄鐜扮殑銆傚緢涔呬互鍓嶏紝Unix鏀寔灝忕粍涓轟簡綆鍖栧浜庡懡浠よ鍙傛暟鐨勮В鏋愶紝寮鍙戜簡getopt()鍑芥暟錛屽悓鏃舵彁渚涗簡鍑犱釜澶栭儴鍙橀噺錛屼嬌寰楃紪鍐欓伒瀹圥OSIX鐨勪唬鐮佸彉寰楁洿鍔犲鏄撲簡銆?/font> </p> <p> <font color="#808080" size="2">5銆佸懡浠よ鍙傛暟瑙f瀽鍑芥暟 鈥斺?getopt()<br />getopt()鍑芥暟澹版槑濡備笅錛?/font> </p> <p> <font color="#808080" size="2">#include <unistd.h></font> </p> <p> <font color="#808080" size="2">int getopt(int argc, char * const argv[], const char *optstring);</font> </p> <p> <font color="#808080" size="2">extern char *optarg;<br />extern int optind, opterr, optopt;<br />聽</font> </p> <p> <font color="#808080" size="2">璇ュ嚱鏁扮殑argc鍜宎rgv鍙傛暟閫氬父鐩存帴浠巑ain()鐨勫弬鏁扮洿鎺ヤ紶閫掕屾潵銆俹ptstring鏄夐」瀛楁瘝緇勬垚鐨勫瓧涓層傚鏋滆瀛椾覆閲岀殑浠諱竴瀛楃鍚庨潰鏈夊啋鍙鳳紝閭d箞榪欎釜閫夐」灝辮姹傛湁閫夐」鍙傛暟銆?/font> </p> <p> <font color="#808080" size="2">褰撶粰瀹歡etopt()鍛戒護鍙傛暟鐨勬暟閲?(argc)銆佹寚鍚戣繖浜涘弬鏁扮殑鏁扮粍 (argv) 鍜岄夐」瀛椾覆 (optstring) 鍚庯紝getopt() 灝嗚繑鍥炵涓涓夐」錛屽茍璁劇疆涓浜涘叏灞鍙橀噺銆備嬌鐢ㄧ浉鍚岀殑鍙傛暟鍐嶆璋冪敤璇ュ嚱鏁版椂錛屽畠?yōu)畣杩斿洖涓嬩竴涓夐」錛屽茍璁劇疆鐩稿簲鐨勫叏灞鍙橀噺銆傚鏋滀笉鍐嶆湁鍙瘑鍒殑閫夐」錛屽皢榪斿洖 -1錛屾浠誨姟灝卞畬鎴愪簡銆?/font> </p> <p> <font color="#808080" size="2">getopt() 鎵璁劇疆鐨勫叏灞鍙橀噺鍖呮嫭錛?/font> </p> <p> <font color="#808080" size="2">char *optarg鈥斺斿綋鍓嶉夐」鍙傛暟瀛椾覆錛堝鏋滄湁錛夈?<br />int optind鈥斺攁rgv鐨勫綋鍓嶇儲寮曞箋傚綋getopt()鍦╳hile寰幆涓嬌鐢ㄦ椂錛屽驚鐜粨鏉熷悗錛屽墿涓嬬殑瀛椾覆瑙嗕負鎿嶄綔鏁幫紝鍦╝rgv[optind]鑷砤rgv[argc-1]涓彲浠ユ壘鍒般?<br />int opterr鈥斺旇繖涓彉閲忛潪闆舵椂錛実etopt()鍑芥暟涓衡滄棤鏁堥夐」鈥濆拰鈥滅己灝戝弬鏁伴夐」錛屽茍杈撳嚭鍏墮敊璇俊鎭?/font> </p> <p> <font color="#808080" size="2">int optopt鈥斺斿綋鍙戠幇鏃犳晥閫夐」瀛楃涔嬫椂錛実etopt()鍑芥暟鎴栬繑鍥??'瀛楃錛屾垨榪斿洖':'瀛楃錛屽茍涓攐ptopt鍖呭惈浜嗘墍鍙戠幇鐨勬棤鏁堥夐」瀛楃銆?br />涓嬮潰灝辯敤getopt()鏉ュ啓涓皬紼嬪簭錛屼綋楠屼竴涓嬪懡浠よ瑙f瀽鐨勫揩涔愩?/font> </p> <p> <font color="#808080" size="2">紼嬪簭鎻忚堪錛?/font> </p> <p> <font color="#808080" size="2">紼嬪簭鍚嶏細opt_parse_demo</font> </p> <p> <font color="#808080" size="2">閫夐」錛?/font> </p> <p> <font color="#808080" size="2">-n 鈥斺?鏄劇ず鎴戠殑鍚嶅瓧銆?<br />-g 鈥斺?鏄劇ず鎴戝コ鏈嬪弸鐨勫悕瀛椼?<br />-l 鈥斺?甯﹀弬鏁扮殑閫夐」.<br />娓呭崟2錛?br />#include <stdio.h><br />#include <unistd.h></font> </p> <p> <font color="#808080" size="2">int main (int argc, char **argv)<br />{<br />聽聽聽 int oc;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 /*閫夐」瀛楃 */<br />聽聽聽 char *b_opt_arg;聽聽聽聽聽聽聽聽聽聽聽 /*閫夐」鍙傛暟瀛椾覆 */</font> </p> <p> <font color="#808080" size="2">聽聽聽 while((oc = getopt(argc, argv, "ngl:")) != -1)<br />聽聽聽 {<br />聽聽聽聽聽聽聽 switch(oc)<br />聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽 case 'n':<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 printf("My name is Lyong.\n");<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 break;<br />聽聽聽聽聽聽聽聽聽聽聽 case 'g':<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 printf("Her name is Xxiong.\n");<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 break;<br />聽聽聽聽聽聽聽聽聽聽聽 case 'l':<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 b_opt_arg = optarg;<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 printf("Our love is %s\n", optarg);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 break;<br />聽聽聽聽聽聽聽 }<br />聽聽聽 }<br />聽聽 return 0;<br />}<br />聽</font> </p> <p> <font color="#808080" size="2">榪愯緇撴灉錛?/font> </p> <p> <font color="#808080" size="2">$ ./opt_parse_demo -n<br />My name is Lyong.<br />$ ./opt_parse_demo -g<br />Her name is Xxiong.<br />$ ./opt_parse_demo -l forever<br />Our love is forever<br />$ ./opt_parse_demo -ngl forever<br />My name is Lyong.<br />Her name is Xxiong.<br />Our love is forever<br />聽</font> </p> <p> <font color="#808080" size="2">6銆佹敼鍙榞etopt()瀵歸敊璇懡浠よ鍙傛暟淇℃伅鐨勮緭鍑鴻涓?br />涓嶆紜殑璋冪敤紼嬪簭鍦ㄦ墍闅懼厤錛岃繖縐嶉敊璇涔堟槸鍛戒護琛岄夐」鏃犳晥錛岃涔堟槸緙哄皯閫夐」鍙傛暟銆傛甯告儏鍐典笅錛実etopt()浼氫負榪欎袱縐嶆儏鍐佃緭鍑鴻嚜宸辯殑鍑洪敊淇℃伅錛屽茍涓旇繑鍥??'銆備負浜嗛獙璇佹浜嬶紝鍙互淇敼涓涓嬩笂闈㈢殑娓呭崟2涓殑浠g爜銆?/font> </p> <p> <font color="#808080" size="2">娓呭崟3錛?/font> </p> <p> <font color="#808080" size="2">#include <stdio.h><br />#include <unistd.h></font> </p> <p> <font color="#808080" size="2">int main (int argc, char **argv)<br />{<br />聽聽聽 int oc;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 /*閫夐」瀛楃 */<br />聽聽聽 char *b_opt_arg;聽聽聽聽聽聽聽聽聽聽聽 /*閫夐」鍙傛暟瀛椾覆 */</font> </p> <p> <font color="#808080" size="2">聽聽聽 while((oc = getopt(argc, argv, "ngl:")) != -1)<br />聽聽聽 {<br />聽聽聽聽聽聽聽 switch(oc)<br />聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽 case 'n':<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 printf("My name is Lyong.\n");<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 break;<br />聽聽聽聽聽聽聽聽聽聽聽聽 case 'g':<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 printf("Her name is Xxiong.\n");<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 break;<br />聽聽聽聽聽聽聽聽聽聽聽 case 'l':<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 b_opt_arg = optarg;<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 printf("Our love is %s\n", optarg);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 break;<br />聽聽聽聽聽聽聽聽聽聽聽 case '?':<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 printf("arguments error!\n");<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 break;<br />聽聽聽聽聽聽聽 }<br />聽聽聽 }<br />聽聽聽 return 0;<br />}<br />聽</font> </p> <p> <font color="#808080" size="2">杈撳叆涓涓敊璇殑鍛戒護琛岋紝緇撴灉濡備笅錛?/font> </p> <p> <font color="#808080" size="2">$ ./opt_parse_demo -l<br />./opt_parse_demo: option requires an argument -- l<br />arguments error!<br />聽</font> </p> <p> <font color="#808080" size="2">寰堝鏃跺欙紝鎴戜滑涓嶅笇鏈涜緭鍑轟換浣曢敊璇俊鎭紝鎴栨洿甯屾湜杈撳嚭鑷繁瀹氫箟鐨勯敊璇俊鎭傚彲浠ラ噰鐢ㄤ互涓嬩袱縐嶆柟娉曟潵鏇存敼getopt()鍑芥暟鐨勫嚭閿欎俊鎭緭鍑鴻涓猴細</font> </p> <p> <br /> <font color="#808080" size="2">鍦ㄨ皟鐢╣etopt()涔嬪墠錛屽皢opterr璁劇疆涓?錛岃繖鏍峰氨鍙互鍦╣etopt()鍑芥暟鍙戠幇閿欒鐨勬椂鍊欏己鍒跺畠涓嶈緭鍑轟換浣曟秷鎭?<br />濡傛灉optstring鍙傛暟鐨勭涓涓瓧絎︽槸鍐掑彿錛岄偅涔坓etopt()鍑芥暟灝變細淇濇寔娌夐粯錛屽茍鏍規(guī)嵁閿欒鎯呭喌榪斿洖涓嶅悓瀛楃錛屽涓嬶細 <br />鈥滄棤鏁堥夐」鈥?鈥斺?getopt()榪斿洖'?'錛屽茍涓攐ptopt鍖呭惈浜嗘棤鏁堥夐」瀛楃錛堣繖鏄甯哥殑琛屼負錛夈?<br />鈥滅己灝戦夐」鍙傛暟鈥?鈥斺?getopt()榪斿洖':'錛屽鏋渙ptstring鐨勭涓涓瓧絎︿笉鏄啋鍙鳳紝閭d箞getopt()榪斿洖'?'錛岃繖浼氫嬌寰楄繖縐嶆儏鍐典笉鑳戒笌鏃犳晥閫夐」鐨勬儏鍐靛尯鍒嗗紑銆?br />澶氳鏃犵泭錛屽姩鎵嬫祴璇曚竴涓嬨?/font> </p> <p> <font color="#808080" size="2">娓呭崟4錛?br />#include <stdio.h><br />#include <unistd.h></font> </p> <p> <font color="#808080" size="2">int main (int argc, char **argv)<br />{<br />聽聽聽 int oc;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 /*閫夐」瀛楃 */<br />聽聽聽 char ec;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 /*鏃犳晥鐨勯夐」瀛楃*/<br />聽聽聽 char *b_opt_arg;聽聽聽聽聽聽聽聽聽聽聽 /*閫夐」鍙傛暟瀛椾覆 */</font> </p> <p> <font color="#808080" size="2">聽聽聽 while((oc = getopt(argc, argv, ":ngl:")) != -1)<br />聽聽聽 {<br />聽聽聽聽聽聽聽 switch(oc)<br />聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽 case 'n':<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 printf("My name is Lyong.\n");<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 break;<br />聽聽聽聽聽聽聽聽聽聽聽聽 case 'g':<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 printf("Her name is Xxiong.\n");<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 break;<br />聽聽聽聽聽聽聽聽聽聽聽 case 'l':<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 b_opt_arg = optarg;<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 printf("Our love is %s\n", optarg);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 break;<br />聽聽聽聽聽聽聽聽聽聽聽 case '?':<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 ec = (char)optopt;<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 printf("鏃犳晥鐨勯夐」瀛楃 \' %c \'!\n", ec);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 break;<br />聽聽聽聽聽聽聽聽聽聽聽 case ':':<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 printf("緙哄皯閫夐」鍙傛暟錛乗n");<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 break;<br />聽聽聽聽聽聽聽 }<br />聽聽聽 }<br />聽聽聽 return 0;<br />} </font> </p> <p> <font color="#808080" size="2">嫻嬭瘯緇撴灉錛?/font> </p> <p> <font color="#808080" size="2">$ ./opt_parse_demo -a<br />鏃犳晥鐨勯夐」瀛楃 ' a '!<br />$ ./opt_parse_demo -l<br />緙哄皯閫夐」鍙傛暟錛?</font> </p> <p> <font color="#808080" size="2">7銆丟NU鎻愪緵鐨刧etopt()鍑芥暟鐨勭壒鐐?br />涓婇潰鎵璁捐鐨刧etopt()鍑芥暟鏄疷NIX鏀寔灝忕粍鎻愪緵鐨勶紝鍏舵墽琛屾椂涓紕板埌涓嶄互'-'寮濮嬬殑鍛戒護琛屽弬鏁板氨鍋滄瀵繪壘閫夐」銆傝孏NU鎻愪緵鐨刧etopt()鍑芥暟涓庝箣涓嶅悓錛屽畠浼氭壂鎻忔暣涓懡浠よ鏉ュ鎵鵑夐」銆傚綋璋冪敤GNU getopt()鍑芥暟騫跺鐞嗗懡浠よ鍙傛暟鐨勬椂鍊欙紝瀹冮噸鏂版帓鍒梐rgv涓殑鍏冪礌錛岃繖鏍峰綋閲嶆帓緇撴潫鏃訛紝鎵鏈夐夐」閮借縐誨姩鍒板墠闈㈠茍涓旈偅浜涚戶緇鏌rgv[optind]鑷砤rgv[argc-1]涓墿浣欏弬鏁扮殑浠g爜浠嶆甯稿伐浣滐紝浣嗗湪浠諱綍鎯呭喌涓嬶紝紕板埌鐗規(guī)畩鍙傛暟'--'灝辯粨鏉熷閫夐」鐨勬壂鎻忋?/font> </p> <p> <font color="#808080" size="2">鍙互杈撳叆涓涓貢搴忕殑鍛戒護琛岋紝鏌ョ湅opt_parse_demo鐨勮緭鍑猴細</font> </p> <p> <font color="#808080" size="2">$ ./opt_parse_demo -l forever a b c d -g -n<br />Our love is forever<br />Her name is Xxiong.<br />My name is Lyong.<br />聽</font> </p> <p> <font color="#808080" size="2">GNU getopt()絎簩涓壒鐐規(guī)槸鍙互鍦╫ptstring涓嬌鐢ㄧ壒孌婄殑棣栧瓧絎︽敼鍙榞etopt()鐨勯粯璁よ涓猴細</font> </p> <p> <font color="#808080" size="2">optstring[0] = '+'錛岃繖鏍峰氨涓嶶NIX鏀寔灝忕粍鎻愪緵鐨刧etopt()寰堢浉榪戜簡銆?<br />optstring[0] = '-'錛屼細鍦╫ptarg涓緱鍒板懡浠よ涓殑姣忎釜鍙傛暟銆?<br />浠ヤ笂涓ょ鎯呭喌涓嬶紝':'鍙互浣滀負絎簩涓瓧絎︿嬌鐢ㄣ?br />GNU getopt()絎笁涓壒鐐規(guī)槸optstring涓殑閫夐」瀛楃鍚庨潰鎺ヤ袱涓啋鍙鳳紝灝卞厑璁歌閫夐」鏈夊彲閫夌殑閫夐」鍙傛暟銆傚湪閫夐」鍙傛暟涓嶅瓨鍦ㄧ殑鎯呭喌涓嬶紝GNU getopt()榪斿洖閫夐」瀛楃騫跺皢optarg璁劇疆涓篘ULL銆?/font> </p> <p> <font color="#808080" size="2">8銆丟NU闀塊夐」鍛戒護琛岃В鏋?br />20 涓栫邯 90 騫翠唬錛孶NIX 搴旂敤紼嬪簭寮濮嬫敮鎸侀暱閫夐」錛屽嵆涓瀵圭煭妯嚎銆佷竴涓弿榪版ч夐」鍚嶇О錛岃繕鍙互鍖呭惈涓涓嬌鐢ㄧ瓑鍙瘋繛鎺ュ埌閫夐」鐨勫弬鏁般?/font> </p> <p> <font color="#808080" size="2">GNU鎻愪緵浜唃etopt-long()鍜実etopt-long-only()鍑芥暟鏀寔闀塊夐」鐨勫懡浠よ瑙f瀽錛屽叾涓紝鍚庤呯殑闀塊夐」瀛椾覆鏄互涓涓煭妯嚎寮濮嬬殑錛岃岄潪涓瀵圭煭妯嚎銆?/font> </p> <p> <br /> <font color="#808080" size="2">getopt_long() 鏄悓鏃舵敮鎸侀暱閫夐」鍜岀煭閫夐」鐨?getopt() 鐗堟湰銆備笅闈㈡槸瀹冧滑鐨勫0鏄庯細</font> </p> <p> <font color="#808080" size="2">#include <getopt.h></font> </p> <p> <font color="#808080" size="2">int getopt_long(int argc, char * const argv[], const char *optstring, const struct option *longopts, int *longindex);</font> </p> <p> <font color="#808080" size="2">int getopt_long_only(int argc, char * const argv[],const char *optstring,const struct option *longopts, int *longindex);</font> </p> <p> <font color="#808080" size="2">聽</font> </p> <p> <font color="#808080" size="2">getopt_long()鐨勫墠涓変釜鍙傛暟涓庝笂闈㈢殑getopt()鐩稿悓錛岀4涓弬鏁版槸鎸囧悜option緇撴瀯鐨勬暟緇勶紝option緇撴瀯琚О涓衡滈暱閫夐」琛ㄢ濄俵ongindex鍙傛暟濡傛灉娌℃湁璁劇疆涓篘ULL錛岄偅涔堝畠?yōu)鎸囧悜涓涓彉閲忥紝榪欎釜鍙橀噺浼氳璧嬪間負瀵繪壘鍒扮殑闀塊夐」鍦╨ongopts涓殑绱㈠紩鍊鹼紝榪欏彲浠ョ敤浜庨敊璇瘖鏂?/font> </p> <p> <font color="#808080" size="2">option緇撴瀯鍦╣etopt.h涓殑澹版槑濡備笅錛?/font> </p> <p> <font color="#808080" size="2">struct option{<br />聽聽聽 const char *name;<br />聽聽聽 int has_arg;<br />聽聽聽 int *flag;<br />聽聽聽 int val;<br />};<br />聽</font> </p> <p> <font color="#808080" size="2">瀵圭粨鏋勪腑鐨勫悇鍏冪礌瑙i噴濡備笅錛?/font> </p> <p> <font color="#808080" size="2">const char *name<br />榪欐槸閫夐」鍚嶏紝鍓嶉潰娌℃湁鐭í綰褲傝濡?help"銆?verbose"涔嬬被銆?/font> </p> <p> <font color="#808080" size="2">int has_arg<br />鎻忚堪浜嗛夐」鏄惁鏈夐夐」鍙傛暟銆傚鏋滄湁錛屾槸鍝綾誨瀷鐨勫弬鏁幫紝姝ゆ椂錛屽畠鐨勫間竴瀹氭槸涓嬭〃涓殑涓涓?/font> </p> <p> <font color="#808080" size="2">絎﹀彿甯擱噺聽 鏁板悸?鍚箟聽 <br />no_argument聽 0 閫夐」娌℃湁鍙傛暟聽 <br />required_argument 1 閫夐」闇瑕佸弬鏁?<br />聽<br />optional_argument 2 閫夐」鍙傛暟鍙壜?</font> </p> <p> <font color="#808080" size="2">int *flag<br />濡傛灉榪欎釜鎸囬拡涓篘ULL錛岄偅涔坓etopt_long()榪斿洖璇ョ粨鏋剉al瀛楁涓殑鏁板箋傚鏋滆鎸囬拡涓嶄負NULL錛実etopt_long()浼氫嬌寰楀畠鎵鎸囧悜鐨勫彉閲忎腑濉叆val瀛楁涓殑鏁板鹼紝騫朵笖getopt_long()榪斿洖0銆傚鏋渇lag涓嶆槸NULL錛屼絾鏈彂鐜伴暱閫夐」錛岄偅涔堝畠鎵鎸囧悜鐨勫彉閲忕殑鏁板間笉鍙樸?/font> </p> <p> <font color="#808080" size="2">int val<br />榪欎釜鍊兼槸鍙戠幇浜嗛暱閫夐」鏃剁殑榪斿洖鍊鹼紝鎴栬協(xié)lag涓嶆槸NULL鏃惰澆鍏?flag涓殑鍊箋傚吀鍨嬫儏鍐典笅錛岃嫢flag涓嶆槸NULL錛岄偅涔坴al鏄釜鐪燂紡鍋囧鹼紝璀1鎴?錛涘彟涓鏂歸潰錛屽鏋渇lag鏄疦ULL錛岄偅涔坴al閫氬父鏄瓧絎﹀父閲忥紝鑻ラ暱閫夐」涓庣煭閫夐」涓鑷達紝閭d箞璇ュ瓧絎﹀父閲忓簲璇ヤ笌optstring涓嚭鐜扮殑榪欎釜閫夐」鐨勫弬鏁扮浉鍚屻?/font> </p> <p> <font color="#808080" size="2">姣忎釜闀塊夐」鍦ㄩ暱閫夐」琛ㄤ腑閮芥湁涓涓崟鐙潯鐩紝璇ユ潯鐩噷闇瑕佸~鍏ユ紜殑鏁板箋傛暟緇勪腑鏈鍚庣殑鍏冪礌鐨勫煎簲璇ュ叏鏄?銆傛暟緇勪笉闇瑕佹帓搴忥紝getopt_long()浼氳繘琛岀嚎鎬ф悳绱€備絾鏄紝鏍規(guī)嵁闀垮悕瀛楁潵鎺掑簭浼氫嬌紼嬪簭鍛樿璧鋒潵鏇村鏄撱?/font> </p> <p> <font color="#808080" size="2">浠ヤ笂鎵璇寸殑flag鍜寁al鐨勭敤娉曠湅涓婂幓鏈夌偣娣蜂貢錛屼絾瀹冧滑寰堟湁瀹炵敤浠峰鹼紝鍥犳鏈夊繀瑕佹悶閫忓交浜嗐?/font> </p> <p> <font color="#808080" size="2">澶ч儴鍒嗘椂鍊欙紝紼嬪簭鍛樹細鏍規(guī)嵁getopt_long()鍙戠幇鐨勯夐」錛屽湪閫夐」澶勭悊榪囩▼涓璁劇疆涓浜涙爣璁板彉閲忥紝璀鍦ㄤ嬌鐢╣etopt()鏃訛紝緇忓父鍋氬嚭濡備笅鐨勭▼搴忔牸寮忥細</font> </p> <p> <font color="#808080" size="2">int do_name, do_gf_name, do_love; /*鏍囪鍙橀噺*/<br />char *b_opt_arg;</font> </p> <p> <font color="#808080" size="2">while((c = getopt(argc, argv, ":ngl:")) != -1)<br />{<br />聽聽聽 switch (c){<br />聽聽聽 case 'n':<br />聽聽聽聽聽聽聽 do_name = 1;<br />聽聽聽 case 'g':<br />聽聽聽聽聽聽聽 do_gf_name = 1;<br />聽聽聽聽聽聽聽 break;<br />聽聽聽聽聽聽聽 break;<br />聽聽聽 case 'l':<br />聽聽聽聽聽聽聽 b_opt_arg = optarg;<br />聽聽聽 鈥︹?br />聽聽聽 }<br />}<br />聽</font> </p> <p> <font color="#808080" size="2">褰揻lag涓嶄負NULL鏃訛紝getopt_long*()浼氫負浣犺緗爣璁板彉閲忋備篃灝辨槸璇翠笂闈㈢殑浠g爜涓紝鍏充簬閫夐」'n'銆?l'鐨勫鐞嗭紝鍙槸璁劇疆涓浜涙爣璁幫紝濡傛灉flag涓嶄負NULL,鏃訛紝getopt_long()鍙互鑷姩涓哄悇閫夐」鎵瀵瑰簲鐨勬爣璁板彉閲忚緗爣璁幫紝榪欐牱灝辮兘澶熷皢涓婇潰鐨剆witch璇彞涓殑涓ょ縐嶆儏鍐靛噺灝戝埌浜嗕竴縐嶃備笅闈㈢粰鍑轟竴涓暱閫夐」琛ㄤ互鍙婄浉搴斿鐞嗕唬鐮佺殑渚嬪瓙銆?/font> </p> <p> <font color="#808080" size="2">娓呭崟5錛?/font> </p> <p> <font color="#808080" size="2">#include <stdio.h><br />#include <getopt.h></font> </p> <p> <font color="#808080" size="2">int do_name, do_gf_name;<br />char *l_opt_arg;</font> </p> <p> <font color="#808080" size="2">struct option longopts[] = {<br />聽聽聽 { "name",聽聽聽聽聽聽聽 no_argument,聽聽聽聽聽聽聽聽聽聽聽 &do_name,聽聽聽聽聽聽聽 1聽聽聽 },<br />聽聽聽 { "gf_name",聽聽聽 no_argument,聽聽聽聽聽聽聽聽聽聽聽 &do_gf_name,聽聽聽 1聽聽聽 },<br />聽聽聽 { "love",聽聽聽聽聽聽聽 required_argument,聽聽聽 NULL,聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 'l'聽聽聽 },<br />聽聽聽 {聽聽聽聽 0,聽聽聽 0,聽聽聽 0,聽聽聽 0},<br />};</font> </p> <p> <font color="#808080" size="2">int main(int argc, char *argv[])<br />{<br />聽聽聽 int c;<br />聽聽聽 <br />聽聽聽 while((c = getopt_long(argc, argv, ":l:", longopts, NULL)) != -1){<br />聽聽聽聽聽聽聽 switch (c){<br />聽聽聽聽聽聽聽 case 'l':<br />聽聽聽聽聽聽聽聽聽聽聽 l_opt_arg = optarg;<br />聽聽聽聽聽聽聽聽聽聽聽 printf("Our love is %s!\n", l_opt_arg);<br />聽聽聽聽聽聽聽聽聽聽聽 break;<br />聽聽聽聽聽聽聽 case 0:<br />聽聽聽聽聽聽聽聽聽聽聽 printf("getopt_long()璁劇疆鍙橀噺 : do_name = %d\n", do_name);<br />聽聽聽聽聽聽聽聽聽聽聽 printf("getopt_long()璁劇疆鍙橀噺 : do_gf_name = %d\n", do_gf_name);<br />聽聽聽聽聽聽聽聽聽聽聽 break;<br />聽聽聽聽聽聽聽 }<br />聽聽聽 }<br />聽聽聽 return 0;<br />}<br />聽</font> </p> <p> <font color="#808080" size="2">鍦ㄨ繘琛屾祴璇曚箣鍓嶏紝鍐嶆潵鍥為【涓涓嬫湁鍏硂ption緇撴瀯涓殑鎸囬拡flag鐨勮鏄庡惂銆?/font> </p> <p> <font color="#808080" size="2">濡傛灉榪欎釜鎸囬拡涓篘ULL錛岄偅涔坓etopt_long()榪斿洖璇ョ粨鏋剉al瀛楁涓殑鏁板箋傚鏋滆鎸囬拡涓嶄負NULL錛実etopt_long()浼氫嬌寰楀畠鎵鎸囧悜鐨勫彉閲忎腑濉叆val瀛楁涓殑鏁板鹼紝騫朵笖getopt_long()榪斿洖0銆傚鏋渇lag涓嶆槸NULL錛屼絾鏈彂鐜伴暱閫夐」錛岄偅涔堝畠鎵鎸囧悜鐨勫彉閲忕殑鏁板間笉鍙樸?</font> </p> <p> <font color="#808080" size="2">涓嬮潰嫻嬭瘯涓涓嬶細</font> </p> <p> <font color="#808080" size="2">$ ./long_opt_demo --name<br />getopt_long()璁劇疆鍙橀噺 : do_name = 1<br />getopt_long()璁劇疆鍙橀噺 : do_gf_name = 0</font> </p> <p> <font color="#808080" size="2">$ ./long_opt_demo --gf_name<br />getopt_long()璁劇疆鍙橀噺 : do_name = 0<br />getopt_long()璁劇疆鍙橀噺 : do_gf_name = 1</font> </p> <p> <font color="#808080" size="2">$ ./long_opt_demo --love forever<br />Our love is forever!</font> </p> <p> <font color="#808080" size="2">$ ./long_opt_demo -l forever<br />Our love is forever!</font> </p> <p> <font color="#808080" size="2">聽</font> </p> <p> <font color="#808080" size="2">嫻嬭瘯榪囧悗錛屽簲璇ユ湁鎵鎰熻Е浜嗐傚叧浜巉lag鍜寁al鐨勮璁哄埌姝や負姝€備笅闈㈡葷粨涓涓媑et_long()鐨勫悇縐嶈繑鍥炲肩殑鍚箟錛?/font> </p> <p> <font color="#808080" size="2">榪斿洖鍊悸犅犅?<br />聽鍚?涔?br />聽<br />0聽聽聽聽聽 <br />聽getopt_long()璁劇疆涓涓爣蹇楋紝瀹冪殑鍊間笌option緇撴瀯涓殑val瀛楁鐨勫間竴鏍?br />聽<br />1<br />聽姣忕鍒頒竴涓懡浠よ鍙傛暟錛宱ptarg閮戒細璁板綍瀹?br />聽<br />'?'<br />聽鏃犳晥閫夐」<br />聽<br />':'<br />聽緙哄皯閫夐」鍙傛暟<br />聽<br />'x'<br />聽閫夐」瀛楃'x'<br />聽<br />-1<br />聽閫夐」瑙f瀽緇撴潫<br />聽</font> </p> <p> <font color="#808080" size="2">浠庡疄鐢ㄧ殑瑙掑害鏉ヨ錛屾垜浠洿鏈熸湜姣忎釜闀塊夐」閮藉搴斾竴涓煭閫夐」錛岃繖縐嶆儏鍐典笅錛屽湪option緇撴瀯涓紝鍙灝唂lag璁劇疆涓篘ULL錛屽茍灝唙al璁劇疆涓洪暱閫夐」鎵瀵瑰簲鐨勭煭閫夐」瀛楃鍗沖彲銆傝濡備笂闈㈡竻鍗?涓殑紼嬪簭錛屾垜浠慨鏀瑰涓嬨?/font> </p> <p> <font color="#808080" size="2">娓呭崟6錛?br />#include <stdio.h><br />#include <getopt.h></font> </p> <p> <font color="#808080" size="2">int do_name, do_gf_name;<br />char *l_opt_arg;</font> </p> <p> <font color="#808080" size="2">struct option longopts[] = {<br />聽聽聽 { "name",聽聽聽聽聽聽聽 no_argument,聽聽聽聽聽聽聽聽聽聽聽 NULL,聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 'n'聽聽聽 },<br />聽聽聽 { "gf_name",聽聽聽 no_argument,聽聽聽聽聽聽聽聽聽聽聽 NULL,聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 'g'聽聽聽 },<br />聽聽聽 { "love",聽聽聽聽聽聽聽 required_argument,聽聽聽 NULL,聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 'l'聽聽聽 },<br />聽聽聽 {聽聽聽聽 0,聽聽聽 0,聽聽聽 0,聽聽聽 0},<br />};</font> </p> <p> <font color="#808080" size="2">int main(int argc, char *argv[])<br />{<br />聽聽聽 int c;<br />聽聽聽 <br />聽聽聽 while((c = getopt_long(argc, argv, ":l:", longopts, NULL)) != -1){<br />聽聽聽聽聽聽聽 switch (c){<br />聽聽聽聽聽聽聽 case 'n':<br />聽聽聽聽聽聽聽聽聽聽聽 printf("My name is LYR.\n");<br />聽聽聽聽聽聽聽聽聽聽聽 break;<br />聽聽聽聽聽聽聽 case 'g':<br />聽聽聽聽聽聽聽聽聽聽聽 printf("Her name is BX.\n");<br />聽聽聽聽聽聽聽聽聽聽聽 break;<br />聽聽聽聽聽聽聽 case 'l':<br />聽聽聽聽聽聽聽聽聽聽聽 l_opt_arg = optarg;<br />聽聽聽聽聽聽聽聽聽聽聽 printf("Our love is %s!\n", l_opt_arg);<br />聽聽聽聽聽聽聽聽聽聽聽 break;<br />聽聽聽聽聽聽聽 }<br />聽聽聽 }<br />聽聽聽 return 0;<br />} </font> </p> <p> <font color="#808080" size="2">嫻嬭瘯緇撴灉濡備笅錛?/font> </p> <p> <br /> <font color="#808080" size="2">$ ./long_opt_demo --name --gf_name --love forever<br />My name is LYR.<br />Her name is BX.<br />Our love is forever!</font> </p> <p> <font color="#808080" size="2">$ ./long_opt_demo -ng -l forever<br />My name is LYR.<br />Her name is BX.<br />Our love is forever!<br />聽</font> </p> <p> <font color="#808080" size="2">9銆佸湪LINUX涔嬪鐨勭郴緇熷鉤鍙頒笂浣跨敤GNU getopt()鎴杇etopt_long()<br />鍙浠嶨NU紼嬪簭鎴朑NU C Library(GLIBC)鐨凜VS妗f鏂囦歡涓璫opy婧愭枃浠跺嵆鍙紙</font> <a > <font color="#808080" size="2">http://sourceware.org/glibc/</font> </a> <font color="#808080" size="2">錛夈傛墍闇婧愭枃浠舵槸getopt.h銆乬etopt.c鍜実etoptl.c錛屽皢榪欎簺鏂囦歡鍖呭惈鍦ㄤ綘鐨勯」鐩腑銆傚彟澶栵紝浣犵殑欏圭洰涓渶濂戒篃灝咰OPYING.LIB鏂囦歡鍖呭惈榪涘幓錛屽洜涓篏NU LGPL錛圙NU 紼嬪簭搴撳叕鍏辮鍙瘉錛夌殑鍐呭鍏ㄩ儴鍖呮嫭鍦ㄥ懡鍚嶄負COPYING.LIB 鐨勬枃浠朵腑銆傛病浜嬫椂錛屽彲浠ラ槄璇諱竴涓嬭嚜鐢辮蔣浠剁殑璁稿彲鍗忚錛屾劅鍙椾竴涓嬮浄閿嬬簿紲炪?/font> </p> <p> <font color="#808080" size="2">娉ㄦ剰錛屽湪鍖呭惈鎵闇鏂囦歡涔嬪悗錛屽湪璋冪敤getopt_long()緋誨垪鍑芥暟鐨勬簮浠g爜涓紝搴旇浣跨敤#include "getopt.h"錛岃屼笉鏄?include <getopt.h>錛屽墠鑰呬細棣栧厛鍦ㄥ綋鍓嶇洰褰曚腑瀵繪壘getopt.h銆?/font> </p> <p> <font color="#808080" size="2">浣跨敤Windows騫沖彴鐨勫厔寮熷彲浠ヨ瘯鐢ㄤ竴涓嬶紝寰堝笇鏈涜兘鍦ㄨ繖閲屽弽棣堜竴涓嬩綘鐨勪嬌鐢ㄦ儏鍐碉紝璋㈣阿銆?/font> </p> <p> <br /> <font color="#808080" size="2">10銆佺粨璁?br />紼嬪簭闇瑕佽兘澶熷揩閫熷鐞嗗悇涓夐」鍜屽弬鏁幫紝涓旇姹備笉浼氭氮璐瑰紑鍙戜漢鍛樼殑澶鏃墮棿銆傚湪榪欎竴鐐逛笂錛屾棤璁烘槸GUI(鍥懼艦鐢ㄦ埛浜や簰錛夌▼搴忚繕鏄疌UI錛堝懡浠よ浜や簰錛夌▼搴忥紝閮芥槸鍏墮瑕佷換鍔★紝鍏跺尯鍒粎鍦ㄤ簬瀹炵幇鏂瑰紡鐨勪笉鍚屻侴UI閫氳繃鑿滃崟銆佸璇濇涔嬬被鐨勫浘褰㈡帶浠舵潵瀹屾垚浜や簰錛岃孋UI浣跨敤浜嗙函鏂囨湰鐨勪氦浜掓柟寮忋傚悇鏈夊埄寮婂惂銆傚湪紼嬪簭寮鍙戜腑錛岃澶氭祴璇曠▼搴忕敤CUI鏉ュ畬鎴愭槸棣栭夋柟妗堛?/font> </p> <p> <font color="#808080" size="2">getopt() 鍑芥暟鏄竴涓爣鍑嗗簱璋冪敤錛屽彲鍏佽鎮(zhèn)ㄤ嬌鐢ㄧ洿鎺ョ殑 while/switch 璇彞鏂逛究鍦伴愪釜澶勭悊鍛戒護琛屽弬鏁板拰媯嫻嬮夐」錛堝甫鎴栦笉甯﹂檮鍔犵殑鍙傛暟錛夈備笌鍏剁被浼肩殑 getopt_long() 鍏佽鍦ㄥ嚑涔庝笉榪涜棰濆宸ヤ綔鐨勬儏鍐典笅澶勭悊鏇村叿鎻忚堪鎬х殑闀塊夐」錛岃繖闈炲父鍙楀紑鍙戜漢鍛樼殑嬈㈣繋銆?</font> </p> <p> <font color="#808080" size="2">鏃㈢劧宸茬粡鐭ラ亾浜嗗浣曟柟渚垮湴澶勭悊鍛戒護琛岄夐」錛岀幇鍦ㄥ氨鍙互闆嗕腑綺懼姏鏀硅繘鎮(zhèn)ㄧ殑紼嬪簭鐨勫懡浠よ錛屽彲浠ユ坊鍔犻暱閫夐」鏀寔錛屾垨娣誨姞涔嬪墠鐢變簬涓嶆兂鍚戠▼搴忔坊鍔犻澶栫殑鍛戒護琛岄夐」澶勭悊鑰屾悂緗殑浠諱綍鍏朵粬閫夐」銆備絾涓嶈蹇樿鍦ㄦ煇澶勮褰曟?zhèn)ㄦ墍鏈夌殑閫夐」鍜屽弬鏁幫紝騫舵彁渚涙煇縐嶇被鍨嬬殑鍐呯疆甯姪鍑芥暟鏉ヤ負鍋ュ繕鐨勭敤鎴鋒彁渚涘府鍔┿?/font> </p> <img src ="http://m.shnenglu.com/yeqing/aggbug/15768.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/yeqing/" target="_blank">澶滄瞾</a> 2006-11-29 09:29 <a href="http://m.shnenglu.com/yeqing/articles/15768.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>gSOAP瀛︿範浣撲細http://m.shnenglu.com/yeqing/articles/12762.html澶滄瞾澶滄瞾Wed, 20 Sep 2006 08:21:00 GMThttp://m.shnenglu.com/yeqing/articles/12762.htmlhttp://m.shnenglu.com/yeqing/comments/12762.htmlhttp://m.shnenglu.com/yeqing/articles/12762.html#Feedback4http://m.shnenglu.com/yeqing/comments/commentRss/12762.htmlhttp://m.shnenglu.com/yeqing/services/trackbacks/12762.html 鍓嶄竴闃舵鍐檊SOAP 鐨勬枃绔犳病淇濆瓨濂斤紝鍚庢潵鎯沖啓鐨勶紝瓚婂瓚婃病鏈夊啓鐨勫媷姘斾簡錛屾劅瑙夎嚜宸卞緢鑿滐紝浣嗘槸鐜板湪鎰熻榪樻槸鍐欑偣灝辯畻緇欏叆闂ㄨ呬竴鐐規(guī)彁紺哄惂銆傚彟澶栬櫧璇磋繖綃囨枃绔犳槸鑷繁鍐欑殑錛屼絾鏄嵈鎰熻鏄笢鎷艱タ鍑戠殑錛屾湁寰堝鍒漢鐨勪笢瑗夸簡銆?br />聽 聽鐪嬩簡鎴戣漿杞界殑鍏充簬soap 鐨勬枃绔狅紝澶у鎯沖繀瀵箂oap鏈夋墍浜嗚В浜嗗惂錛岄偅涔坓SOAP鏄粈涔堥偅錛?br />gSOAP鏄竴涓紑婧愮殑欏圭洰錛岀敤瀹冨彲浠ユ柟渚跨殑浣跨敤c/c++鍦拌繘琛孲OAP瀹㈡埛绔拰鏈嶅姟鍣ㄧ緙栫▼錛岃屼笉蹇呬簡瑙ml鍜孲OAP鍗忚鐨勭粏鑺傘傝繖鏍蜂嬌鐢ㄨ呭氨鍙互涓撴敞浜庤嚜宸辯殑web service 瀹㈡埛绔垨鏈嶅姟鍣ㄧ鐨勭紪鍐欙紝鑰屼笉鐢ㄧ籂緙犱笌鍏跺畠緇嗚妭銆傛垜絎竴嬈℃帴瑙﹁繖浜涗笢瑗匡紝鎴戝SOAP鐨勭悊瑙f槸榪欐牱鐨勶細浠ttp鍗忚涓哄熀鏈殑閫氫俊鍗忚錛屼互xml鏂囦歡褰㈠紡璇鋒眰榪滅▼鏈嶅姟錛屽啀浠ml鏂囦歡鐨勫艦寮忚繑鍥炴墽琛岀粨鏋滐紝鎴戠悊瑙g殑灝辮繖涔堢畝鍗曚簡錛屾湁鍟ヤ笉濡ュ錛岃繕璇鋒寚鏁欓樋銆?br />瀹炶返涓涓嬫墠鏈夌悊鎬ц璇嗭紝涓嬮潰鏄垜鑷繁鍦╳indows涓嬶紝鍏蜂綋璇存潵灝辨槸鐢╲c 6.0涓嬬紪鍐欑殑涓涓緢綆鍗曠殑瀹㈡埛绔▼搴忚皟鐢ㄨ繙紼嬬殑鏈嶅姟錛屾潵鍙戦佺數(shù)瀛愰偖浠訛紝鎰熻寰堢埥鍚с?br />棣栧厛鎴戜滑鍒?/font> http://sourceforge.net/project/showfiles.php?group_id=52781 涓嬭澆gSOAP涓嬭澆宸ュ叿闆嗗惂錛屼笉鍚岀殑緋葷粺涓嬬敤鐨刧SOAP鏄笉涓鏍風(fēng)殑錛屾牴鎹渶瑕佷笅杞戒簡windows涓嬬殑鍜宭inux涓嬬殑銆?br />gSOAP宸ュ叿闆嗕笉闇瑕佸畨瑁咃紝鐩存帴瑙e帇灝卞彲浠ヤ簡銆傚湪/bin鐩綍涓嬫垜浠彲浠ョ湅鍒頒袱涓彲鎵ц鏂囦歡錛?br />soapcpp2.exe: gSOAP緙栬瘧鍣紝緙栬瘧澶存枃浠剁敓鎴愭湇鍔″櫒鍜屽鎴風(fēng)閮介渶瑕佺殑 c/c++鏂囦歡銆?
wsdl2h.exe: 緙栬瘧wsdl鏂囦歡鐢熸垚c/c++澶存枃浠躲?br />宸ュ叿灝辯畻鍑嗗濂戒簡銆?br />鍏舵錛屾垜浠埌
http://www.abysal.com/soap/AbysalEmail.wsdl 涓嬭澆
wsdl鏂囦歡錛屽亣璁句繚瀛樻枃浠跺悕涓猴細AbysalEmail.wsdl銆傛墍璋撶殑wsdl鏂囦歡緲昏瘧鎴愪腑
鏂囧氨鏄綉緇滄湇鍔℃弿榪版枃浠朵簡銆傛垜浠敤wsdl2h.exe宸ュ叿鏉ユ牴鎹畐sdl鏂囦歡鐢熸垚
c/c++澶存枃浠訛紝鍙互鐢?c閫夐」鏄敓鎴愮函c鐨勫ご鏂囦歡錛屽彟澶栫敤-s閫夐」鏄鏄庢垜浠湪
紼嬪簭涓笉浣跨敤stl錛屾敞鎰忎簡榛樿鎴戜滑鏄傜敤stl鐨勩?br />鐢ㄥ涓嬪懡浠わ細
wsdl2h聽聽-o AbysalEmail.h AbysalEmail.wsdl
鏃㈠彲浠ョ敓鎴愭垜浠渶瑕佺殑AbysalEmail.h澶存枃浠朵簡銆傝繖閲屾枃浠跺悕鍙互闅忎究璧蜂簡銆?br />灝嗕笅杞界殑gsoap鐨刬mport閲岀殑stlvector.h涓枃浠舵嫹璐濆埌褰撳墠鐨勬枃浠跺す涓嬶紝鍥犱負榛樿鏄嬌鐢╯tl鐨勶紝鎵浠ラ渶瑕佸畠銆?br />鐒跺悗鎵цsoapcpp2 鍛戒護鏉ョ敓鎴愬瓨鏍圭▼搴忥紝鐢ㄥ涓嬪懡浠わ細
soapcpp2聽聽-C AbysalEmail.h
-C聽聽閫夐」鏄彧鐢熸垚瀹㈡埛绔殑錛岄粯璁ゆ槸鐢熸垚瀹㈡埛绔拰鏈嶅姟鍣ㄧ鐨勶紝濡傛灉浣犲湪紼嬪簭涓嬌鐢ㄤ簡vector榪樿鍔犱笂 鈥搇import閫夐」銆?br />鍗沖彲浠ョ敓瀛樺鎴風(fēng)瀛樻牴紼嬪簭鍜屾鏋朵簡銆?br />soapClient.cpp錛氱紪璇戝鎴風(fēng)鐨勯渶瑕佺殑瀛樻牴渚嬬▼銆?br />soapC.cpp錛宻oapH.h:鐢ㄦ潵搴忓垪鍖栧拰鍙嶅簭鍒楀寲c/c++涓嶅悓鏁版嵁綾誨瀷銆?br />soapServer.cpp: 緙栬瘧鏈嶅姟鍣ㄧ鐨勯渶瑕佺殑瀛樻牴渚嬬▼銆?br />soapXXXProxy.h: 鐢熸垚鐨勪唬鐞嗙被鐨勫ご鏂囦歡,浣跨敤浠g悊綾繪椂闇瑕佹鏂囦歡銆?br />鏈▼搴忎負soapSendEmailBindingProxy.h銆?br />
絎笁姝ワ紝灝辨槸鍦╲c涓緩涓伐紼嬶紝璁劇疆濡備笅錛?br />鍦╲c6涓緩绔嬪伐紼嬶紝鍏舵簮鏂囦歡涓猴細sendMailClient.cpp soapC.cpp
聽 聽聽 聽聽 聽聽 聽聽 聽聽 聽聽 聽聽 聽聽 聽聽 聽聽 聽聽 聽soapClient.cpp聽 聽stdsoap2.cpp
澶存枃浠朵負錛毬?聽聽 聽AbysalEmail.h soapH.h soapStub.h stdsoap2.h聽 聽聽 聽
鍏朵粬渚濊禆鏂囦歡涓猴細basetsd.h聽聽sendemailbinding.nsmp
stdsoap2.cpp stdsoap2.h鏄笅杞界殑gSOAP涓寘鍚殑銆?br />鍙﹀鍦ㄦ墍闇瑕佺殑搴撲腑鎶妛sock32.lib鍔犱笂錛実SOAP涔熸槸閲囩敤socket鏂瑰紡榪炴帴鐨勩?br />鍏朵腑sendMailClient.cpp涓烘垜鍐欑殑瀹㈡埛绔▼搴忥紝紼嬪簭濡備笅錛?br />
#include "soapH.h"聽 聽聽 聽聽 聽聽 聽聽 聽聽 聽聽 聽聽 聽聽聽// 寰楀埌瀛樻牴紼嬪簭
#include "SendEmailBinding.nsmap"聽 聽聽 聽聽 聽聽 聽//寰楀埌鍚嶇О絀洪棿鏄犲皠琛?br />#include <iostream>
#include聽聽<string>
#include "soapSendEmailBindingProxy.h"

using namespace std;

int main(int argc, char **argv)
{
聽 聽 聽 聽 struct soap email_soap;
聽 聽 聽 聽 int result = -1;
聽 聽SendEmailBinding聽聽EmailBind;聽 聽聽 聽聽 聽聽 聽聽聽//鐢熸垚浠g悊綾誨璞?br />聽 聽 _ns1__SendEmail聽聽sendEmail;聽 聽聽 聽聽 聽聽 聽聽聽//web鏈嶅姟鍙戦佺數(shù)瀛愰偖浠跺璞?br />聽 聽_ns1__SendEmailResponse聽聽Email_Response;聽聽//web 鏈嶅姟榪斿洖鍙戦佺粨鏋滃璞?br />聽 聽string from = "mseaspring";
聽 聽string to聽 聽= "David";
聽 聽string sub = "Hello test!";
聽 聽sendEmail.From = &from;
聽 聽sendEmail.FromAddress = "
mseaspring@hotmail.com ";
聽 聽sendEmail.MsgBody = "I want to test a web service!";
聽 聽sendEmail.To = &to;
聽 聽sendEmail.ToAddress = "
mseaspring@gmail.com ";
聽 聽sendEmail.Subject = 鈯?br />
聽 聽 聽 聽 result = EmailBind.__ns1__SendEmail(&sendEmail,聽聽&Email_Response);
聽 聽 聽 聽 if (result != 0)
聽 聽 聽 聽 {
聽 聽 聽 聽 聽 聽 聽 聽 printf("soap error ,errcode = %d\n", result);
聽 聽 聽 聽 }
聽 聽 聽 聽 else
聽 聽 聽 聽 {
聽 聽 聽 聽聽 聽聽聽cout<<"The result is :"<<Email_Response.ReturnCode<<endl;
聽 聽 聽 聽 聽 聽 聽 聽 cout<<"鎭枩浣狅紝閭歡鍙戦佹垚鍔燂紒"<<endl;
聽 聽 聽 聽 }
聽 聽 聽 聽 return 0;
}鎴戠▼搴忎腑鏄噰鐢ㄤ唬鐞嗙被鐨勬柟寮忕紪鍐欑殑紼嬪簭錛屼笉鐢ㄤ唬鐞嗙被鐨勪唬鐮佸涓嬶細
#include "soapH.h"聽 聽聽 聽聽 聽聽 聽聽 聽聽 聽聽 聽聽 聽聽聽//聽聽寰楀埌瀛樻牴紼嬪簭
#include "SendEmailBinding.nsmap"聽 聽聽 聽聽 聽聽 聽// 寰楀埌鍚嶇О絀洪棿鏄犲皠琛?br />#include <iostream>
#include聽聽<string>
using namespace std;

int main(int argc, char **argv)
{
聽 聽 聽 聽 struct soap email_soap;
聽 聽 聽 聽 //鍒濆鍖杇Soap榪愯鏃剁幆澧冨彉閲忥紝鍙渶鍒濆鍖栦竴嬈?br />聽 聽 聽 聽 soap_init(&email_soap);
聽 聽 聽 聽 int result = -1;
聽 聽 聽 聽 //榪滅▼web鏈嶅姟鐨別ndpoint URL
聽 聽const char* server="http://www.abysal.com/soap/soapmail.wdtp";
聽 聽string from = "mseaspring";
聽 聽string to聽 聽= "David";
聽 聽string sub = "Hello test!";
聽 聽sendEmail.From = &from;
聽 聽sendEmail.FromAddress = "
mseaspring@hotmail.com ";
聽 聽sendEmail.MsgBody = "I want to test a web service!";
聽 聽sendEmail.To = &to;
聽 聽sendEmail.ToAddress = "
mseaspring@gmail.com ";
聽 聽sendEmail.Subject = 鈯?br />聽 聽 //璋冪敤鏍規(guī)嵁榪滅▼鏈嶅姟浜х敓鍑芥暟鐨勬帴鍙?br />result = soap_call___ns1__SendEmail(&email_soap, server, "", &sendEmail,聽聽&Email_Response);
聽 聽 聽 聽 if(email_soap.error)
聽 聽 聽 聽 {
聽 聽 聽 聽 聽 聽 聽 聽 //鍦╯tderr嫻佷腑鎵撳嵃soap鐨勯敊璇俊鎭?br />聽 聽 聽 聽 聽 聽 聽 聽 soap_print_fault(&email_soap,stderr);
聽 聽 聽 聽 聽 聽 聽 聽 result = email_soap.error;
聽 聽 聽 聽 }
聽 聽 soap_destroy(&email_soap);// 鍒犻櫎鍙嶅簭鍒楀寲綾葷殑瀹炰緥,浠呯敤浜巆++
聽 聽 聽 聽 soap_end(&email_soap);聽 聽 // 娓呯┖宸茬粡騫惰鍖栫殑鏁版嵁
聽 聽 聽 聽 soap_done(&email_soap);聽 聽// 涓巊SOAP 鐜鐩稿垎紱?鍏抽棴榪炴帴
聽 聽 聽 聽 if (result != 0)
聽 聽 聽 聽 {
聽 聽 聽 聽 聽 聽 聽 聽 printf("soap error ,errcode = %d\n", result);
聽 聽 聽 聽 }
聽 聽 聽 聽 else
聽 聽 聽 聽 {
聽 聽 聽 聽聽 聽聽聽cout<<"The result is :"<<Email_Response.ReturnCode<<endl;
聽 聽 聽 聽 聽 聽 聽 聽 cout<<"鎭枩浣狅紝閭歡鍙戦佹垚鍔燂紒"<<endl;
聽 聽 聽 聽 }
聽 聽 聽 聽 return 0;
}
浣犲彲鑳戒細闂垜鎬庝箞鐭ラ亾榪滅▼鏈嶅姟鐨勬帴鍙i樋錛?鍒皊oapStub.h涓幓鎵懼氨鍙互浜嗭紝鑷充簬浠g悊綾葷殑浣跨敤錛屽埌浠g悊綾誨ご鏂囦歡涓竴鐪嬩究鐭ャ?br />濂戒簡錛岀粓浜庤鍐欏畬浜嗭紝褰撶劧鎴戜滑涓嶄粎鍙互緙栧啓瀹㈡埛绔篃鍙互緙栧啓鏈嶅姟鍣ㄧ紼嬪簭錛岃嚦浜庢湇鍔″櫒绔紝鏈夊叴瓚g殑鍙互鑷繁鐪嬬湅gSOAP閲岄潰鐨勬枃妗o紝涔熷緢綆鍗曠殑錛屼笉榪囦篃瑕佽姳鐐規(guī)椂闂村涔犵殑浜嗭紝鍛靛懙銆?br />濡傛灉瀵逛簬涓婇潰紼嬪簭錛屾湁璋佹病璋冭瘯鎴愬姛鑱旂郴鎴戯紝閭閮藉啓鍦ㄧ▼搴忛噷閭c傚懙鍛點?/font>

澶滄瞾 2006-09-20 16:21 鍙戣〃璇勮
]]>
SOAP鍗忚瑙勮寖http://m.shnenglu.com/yeqing/articles/12759.html澶滄瞾澶滄瞾Wed, 20 Sep 2006 07:15:00 GMThttp://m.shnenglu.com/yeqing/articles/12759.htmlhttp://m.shnenglu.com/yeqing/comments/12759.htmlhttp://m.shnenglu.com/yeqing/articles/12759.html#Feedback0http://m.shnenglu.com/yeqing/comments/commentRss/12759.htmlhttp://m.shnenglu.com/yeqing/services/trackbacks/12759.html闃呰鍏ㄦ枃

澶滄瞾 2006-09-20 15:15 鍙戣〃璇勮
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              亚洲网站在线| 中日韩男男gay无套| 久久久无码精品亚洲日韩按摩| 亚洲视频免费看| 一区二区三区国产| 亚洲欧美日韩国产综合在线| 亚洲男人av电影| 欧美在线日韩| 毛片基地黄久久久久久天堂| 欧美成人国产va精品日本一级| 欧美伦理a级免费电影| 欧美日本国产视频| 久久色中文字幕| 久久久xxx| 欧美xx69| 亚洲精品激情| 日韩视频免费大全中文字幕| 一区二区黄色| 久久青草欧美一区二区三区| 欧美精品激情blacked18| 国产精品二区影院| 精品成人在线观看| 亚洲深夜激情| 久久婷婷人人澡人人喊人人爽| 欧美成人免费播放| 亚洲午夜一区| 欧美电影免费观看高清| 国产精品美女久久久久av超清| 在线观看成人网| 午夜精彩视频在线观看不卡| 久久在线免费观看视频| 99热这里只有成人精品国产| 久久精品国产亚洲一区二区| 欧美性一区二区| 亚洲日韩欧美视频一区| 久久精品视频在线| 亚洲视频播放| 欧美精品一区二区久久婷婷| 欧美激情在线| 欧美一区日本一区韩国一区| 欧美日韩免费一区二区三区视频| 精品1区2区3区4区| 亚洲午夜一二三区视频| 亚洲黄色免费网站| 久久久久欧美精品| 国产一区二区三区电影在线观看| 在线视频日韩精品| 久久久精品午夜少妇| 国产精品区一区二区三区| 亚洲精品一区二区三区av| 狂野欧美激情性xxxx欧美| 西西裸体人体做爰大胆久久久| 欧美日韩四区| 99热免费精品在线观看| 亚洲国产成人高清精品| 久久久国产一区二区| 国产一区av在线| 欧美伊人精品成人久久综合97| 亚洲先锋成人| 国产精品久久久久999| 亚洲婷婷综合久久一本伊一区| 亚洲国产欧美久久| 欧美国产欧美亚洲国产日韩mv天天看完整 | 亚洲高清在线精品| 亚洲制服少妇| 国产精品日日摸夜夜添夜夜av| 亚洲视频久久| 午夜精品久久久久久久99水蜜桃 | 亚洲尤物在线视频观看| 亚洲国产免费看| 欧美大片免费观看在线观看网站推荐| 在线观看欧美精品| 欧美福利视频一区| 免费亚洲电影在线| 亚洲久久一区| 亚洲深夜av| 黄色成人在线网站| 亚洲国产高清在线| 亚洲免费不卡| 欧美日韩中文字幕日韩欧美| 亚洲精品视频免费观看| 欧美福利在线| 欧美金8天国| 亚洲视频网在线直播| 亚洲综合色丁香婷婷六月图片| 国产精品手机视频| 可以看av的网站久久看| 欧美激情一区二区在线| 亚洲欧美另类在线| 久久国产99| 99在线精品视频在线观看| 在线亚洲激情| 在线成人欧美| 99re6这里只有精品| 国产真实久久| 亚洲免费观看高清在线观看| 国产亚洲一区在线| 亚洲人成网站999久久久综合| 国产精品免费观看在线| 欧美+日本+国产+在线a∨观看| 欧美日韩国产综合视频在线观看中文 | 香蕉亚洲视频| 国产最新精品精品你懂的| 亚洲第一精品福利| 国产精品羞羞答答| 亚洲黄色天堂| 国产亚洲一区精品| 在线视频亚洲欧美| 亚洲欧洲一区| 欧美在线一二三| 亚洲天堂av电影| 久久这里只精品最新地址| 欧美亚洲日本一区| 欧美日韩日日夜夜| 欧美韩国日本一区| 黄色成人在线观看| 午夜性色一区二区三区免费视频 | 美女精品视频一区| 国产精品女人毛片| 亚洲国产精品va在看黑人| 国产亚洲精品久久久久久| 亚洲最快最全在线视频| 亚洲免费电影在线观看| 麻豆精品国产91久久久久久| 久久er99精品| 国产精品青草久久久久福利99| 亚洲美女在线国产| 亚洲乱码国产乱码精品精可以看 | 亚洲网站在线观看| 99精品久久久| 欧美精品国产一区二区| 欧美电影在线观看完整版| 久久精品99| 久久精品中文字幕一区二区三区| 欧美涩涩网站| 99在线精品观看| 宅男精品视频| 欧美伦理一区二区| 最新国产精品拍自在线播放| 亚洲国产另类 国产精品国产免费| 久久精品五月| 欧美va亚洲va国产综合| 1024精品一区二区三区| 久久综合网hezyo| 欧美国产亚洲精品久久久8v| 亚洲国产另类久久精品| 欧美成人按摩| 99re6热在线精品视频播放速度| 一区二区三区国产| 国产精品久久二区| 小黄鸭精品aⅴ导航网站入口| 久久精品在线播放| 在线国产欧美| 欧美精品一区在线发布| 99综合精品| 久久国产精品72免费观看| 狠狠色狠狠色综合日日小说| 久久精品在线| 亚洲区第一页| 欧美一级淫片aaaaaaa视频| 国外成人免费视频| 欧美电影免费观看网站 | 欧美极品一区| 一区二区三区四区国产精品| 西西裸体人体做爰大胆久久久| 国产视频精品va久久久久久| 久久夜色精品国产噜噜av| 亚洲第一在线视频| 午夜激情久久久| 在线视频国产日韩| 欧美日韩国产综合一区二区| 亚洲免费视频网站| 欧美大尺度在线观看| 亚洲视频一二区| 国产一区香蕉久久| 欧美日韩国产一区| 久久国产精品一区二区| 欧美在线网址| 亚洲看片免费| 国产一区二区三区不卡在线观看| 欧美激情亚洲视频| 欧美一区二区三区四区夜夜大片| 亚洲电影在线观看| 久久久久久黄| 亚洲专区在线| 亚洲狼人综合| 狠狠v欧美v日韩v亚洲ⅴ| 欧美四级电影网站| 免费在线日韩av| 欧美一区=区| 一区二区三区精品国产| 欧美激情日韩| 久久综合色8888| 久久成人资源| 在线视频中文亚洲| 亚洲国产一区二区在线| 国产一区91| 国产麻豆午夜三级精品| 欧美日韩另类一区| 欧美欧美在线|