ºìÁªLinuxÃÅ»§
Linux°ïÖú

linux bash shell±à³Ì»ù´¡

·¢²¼Ê±¼ä:2009-12-24 18:27:43À´Ô´:ºìÁª×÷Õß:yun88
ͨ³£Çé¿öÏ£¬ÎÒÃÇ´ÓÃüÁîÐÐÊäÈëÃüÁîÿÊäÈëÒ»´Î¾ÍÄܹ»µÃµ½ÏµÍ³µÄÒ»´ÎÏìÓ¦¡£Ò»µ©ÐèÒªÎÒÃÇÒ»¸ö½Ó×ÅÒ»¸öµÄÊäÈëÃüÁî¶ø×îºó²ÅµÃµ½½á¹ûµÄʱºò£¬ÕâÑùµÄ×ö·¨ÏÔÈ»¾ÍûÓÐЧÂÊ¡£Òª´ïµ½ÕâÑùµÄÄ¿µÄ£¬Í¨³£ÎÒÃÇÀûÓÃshell³ÌÐò»òÕßshell½Å±¾À´ÊµÏÖ¡£

¡¡¡¡Ò»¡¢¼ò½é

¡¡¡¡Shell±à³ÌÓкܶàÀàËÆCÓïÑÔºÍÆäËû³ÌÐòÓïÑÔµÄÌØÕ÷£¬µ«ÊÇÓÖûÓбà³ÌÓïÑÔÄÇÑù¸´ÔÓ¡£Shell³ÌÐò¾ÍÊÇ·ÅÔÚÒ»¸öÎļþÖеÄһϵÁÐLinuxÃüÁîºÍʵÓóÌÐò£¬ÔÚÖ´ÐеÄʱºò£¬Í¨¹ýLinuxÒ»¸ö½Ó×ÅÒ»¸öµØ½âÊͺÍÖ´ÐÐÿ¸öÃüÁî¡£

¡¡¡¡ÏÂÃæÎÒÃÇÀ´¿´Ò»¸ö¼òµ¥µÄshell³ÌÐò£º

¡¡¡¡1¡¢Ê×ÏȽ¨Á¢Ò»¸öÄÚÈÝÈçϵÄÎļþ£¬Ãû×ÖΪdate,½«Æä´æ·ÅÔÚĿ¼ÏµÄbin×ÓĿ¼ÖС£

¡¡¡¡#Program date

¡¡¡¡#usageto ::show the date in this way (×¢ÊÍ)

¡¡¡¡echo ¡°Mr.$USER,Today is:¡±

¡¡¡¡echo date ¡°+%B%d%A¡±

¡¡¡¡echo ¡°Whish you a lucky day !¡±

¡¡¡¡2¡¢±à¼­Íê¸ÃÎļþÖ®ºóËü»¹²»ÄÜÖ´ÐУ¬ÎÒÃÇÐèÒª¸øËüÉèÖÿÉÖ´ÐÐȨÏÞ¡£Ê¹ÓÃÈçÏÂÃüÁ

¡¡¡¡chmod +x date

¡¡¡¡Í¨¹ýÒÔÉϹý³ÌÖ®ºó£¬ÎÒÃǾͿÉÒÔÏñʹÓÃlsÃüÁîÒ»ÑùÖ´ÐÐÕâ¸öshell³ÌÐò.

¡¡¡¡[beichen@localhost bin]$ date

¡¡¡¡Mr.beichen,Today is:

¡¡¡¡January 13 Friday

¡¡¡¡Whish you a lucky day !

¡¡¡¡ÎªÁËÔÚÈκÎĿ¼Àï¶¼¿ÉÒÔÖ´ÐÐÕâ¸ö³ÌÐò£¬¿ÉÒÔ½«binµÄÕâ¸öĿ¼Ìí¼Óµ½Â·¾¶ÖÐÈ¥¡£

¡¡¡¡[beichen@localhost bin]$ PATH=$PATH:$HOME/bin

¡¡¡¡(×¢£ºÕâÀïµÄ$HOME´úÌæµÄÊÇ/home/beichen,¶øbinĿ¼ÊÇ×Ô¼º½¨µÄÒ»¸öĿ¼)

¡¡¡¡ÁíÍâÒ»ÖÖÖ´ÐÐdateµÄ·½·¨¾ÍÊǰÑËü×÷Ϊһ¸ö²ÎÊý´«¸øshellÃüÁî:

¡¡¡¡[beichen@localhost /]$ bash date

¡¡¡¡Mr.beichen,Today is:

¡¡¡¡January 13 Friday

¡¡¡¡Whish you a lucky day !

¡¡¡¡¾¡¹ÜÔÚÇ°ÃæÎÒÃÇʹÓÃchmod +x date½«dateÉèÖÃΪ¿ÉÖ´ÐУ¬Æäʵ²»ÉèÖÃҲûÓйØÏµ£¬µ«ÔÚLinuxÀïÖ´ÐÐËü£¬ÐèÒªÏȸæËßϵͳËüÊÇÒ»¸ö¿ÉÖ´ÐеĽű¾¡£

¡¡¡¡[beichen@localhost /]$ .date

¡¡¡¡Mr.beichen,Today is:

¡¡¡¡January 13 Friday

¡¡¡¡Whish you a lucky day !

¡¡¡¡¼´ÔÚdateÇ°Ãæ¼ÓÉÏÒ»¸öµã¡±.¡±£¬²¢ÇÒÓÿոñÓëºóÃæµÄshell½Å±¾µÄÎļþÃû¸ô¿ª¡£µ±È»£¬²»ÍƼöÕâÑù×ö¡£

¡¡¡¡¶þ¡¢shell²ÎÊý

¡¡¡¡Èçͬls ÃüÁî¿ÉÒÔ½ÓÊÜĿ¼µÈ×÷ΪËüµÄ²ÎÊýÒ»Ñù£¬ÔÚshell±à³ÌʱͬÑù¿ÉÒÔʹÓòÎÊý¡£ShellÓÐλÖòÎÊýºÍÄÚ²¿²ÎÊý¡£

¡¡¡¡1¡¢ λÖòÎÊý

¡¡¡¡ÓÉϵͳÌṩµÄ²ÎÊý³ÆÎªÎ»ÖòÎÊý¡£Î»ÖòÎÊýµÄÖµ¿ÉÒÔÓÃ$NµÃµ½£¬NÊÇÒ»¸öÊý×Ö£¬Èç¹ûΪ1£¬¼´$1.ÀàËÆCÓïÑÔÖеÄÊý×飬Linux»á°ÑÊäÈëµÄÃüÁî×Ö·û´®·Ö¶Î²¢¸øÃ¿¶Î½øÐбêºÅ£¬±êºÅ´Ó0¿ªÊ¼¡£µÚ0ºÅΪ³ÌÐòÃû×Ö£¬´Ó1¿ªÊ¼¾Í±íʾ´«µÝ¸ø³ÌÐòµÄ²ÎÊý¡£Èç$0±íʾ³ÌÐòµÄÃû×Ö£¬$1±íʾ´«µÝ¸ø³ÌÐòµÄµÚÒ»¸ö²ÎÊý£¬ÒÔ´ËÀàÍÆ¡£

¡¡¡¡2¡¢ ÄÚ²¿²ÎÊý

¡¡¡¡ÉÏÊö¹ý³ÌÖеÄ$0ÊÇÒ»¸öÄÚ²¿±äÁ¿£¬ËüÊDZØÐëµÄ£¬¶ø$1Ôò¿ÉÓпÉÎÞ¡£ºÍ$0Ò»ÑùµÄÄÚ²¿±äÁ¿»¹ÓÐÒÔϼ¸¸ö¡£

¡¡¡¡$# ----´«µÝ¸ø³ÌÐòµÄ×ܵIJÎÊýÊýÄ¿

¡¡¡¡$? ----ÉÏÒ»¸ö´úÂë»òÕßshell³ÌÐòÔÚshellÖÐÍ˳öµÄÇé¿ö£¬Èç¹ûÕý³£Í˳öÔò·µ»Ø0£¬·´Ö®Îª·Ç0Öµ¡£

¡¡¡¡$* ----´«µÝ¸ø³ÌÐòµÄËùÓвÎÊý×é³ÉµÄ×Ö·û´®¡£

¡¡¡¡ÏÂÃæ¾ÙÀý½øÐÐ˵Ã÷£º

¡¡¡¡½¨Á¢Ò»¸öÄÚÈÝΪÈçϵijÌÐòP1:

¡¡¡¡echo ¡°Program name is $0¡±

¡¡¡¡echo ¡°There are totally $# parameters passed to this program¡±

¡¡¡¡echo ¡°The last is $?¡±

¡¡¡¡echo ¡°The parameters are $*¡±

¡¡¡¡Ö´ÐкóµÄ½á¹ûÈçÏ£º

¡¡¡¡[beichen@localhost bin]$ P1 this is a test program //´«µÝ5¸ö²ÎÊý

¡¡¡¡Program name is /home/beichen/bin/P1 //¸ø³ö³ÌÐòµÄÍêÕû·¾¶ºÍÃû×Ö

¡¡¡¡There are totally 5 parameters passed to this program //²ÎÊýµÄ×ÜÊý

¡¡¡¡The last is 0 //³ÌÐòÖ´Ðнá¹û

¡¡¡¡The parameters are this is a test program //·µ»ØÓвÎÊý×é³ÉµÄ×Ö·û´®


ÓÐʱ£¬Óм¸ÖÖ²»Í¬·½·¨À´½øÐÐÌØ¶¨±È½Ï¡£ÀýÈ磬ÒÔÏÂÁ½¸ö´úÂë¶ÎµÄ¹¦ÄÜÏàͬ£º

if [ "$myvar" -eq 3 ]
then
echo "myvar equals 3"
fi
if [ "$myvar" = "3" ]
then
echo "myvar equals 3"
fi



ÉÏÃæÁ½¸ö±È½ÏÖ´ÐÐÏàͬµÄ¹¦ÄÜ£¬µ«ÊǵÚÒ»¸öʹÓÃËãÊõ±È½ÏÔËËã·û£¬¶øµÚ¶þ¸öʹÓÃ×Ö·û´®±È½ÏÔËËã·û¡£

×Ö·û´®±È½Ï˵Ã÷

´ó¶àÊýʱºò£¬ËäÈ»¿ÉÒÔ²»Ê¹ÓÃÀ¨Æð×Ö·û´®ºÍ×Ö·û´®±äÁ¿µÄË«ÒýºÅ£¬µ«Õâ²¢²»ÊǺÃÖ÷Òâ¡£ÎªÊ²Ã´ÄØ£¿ÒòΪÈç¹û»·¾³±äÁ¿ÖÐÇ¡ÇÉÓÐÒ»¸ö¿Õ¸ñ»òÖÆ±í¼ü£¬bash ½«ÎÞ·¨·Ö±æ£¬´Ó¶øÎÞ·¨Õý³£¹¤×÷¡£ÕâÀïÓÐÒ»¸ö´íÎóµÄ±È½ÏʾÀý£º

if [ $myvar = "foo bar oni" ]
then
echo "yes"
fi



ÔÚÉÏÀýÖУ¬Èç¹û myvar µÈÓÚ "foo"£¬Ôò´úÂ뽫°´Ô¤Ï빤×÷£¬²»½øÐдòÓ¡¡£µ«ÊÇ£¬Èç¹û myvar µÈÓÚ "foo bar oni"£¬Ôò´úÂ뽫ÒòÒÔÏ´íÎóʧ°Ü£º

[: too many arguments



ÔÚÕâÖÖÇé¿öÏ£¬"$myvar"£¨µÈÓÚ "foo bar oni"£©ÖеĿոñÃÔ»óÁË bash¡£bash À©Õ¹ "$myvar" Ö®ºó£¬´úÂëÈçÏ£º

[ foo bar oni = "foo bar oni" ]



ÒòΪ»·¾³±äÁ¿Ã»·ÅÔÚË«ÒýºÅÖУ¬ËùÒÔ bash ÈÏΪ·½À¨ºÅÖеÄ×Ô±äÁ¿¹ý¶à¡£¿ÉÒÔÓÃË«ÒýºÅ½«×Ö·û´®×Ô±äÁ¿À¨ÆðÀ´Ïû³ý¸ÃÎÊÌâ¡£Çë¼Çס£¬Èç¹ûÑø³É½«ËùÓÐ×Ö·û´®×Ô±äÁ¿ÓÃË«ÒýºÅÀ¨ÆðµÄϰ¹ß£¬½«³ýÈ¥ºÜ¶àÀàËÆµÄ±à³Ì´íÎó¡£"foo bar oni" ±È½Ï Ó¦¸Ãд³É£º

if [ "$myvar" = "foo bar oni" ]
then
echo "yes"
fi


¸ü¶àÒýÓÃϸ½Ú

Èç¹ûÒªÀ©Õ¹»·¾³±äÁ¿£¬Ôò±ØÐ뽫ËüÃÇÓà ˫ÒýºÅ¡¢¶ø²»Êǵ¥ÒýºÅÀ¨Æð¡£µ¥ÒýºÅ ½ûÓà ±äÁ¿£¨ºÍÀúÊ·£©À©Õ¹¡£



ÒÔÉÏ´úÂ뽫°´Ô¤Ï빤×÷£¬¶ø²»»áÓÐÈκÎÁîÈ˲»¿ìµÄÒâÍâ³öÏÖ¡£

Ñ­»·½á¹¹£º"for"

ºÃÁË£¬ÒѾ­½²ÁËÌõ¼þÓï¾ä£¬ÏÂÃæ¸Ã̽Ë÷ bash Ñ­»·½á¹¹ÁË¡£ÎÒÃǽ«´Ó±ê×¼µÄ "for" Ñ­»·¿ªÊ¼¡£ÕâÀïÓÐÒ»¸ö¼òµ¥µÄÀý×Ó£º

#!/usr/bin/env bash
for x in one two three four
do
echo number $x
done
Êä³ö£º
number one
number two
number three
number four



·¢ÉúÁËʲô£¿"for" Ñ­»·ÖÐµÄ "for x" ²¿·Ö¶¨ÒåÁËÒ»¸öÃûΪ "$x" µÄл·¾³±äÁ¿£¨Ò²³ÆÎªÑ­»·¿ØÖƱäÁ¿£©£¬ËüµÄÖµ±»ÒÀ´ÎÉèÖÃΪ "one"¡¢"two"¡¢"three" ºÍ "four"¡£Ã¿Ò»´Î¸³ÖµÖ®ºó£¬Ö´ÐÐÒ»´ÎÑ­»·Ì壨"do" ºÍ "done" Ö®¼äµÄ´úÂ룩¡£ÔÚÑ­»·ÌåÄÚ£¬ÏóÆäËü»·¾³±äÁ¿Ò»Ñù£¬Ê¹Óñê×¼µÄ±äÁ¿À©Õ¹Óï·¨À´ÒýÓÃÑ­»·¿ØÖƱäÁ¿ "$x"¡£»¹Òª×¢Ò⣬"for" Ñ­»·×ÜÊǽÓÊÕ "in" Óï¾äÖ®ºóµÄijÖÖÀàÐ͵Ä×ÖÁÐ±í¡£ÔÚ±¾ÀýÖУ¬Ö¸¶¨ÁËËĸöÓ¢Óïµ¥´Ê£¬µ«ÊÇ×ÖÁбíÒ²¿ÉÒÔÒýÓôÅÅÌÉϵÄÎļþ£¬ÉõÖÁÎļþͨÅä·û¡£¿´¿´ÏÂÃæµÄÀý×Ó£¬¸ÃÀýÑÝʾÈçºÎʹÓñê×¼ shell ͨÅä·û£º

#!/usr/bin/env bash
for myfile in /etc/r*
do
if [ -d "$myfile" ]
then
echo "$myfile (dir)"
else
echo "$myfile"
fi
done
Êä³ö£º
/etc/rc.d (dir)
/etc/resolv.conf
/etc/resolv.conf~
/etc/rpc



ÒÔÉÏ´úÂëÁгöÔÚ /etc ÖÐÿ¸öÒÔ "r" ¿ªÍ·µÄÎļþ¡£Òª×öµ½Õâµã£¬bash ÔÚÖ´ÐÐÑ­»·Ö®Ç°Ê×ÏÈÈ¡µÃͨÅä·û /etc/r*£¬È»ºóÀ©Õ¹Ëü£¬ÓÃ×Ö·û´® /etc/rc.d /etc/resolv.conf /etc/resolv.conf~ /etc/rpc Ìæ»»¡£Ò»µ©½øÈëÑ­»·£¬¸ù¾Ý myfile ÊÇ·ñΪĿ¼£¬"-d" Ìõ¼þÔËËã·ûÓÃÀ´Ö´ÐÐÁ½¸ö²»Í¬²Ù×÷¡£Èç¹ûÊÇĿ¼£¬Ôò½« "(dir)" ¸½¼Óµ½Êä³öÐС£


»¹¿ÉÒÔÔÚ×ÖÁбíÖÐʹÓöà¸öͨÅä·û¡¢ÉõÖÁÊÇ»·¾³±äÁ¿£º

for x in /etc/r--? /var/lo* /home/drobbins/mystuff/* /tmp/${MYPATH}/*
do
cp $x /mnt/mydir
done



Bash ½«ÔÚËùÓÐÕýȷλÖÃÉÏÖ´ÐÐͨÅä·ûºÍ»·¾³±äÁ¿À©Õ¹£¬²¢¿ÉÄÜ´´½¨Ò»¸ö·Ç³£³¤µÄ×ÖÁÐ±í¡£

ËäÈ»ËùÓÐͨÅä·ûÀ©Õ¹Ê¾ÀýʹÓÃÁË ¾ø¶Ô·¾¶£¬µ«Ò²¿ÉÒÔʹÓÃÏà¶Ô·¾¶£¬ÈçÏÂËùʾ£º

for x in ../* mystuff/*
do
echo $x is a silly file
done



ÔÚÉÏÀýÖУ¬bash Ïà¶ÔÓÚµ±Ç°¹¤×÷Ŀ¼ִÐÐͨÅä·ûÀ©Õ¹£¬¾ÍÏóÔÚÃüÁîÐÐÖÐʹÓÃÏà¶Ô·¾¶Ò»Ñù¡£Ñо¿Ò»ÏÂͨÅä·ûÀ©Õ¹¡£Äú½«×¢Òâµ½£¬Èç¹ûÔÚͨÅä·ûÖÐʹÓþø¶Ô·¾¶£¬bash ½«Í¨Åä·ûÀ©Õ¹³ÉÒ»¸ö¾ø¶Ô·¾¶ÁÐ±í¡£·ñÔò£¬bash ½«ÔÚºóÃæµÄ×ÖÁбíÖÐʹÓÃÏà¶Ô·¾¶¡£Èç¹ûÖ»ÒýÓõ±Ç°¹¤×÷Ŀ¼ÖеÄÎļþ£¨ÀýÈ磬Èç¹ûÊäÈë "for x in *"£©£¬Ôò²úÉúµÄÎļþÁÐ±í½«Ã»Óз¾¶ÐÅÏ¢µÄǰ׺¡£Çë¼Çס£¬¿ÉÒÔʹÓà "basename" ¿ÉÖ´ÐгÌÐòÀ´³ýÈ¥Ç°ÃæµÄ·¾¶ÐÅÏ¢£¬ÈçÏÂËùʾ£º

for x in /var/log/*
do
echo `basename $x` is a file living in /var/log
done



µ±È»£¬Ôڽű¾µÄÃüÁîÐÐ×Ô±äÁ¿ÉÏÖ´ÐÐÑ­»·Í¨³£ºÜ·½±ã¡£ÕâÀïÓÐÒ»¸öÈçºÎʹÓñ¾ÎÄ¿ªÊ¼Ìáµ½µÄ "$@" ±äÁ¿µÄÀý×Ó£º

#!/usr/bin/env bash
for thing in "$@"
do
echo you typed ${thing}.
done
Êä³ö£º
$ allargs hello there you silly
you typed hello.
you typed there.
you typed you.
you typed silly.



Shell ËãÊõ

ÔÚѧϰÁíÒ»ÀàÐ͵ÄÑ­»·½á¹¹Ö®Ç°£¬×îºÃÏÈÊìϤÈçºÎÖ´ÐÐ shell ËãÊõ¡£Êǵģ¬È·ÊµÈç´Ë£º¿ÉÒÔʹÓà shell ½á¹¹À´Ö´Ðмòµ¥µÄÕûÊýÔËËã¡£Ö»Ðè½«ÌØ¶¨µÄËãÊõ±í´ïʽÓà "$((" ºÍ "))" À¨Æð£¬bash ¾Í¿ÉÒÔ¼ÆËã±í´ïʽ¡£ÕâÀïÓÐһЩÀý×Ó£º

$ echo $(( 100 / 3 ))
33
$ myvar="56"
$ echo $(( $myvar + 12 ))
68
$ echo $(( $myvar - $myvar ))
0 $ myvar=$(( $myvar + 1 ))
$ echo $myvar
57




¸ü¶àµÄÑ­»·½á¹¹£º"while" ºÍ "until"

Ö»ÒªÌØ¶¨Ìõ¼þÎªÕæ£¬"while" Óï¾ä¾Í»áÖ´ÐУ¬Æä¸ñʽÈçÏ£º

while [ condition ]
do
statements
done



ͨ³£Ê¹Óà "While" Óï¾äÀ´Ñ­»·Ò»¶¨´ÎÊý£¬±ÈÈ磬ÏÂÀý½«Ñ­»· 10 ´Î£º

myvar=0
while [ $myvar -ne 10 ]
do
echo $myvar
myvar=$(( $myvar + 1 ))
done



¿ÉÒÔ¿´µ½£¬ÉÏÀýʹÓÃÁËËãÊõ±í´ïʽÀ´Ê¹Ìõ¼þ×îÖÕΪ¼Ù£¬²¢µ¼ÖÂÑ­»·ÖÕÖ¹¡£

"Until" Óï¾äÌṩÁËÓë "while" Óï¾äÏà·´µÄ¹¦ÄÜ£ºÖ»ÒªÌض¨Ìõ¼þΪ ¼Ù £¬ËüÃǾÍÖØ¸´¡£ÏÂÃæÊÇÒ»¸öÓëÇ°ÃæµÄ "while" Ñ­»·¾ßÓÐͬµÈ¹¦ÄÜµÄ "until" Ñ­»·£º

myvar=0
until [ $myvar -eq 10 ]
do
echo $myvar
myvar=$(( $myvar + 1 ))
done



Case Óï¾ä

Case Óï¾äÊÇÁíÒ»ÖÖ±ãÀûµÄÌõ¼þ½á¹¹¡£ÕâÀïÓÐÒ»¸öʾÀýƬ¶Î£º

case "${x##*.}" in
gz)
gzunpack ${SROOT}/${x}
;;
bz2)
bz2unpack ${SROOT}/${x}
;;
*)
echo "Archive format not recognized."
exit
;;
esac



ÔÚÉÏÀýÖУ¬bash Ê×ÏÈÀ©Õ¹ "${x##*.}"¡£ÔÚ´úÂëÖУ¬"$x" ÊÇÎļþµÄÃû³Æ£¬"${x##.*}" ³ýÈ¥ÎļþÖÐ×îºó¾äµãºóÎı¾Ö®ÍâµÄËùÓÐÎı¾¡£È»ºó£¬bash ½«²úÉúµÄ×Ö·û´®Óë ")" ×ó±ßÁгöµÄÖµ×ö±È½Ï¡£ÔÚ±¾ÀýÖУ¬"${x##.*}" ÏÈÓë "gz" ±È½Ï£¬È»ºóÊÇ "bz2"£¬×îºóÊÇ "*"¡£Èç¹û "${x##.*}" ÓëÕâЩ×Ö·û´®»òģʽÖеÄÈκÎÒ»¸öÆ¥Å䣬ÔòÖ´Ðнô½Ó ")" Ö®ºóµÄÐУ¬Ö±µ½ ";;" Ϊֹ£¬È»ºó bash ¼ÌÐøÖ´ÐнáÊø·û "esac" Ö®ºóµÄÐС£Èç¹û²»Æ¥ÅäÈκÎģʽ»ò×Ö·û´®£¬Ôò²»Ö´ÐÐÈκδúÂëÐУ¬ÔÚÕâ¸öÌØÊâµÄ´úÂëÆ¬¶ÎÖУ¬ÖÁÉÙÒªÖ´ÐÐÒ»¸ö´úÂë¿é£¬ÒòΪÈκβ»Óë "gz" »ò "bz2" Æ¥ÅäµÄ×Ö·û´®¶¼½«Óë "*" ģʽƥÅä¡£


ÔÚ bash ÖУ¬ÉõÖÁ¿ÉÒÔ¶¨ÒåÓëÆäËü¹ý³ÌÓïÑÔ£¨Èç Pascal ºÍ C£©ÀàËÆµÄº¯Êý¡£ÔÚ bash ÖУ¬º¯ÊýÉõÖÁ¿ÉÒÔʹÓÃÓë½Å±¾½ÓÊÕÃüÁîÐÐ×Ô±äÁ¿ÀàËÆµÄ·½Ê½À´½ÓÊÕ×Ô±äÁ¿¡£ÈÃÎÒÃÇ¿´Ò»ÏÂÑù±¾º¯Êý¶¨Ò壬ȻºóÔÙ´ÓÄÇÀï¼ÌÐø£º

tarview() {
echo -n "Displaying contents of $1 "
if [ ${1##*.} = tar ]
then
echo "(uncompressed tar)"
tar tvf $1
elif [ ${1##*.} = gz ]
then
echo "(gzip-compressed tar)"
tar tzvf $1
elif [ ${1##*.} = bz2 ]
then
echo "(bzip2-compressed tar)"
cat $1 | bzip2 -d | tar tvf -
fi
}


ÁíÒ»ÖÖÇé¿ö

¿ÉÒÔʹÓà "case" Óï¾äÀ´±àдÉÏÃæµÄ´úÂë¡£ÄúÖªµÀÈçºÎ±àдÂð£¿



ÎÒÃÇÔÚÉÏÃæ¶¨ÒåÁËÒ»¸öÃûΪ "tarview" µÄº¯Êý£¬Ëü½ÓÊÕÒ»¸ö×Ô±äÁ¿£¬¼´Ä³ÖÖÀàÐ굀 tar Îļþ¡£ÔÚÖ´Ðиú¯Êýʱ£¬ËüÈ·¶¨×Ô±äÁ¿ÊÇÄÄÖÖ tar ÎļþÀàÐÍ£¨Î´Ñ¹ËõµÄ¡¢gzip ѹËõµÄ»ò bzip2 ѹËõµÄ£©£¬´òÓ¡Ò»ÐÐÐÅÏ¢ÐÔÏûÏ¢£¬È»ºóÏÔʾ tar ÎļþµÄÄÚÈÝ¡£Ó¦¸ÃÈçϵ÷ÓÃÉÏÃæµÄº¯Êý£¨ÔÚÊäÈë¡¢Õ³Ìù»òÕÒµ½¸Ãº¯Êýºó£¬´Ó½Å±¾»òÃüÁîÐе÷ÓÃËü£©£º

$ tarview shorten.tar.gz
Displaying contents of shorten.tar.gz (gzip-compressed tar)
drwxr-xr-x ajr/abbot 0 1999-02-27 16:17 shorten-2.3a/
-rw-r--r-- ajr/abbot 1143 1997-09-04 04:06 shorten-2.3a/Makefile
-rw-r--r-- ajr/abbot 1199 1996-02-04 12:24 shorten-2.3a/INSTALL
-rw-r--r-- ajr/abbot 839 1996-05-29 00:19 shorten-2.3a/LICENSE
....


½»»¥µØÊ¹ÓÃËüÃÇ

±ðÍüÁË£¬¿ÉÒÔ½«º¯Êý£¨ÈçÉÏÃæµÄº¯Êý£©·ÅÔÚ ~/.bashrc »ò ~/.bash_profile ÖУ¬ÒÔ±ãÔÚ bash ÖÐËæÊ±Ê¹ÓÃËüÃÇ¡£



ÈçÄúËù¼û£¬¿ÉÒÔʹÓÃÓëÒýÓÃÃüÁîÐÐ×Ô±äÁ¿Í¬ÑùµÄ»úÖÆÀ´ÔÚº¯Êý¶¨ÒåÄÚ²¿ÒýÓÃ×Ô±äÁ¿¡£ÁíÍ⣬½«°Ñ "$#" ºêÀ©Õ¹³É°üº¬×Ô±äÁ¿µÄÊýÄ¿¡£Î¨Ò»¿ÉÄܲ»ÍêÈ«ÏàͬµÄÊDZäÁ¿ "$0"£¬Ëü½«À©Õ¹³É×Ö·û´® "bash"£¨Èç¹û´Ó shell ½»»¥ÔËÐк¯Êý£©»òµ÷Óú¯ÊýµÄ½Å±¾Ãû³Æ¡£

Ãû³Æ¿Õ¼ä

¾­³£ÐèÒªÔÚº¯ÊýÖд´½¨»·¾³±äÁ¿¡£ËäÈ»ÓпÉÄÜ£¬µ«ÊÇ»¹ÓÐÒ»¸ö¼¼Êõϸ½ÚÓ¦¸ÃÁ˽⡣ÔÚ´ó¶àÊý±àÒëÓïÑÔ£¨Èç C£©ÖУ¬µ±ÔÚº¯ÊýÄÚ²¿´´½¨±äÁ¿Ê±£¬±äÁ¿±»·ÅÖÃÔÚµ¥¶ÀµÄ¾Ö²¿Ãû³Æ¿Õ¼äÖС£Òò´Ë£¬Èç¹ûÔÚ C Öж¨ÒåÒ»¸öÃûΪ myfunction µÄº¯Êý£¬²¢Ôڸú¯ÊýÖж¨ÒåÒ»¸öÃûΪ "x" µÄ×Ô±äÁ¿£¬ÔòÈκÎÃûΪ "x" µÄÈ«¾Ö±äÁ¿£¨º¯ÊýÖ®ÍâµÄ±äÁ¿£©½«²»ÊÜËüµÄÓ¡Ï󣬴ӶøÏû³ýÁ˸º×÷Óá£

ÔÚ C ÖÐÊÇÕâÑù£¬µ«ÔÚ bash ÖÐÈ´²»ÊÇ¡£ÔÚ bash ÖУ¬Ã¿µ±ÔÚº¯ÊýÄÚ²¿´´½¨»·¾³±äÁ¿£¬¾Í½«ÆäÌí¼Óµ½ È«¾ÖÃû³Æ¿Õ¼ä¡£ÕâÒâζ×Å£¬¸Ã±äÁ¿½«ÖØÐ´º¯ÊýÖ®ÍâµÄÈ«¾Ö±äÁ¿£¬²¢ÔÚº¯ÊýÍ˳öÖ®ºó¼ÌÐø´æÔÚ£º

#!/usr/bin/env bash
myvar="hello"
myfunc() {
myvar="one two three"
for x in $myvar
do
echo $x
done
}
myfunc
echo $myvar $x



ÔËÐд˽ű¾Ê±£¬Ëü½«Êä³ö "one two three three"£¬ÕâÏÔʾÁËÔÚº¯ÊýÖж¨ÒåµÄ "$myvar" ÈçºÎÓ°ÏìÈ«¾Ö±äÁ¿ "$myvar"£¬ÒÔ¼°Ñ­»·¿ØÖƱäÁ¿ "$x" ÈçºÎÔÚº¯ÊýÍ˳öÖ®ºó¼ÌÐø´æÔÚ£¨Èç¹û "$x" È«¾Ö±äÁ¿´æÔÚ£¬Ò²½«Êܵ½Ó°Ï죩¡£

ÔÚÕâ¸ö¼òµ¥µÄÀý×ÓÖУ¬ºÜÈÝÒ×ÕÒµ½¸Ã´íÎ󣬲¢Í¨¹ýʹÓÃÆäËü±äÁ¿ÃûÀ´¸ÄÕý´íÎó¡£µ«Õâ²»ÊÇÕýÈ·µÄ·½·¨£¬½â¾ö´ËÎÊÌâµÄ×îºÃ·½·¨ÊÇͨ¹ýʹÓà "local" ÃüÁÔÚÒ»¿ªÊ¼¾ÍÔ¤·ÀÓ°ÏìÈ«¾Ö±äÁ¿µÄ¿ÉÄÜÐÔ¡£µ±Ê¹Óà "local" ÔÚº¯ÊýÄÚ²¿´´½¨±äÁ¿Ê±£¬½«°ÑËüÃÇ·ÅÔÚ ¾Ö²¿Ãû³Æ¿Õ¼äÖУ¬²¢ÇÒ²»»áÓ°ÏìÈκÎÈ«¾Ö±äÁ¿¡£ÕâÀïÑÝʾÁËÈçºÎʵÏÖÉÏÊö´úÂ룬ÒÔ±ã²»ÖØÐ´È«¾Ö±äÁ¿£º

#!/usr/bin/env bash
myvar="hello"
myfunc() {
local x
local myvar="one two three"
for x in $myvar
do
echo $x
done
}
myfunc
echo $myvar $x



´Ëº¯Êý½«Êä³ö "hello" -- ²»ÖØÐ´È«¾Ö±äÁ¿ "$myvar"£¬"$x" ÔÚ myfunc Ö®Íâ²»¼ÌÐø´æÔÚ¡£ÔÚº¯ÊýµÄµÚÒ»ÐУ¬ÎÒÃÇ´´½¨ÁËÒÔºóҪʹÓõľֲ¿±äÁ¿ x£¬¶øÔÚµÚ¶þ¸öÀý×Ó (local myvar="one two three"") ÖУ¬ÎÒÃÇ´´½¨Á˾ֲ¿±äÁ¿ myvar£¬ ͬʱ ΪÆä¸³Öµ¡£ÔÚ½«Ñ­»·¿ØÖƱäÁ¿¶¨ÒåΪ¾Ö²¿±äÁ¿Ê±£¬Ê¹ÓõÚÒ»ÖÖÐÎʽºÜ·½±ã£¬ÒòΪ²»ÔÊÐí˵£º"for local x in $myvar"¡£´Ëº¯Êý²»Ó°ÏìÈκÎÈ«¾Ö±äÁ¿£¬¹ÄÀøÄúÓÃÕâÖÖ·½Ê½Éè¼ÆËùÓеĺ¯Êý¡£Ö»ÓÐÔÚÃ÷È·Ï£ÍûÒªÐÞ¸ÄÈ«¾Ö±äÁ¿Ê±£¬²Å ²»Ó¦¸ÃʹÓà "local"¡£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 14 ÌõÆÀÂÛ

  1. ССMavis ÓÚ 2010-10-21 16:06:56·¢±í:

    ѧϰ¡£¡£¡£
    лл·ÖÏí£¡

  2. xsmsammy ÓÚ 2010-10-11 16:24:52·¢±í:

    лл¥Ö÷£¡
    Â¥Ö÷Ôõô²»°ÑËüÕûÀí³ÉÒ»¸öÎĵµ·¢³öÀ´ÄØ£¿

  3. ѩɽʨ×Ó ÓÚ 2010-10-11 14:18:39·¢±í:

    ѧϰһ

  4. ÍõÎĹû ÓÚ 2010-10-08 19:42:14·¢±í:

    Ϊʲôwhile¡¾¡£¡£-ne¡£¡£¡£¡¿
    ÌáÊÇ´íÎóÄØ

  5. siwangzhid ÓÚ 2010-10-07 21:51:11·¢±í:

    ºÃ£¬ºÜºÃ£¬·Ç³£ºÃ

  6. windnest ÓÚ 2010-10-05 10:28:55·¢±í:

    ¼´ÔÚdateÇ°Ãæ¼ÓÉÏÒ»¸öµã¡±.¡±£¬²¢ÇÒÓÿոñÓëºóÃæµÄshell½Å±¾µÄÎļþÃû¸ô¿ª¡£µ±È»£¬²»ÍƼöÕâÑù×ö¡£
    Õâ¾ä²»ÍƼöµÄÔ­ÒòÊÇʲô£¿ÊDz»ÊÇÒòΪ¸úÒþ²ØÎļþÓйأ¿£¿Äܲ»ÄܽâÊÍһϣ¬Ð»Ð»ÁË

  7. kingswim ÓÚ 2010-03-16 12:38:47·¢±í:

    СÄñ·¹ú

  8. ÁåÁå ÓÚ 2010-01-06 13:31:09·¢±í:

    Óе㸴ÔÓ

  9. damh001 ÓÚ 2010-01-05 11:43:10·¢±í:

    ѧϰѧϰ

  10. alexander1984 ÓÚ 2010-01-02 21:55:58·¢±í:

    дµÄ²»´í£¬Í¦ºÃµÄÎÄÕÂ

  11. shuzhan87 ÓÚ 2009-12-26 17:21:28·¢±í:

    ѧϰѧϰ

  12. child7 ÓÚ 2009-12-25 09:02:01·¢±í:

    ѧϰÁË£¬ÊÕ²ØÏÂ

  13. ailove ÓÚ 2009-12-25 00:14:43·¢±í:

    Ç¿

  14. vdnuiv ÓÚ 2009-12-24 20:24:38·¢±í:

    ѧϰѧϰ