·¢²©ÎÄ
¸öÈË×ÊÁÏ
  • ²©¿Í·ÃÎÊ£º930585
  • ²©ÎÄÊýÁ¿£º95
  • ²©¿Í»ý·Ö£º10001
  • ²©¿ÍµÈ¼¶£ºÉϽ«
  • ¹Ø×¢ÈËÆø£º 1
  • ×¢²áʱ¼ä£º2006-02-15 11:11:45
¶©ÔÄÎҵIJ©¿Í
  • ¶©ÔÄ
  • ¶©Ôĵ½Ïʹû
  • ¶©Ôĵ½×¥Ïº
  • ¶©Ôĵ½Google
×ÖÌå´óС£º´ó ÖРС²©ÎÄ
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

LIMIT=19 # Upper limit

echo
echo "Printing Numbers 1 through 20 (but not 3 and 11)."

a=0

while [ $a -le "$LIMIT" ]
do
a=$(($a+1))

if [ "$a" -eq 3 ] || [ "$a" -eq 11 ] # Excludes 3 and 11.
then
continue # Skip rest of this particular loop iteration.
fi

echo -n "$a " # This will not execute for 3 and 11.
done

# Exercise:
# Why does loop print up to 20?

echo; echo

echo Printing Numbers 1 through 20, but something happens after 2.

##################################################################

# Same loop, but substituting 'break' for 'continue'.

a=0

while [ "$a" -le "$LIMIT" ]
do
a=$(($a+1))

if [ "$a" -gt 2 ]
then
break # Skip entire rest of loop.
fi

echo -n "$a "
done

echo; echo; echo

exit 0


: ÃüÁî
":"ÊÇÒ»¸ö¿ÕÃüÁî(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


ǰһƪ£ºbash±Ê¼Ç-04-º¯Êý
Ç×£¬Äú»¹Ã»ÓеǼ,Çë[µÇ¼]»ò[×¢²á]ºóÔÙ½øÐÐÆÀÂÛ