bash±Ê¼Ç-05-ÃüÁî
(2006-07-26 15:23)
·ÖÀࣺ bash
¿ÉÒÔÔڽű¾Öе÷ÓÃÃüÁî.
bashÃüÁî¿É·ÖΪÍⲿÃüÁîºÍÄÚ²¿ÃüÁî(bashÄÚǶµÄÃüÁî).¿ÉÒÔÔÚÃüÁîÐÐÖÐÖ±½Óµ÷ÓÃÍⲿÃüÁî,µ«²»ÄÜÖ±½Óµ÷ÓÃÄÚ²¿ÃüÁî.µ«¸ù¾ÝPOSIX±ê×¼,Ðí¶àÄÚ
ǶÃüÁîÒѾ±»ÊµÏÖΪ¶ÀÁ¢µÄÍⲿ³ÌÐò.ËùÒÔÇø±ðÄÚ²¿ÃüÁîºÍÍⲿÃüÁîµÄÒâÒå¾Í²»´óÁË.Ö»ÐèÖªµÀÄÚ²¿ÃüÁîÖ´ÐÐÆðÀ´±ÈÍⲿÃüÁîЧÂʸü¸ß¾Í¿ÉÒÔÁË. ÁíÍâ,
ÍⲿÃüÁîºÍÄÚǶÃüÁîµÄÖ´Ðз½Ê½Ò²²»Ò»Ñù, ²Î¿¼bash±Ê¼Ç-01-intro
Ñ»·¿ØÖÆ
break
breakÓÃÓÚÑ»·¿ØÖÆ, ¿ÉÔÚfor, while, untilÖÐÔÚÌõ¼þÂú×ã֮ǰÌáǰÖÕÖ¹Óï¾äµÄÖ´ÐÐ. »¹¿ÉʹÓÃ"break n"ÓÃÒÔ½áÊøn²ãÑ»·, µ«Àí½âËü±È½ÏÂé·³, ÏÖʵÒâÒåÒ²²»´ó, ²»ÍƼöʹÓÃ. ĬÈÏbreakÖ»ÓÃÓÚÍ˳öÒ»²ãÑ»·.
continue
ÓëbreakÏà¶ÔÓ¦, continueÓÃÒÔÌø³öµ±Ç°Ñ»·, ½øÈëµ½ÏÂÒ»´ÎÑ»·ÖÐ. loop±äÁ¿È¡Ï´˻黹µÄÖµ. Ò²¿ÉÒÔµ÷ÓÃ"continue n"À´Ìø³öǶÌ×Ñ»·, ͬÑù, ²»ÍƼöʹÓÃ.
Àý: (À´×Ôabs, 10.3½Ú)
#!/bin/bash |
: ÃüÁî
":"ÊÇÒ»¸ö¿ÕÃüÁî(null), ÓÐʱËü±»ÓÃÀ´¼ò»¯¿ØÖÆÂß¼. Ëüʵ¼ÊÉÏÊÇtrueµÄ±ðÃû. ÀýÈç:
ÓÃÓÚÎÞÏÞÑ»·µÄ "while :" ʵ¼ÊÉϵȼÛÓÚ"while true". ":"ÓÉÓÚÊÇÄÚǶÃüÁî, Ëü±ÈtrueЧÂÊÒª¸ß.
I/O
echo
echoÏòstdoutÊä³ö±í´ïʽ»ò±äÁ¿. ĬÈϵØ, echo»áÔÚÊä³öºó»»ÐÐ. ¿ÉÒÔÓÐÁ½ÖÖ·½Ê½¹Ø±ÕechoµÄ»»ÐÐ:
$ echo -n "hello, world"
$ echo -e "hello, world\c"
-nÈ¥µôechoĩβµÄ»»Ðзû, -e´òÓ¡³öתÒå×Ö·û. ÔÚlinux/bashϵͳÖÐ, ÍÆ¼öʹÓÃ-n.
printf
Èç¹ûÏëÉú³É¸ñʽ»¯Êä³ö, ½¨ÒéʹÓÃprintf¶ø·Çecho. Àϰ汾µÄbash²»Ö§³Öprintf, µ«½ÌÐµĶ¼Ö§³Ö.
printfºÍcÖеÄprintfº¯ÊýºÜÏñ:
printf ¡°format string¡± parameter1 parameter2 ...
µ«bashÖеÄprintf²»ÄÜÊä³ö¸¡µãÊý(bashÖеÄËãÊõÔËËã¶¼ÊÇÕë¶ÔÕûÊýÖ´ÐеÄ).
$ printf "%s %d\t %s\n" "hi there" 15 "people"
hi there 15 people
½Å±¾ÐÐΪ
source, . ÃüÁî
ÔÚbash±Ê¼ÇµÚÒ»²¿·ÖÖÐÒѾÌáµ½ÁËsourceÃüÁî»ò.ÃüÁî¶Ô½Å±¾µÄÖ´Ðз½Ê½ÓëÆäËûÖ´Ðз½Ê½µÄ²»Í¬Ö¸³ö: ÔÚµ±Ç°shellÖÐÔËÐÐ, Ó°Ï쵱ǰshellµÄ»·¾³±äÁ¿. ¿ÉÒÔ°Ñ"."ÃüÁîÏëÏó³ÉCÖеÄ#includeÃüÁî, ËäÈ»Ëü²»Ö±½Ó½«Óï¾ä°üº¬µ½½Å±¾ÖÐ, µ«Ëü»áÔÚµ±Ç°shellÖÐÖ´ÐÐÄÇЩÃüÁî. ʹÓÃ.ÃüÁî¿ÉÒÔ½«¶à¸ö½Å±¾ºÏ²¢ÆðÀ´, ÕûºÏ½øÒ»Ð©±äÁ¿ºÍº¯Êý.
exec
execÓÐÁ½ÖÖÓÃ;:
1, Èõ±Ç°½ø³ÌÖ´ÐÐÆäËûµÄÃüÁî.
×¢Òâ: (1)Ëü²»Éù³ÆÒ»¸ö×Óshell½ø³Ì, ¶øÊÇÔÚµ±Ç°½ø³ÌÖ´ÐгÌÐò.
(2)ÔÚexecÃüÁîÖ®ºóµÄshellÓï¾ä²»»á±»Ö´ÐÐ, execÃüÁîÖ´ÐеijÌÐòÔËÐÐÍê±Ïºó¾Í»áÍ˳ö.
2, ÖØ·ÖÅäÎļþÃèÊö·û. (²»³£ÓÃ)
$ exec 3< file
½«fd=3ÓÃÓÚ¶ÁÈ¡file.
exit
ÓÃÓÚÎÞÌõ¼þÖÕÖ¹µ±Ç°½Å±¾µÄÖ´ÐÐ. ÈôÓÃÔÚ½»»¥Ê½shellÖÐ, Ëü½«logoutµ±Ç°shell.
exitºó¾³£´øÓÐÒ»¸öÊýÖµ²ÎÊý, ±íÕ÷Í˳ö״̬: exit n
n == 0 ½Å±¾Ö´Ðгɹ¦
n == 1~125 ³ö´í, ÕâЩ¶ÔÓ¦µÄ´íÎóÖµÓÉÓû§Ôڽű¾Öж¨Òå.
n == 126 Îļþ²»¿ÉÖ´ÐÐ
n == 127 ²»´æÔÚ¸ÃÃüÁî
n >= 128 ²úÉúÐźÅ
×¢Òân´¦ÓÚ1µ½125µÄÇé¿ö, ÕâЩ´íÎóÖµ¿ÉÒÔÓÉÓû§×Ô¶¨Òå, Õâ¾Í²»ÐèҪʹÓÃÀàËÆCÖÐerrnoÕâÑùµÄÈ«¾Ö±äÁ¿.
Èç¹û²»¸ø¶¨nµÄÖµ, ¶øÖ±½ÓʹÓÃexit, ÄÇô·µ»Øexit֮ǰ×îºóÒ»ÌõÓï¾äµÄ״̬. µÈЧÓÚ"exit $?".
return
returnÓÃÓÚº¯ÊýµÄ·µ»Ø, ËüÏòµ÷Óøú¯ÊýµÄ½Å±¾·µ»ØÒ»¸öÕûÊýÊýÖµ. Èôδ¸ø³ö¸ÃÊýÖµ, ĬÈÏ·µ»ØreturnǰִÐеÄ×îºóÒ»ÌõÃüÁîµÄ·µ»ØÖµ.
export
exportÓÃÀ´Ïòµ±Ç°shell»ò½Å±¾µÄ×Ó½ø³ÌÊä³ö±äÁ¿. °üÀ¨×Ó½ø³ÌµÄ×Ó½ø³Ì, ÎÞÏÞǶÌ×...
±äÁ¿Ïà¹Ø
set
set±»ÓÃÀ´ÉèÖÃbashµÄÄÚÖñäÁ¿.
1, set¿É±»ÓÃÀ´ÖØÉèijÌõÃüÁîµÄλÖòÎÊý, ÀýÈç:
$ date
$ set $(date)
$ echo "the month is $2
the month is Jul
ÉÏÊöÃüÁλÖòÎÊýÉèÖÃΪÓëdateÃüÁîµÄÊä³öÏà¹Ø.
2, Ö±½Óµ÷ÓÃ$ set , ½«ÏÔʾËùÓеĻ·¾³±äÁ¿ºÍ¾Ö²¿±äÁ¿. ÔÚµ÷ÊÔbash½Å±¾ÖÐ, setÒ²´óÓÐÓÃÎäÖ®µØ.
unset
unset±»ÓÃÀ´É¾³ýÒ»¸ö±äÁ¿(¸Ã±äÁ¿µÄÖµ±»ÉèΪnull)
ÀýÈç:
$ unset PATH
$ echo $PATH
unset²»ÄÜɾ³ýbashÄÚ²¿¶¨ÒåµÄÖ»¶Á±äÁ¿, ±ÈÈçλÖòÎÊý.
$ unset foo Óë $ foo= µÄÇø±ð:
ºóÕßÖ»Êǽ«fooÉèÖÃΪnull, ǰÕß½«foo´Ó»·¾³±äÁ¿ÖÐɾ³ý.
ÃüÁîµÄÖ´ÐÐ
ÔÚ±àд½Å±¾Ê±, ÎÒÃÇʱ³£ÐèÒªÔڽű¾ÖÐÓõ½ÃüÁîÖ´ÐеĽá¹û, ¼´½«±äÁ¿Ö´ÐеĽá¹û·Åµ½Ò»¸ö±äÁ¿ÖÐ. Õâͨ¹ý$(command)À´ÊµÏÖ.
| һЩÀϽű¾ÖÐÀûÓÃ$`command`¶ø·Ç$ (command), ×¢ÒâÊÇ`(escÏÂÃæµÄÄǸö¼üÅÌ)¶ø·Ç'(Ç¿ÒýÓÃ)! ×îºÃʹÓÃ$ (command). |
$ (command)¼´ÎªcommandÖ´ÐеĽá¹û, Àý:
$ echo "the current dir is $PWD"
$ echo "the date is $(date)"
µ±È», Ò²¿ÉÒÔ½«ÃüÁîÖ´ÐеĽá¹û¸³¸øÒ»¸ö±äÁ¿:
$ DATE=$(date)
$ echo $DATE


