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

Linux Bash Shell¿ìËÙÈëÃÅ

·¢²¼Ê±¼ä:2010-09-21 16:59:03À´Ô´:ºìÁª×÷Õß:jackieban
BASH µÄ»ù±¾Óï·¨
• ×î¼òµ¥µÄÀý×Ó ---- Hello World!
• ¹ØÓÚÊäÈë¡¢Êä³öºÍ´íÎóÊä³ö
• BASH ÖжԱäÁ¿µÄ¹æ¶¨£¨Óë C ÓïÑÔµÄÒìͬ£©
• BASH ÖеĻù±¾Á÷³Ì¿ØÖÆÓï·¨
• º¯ÊýµÄʹÓÃ
2.1 ×î¼òµ¥µÄÀý×Ó ---- Hello World!
¼¸ºõËùÓеĽ²½â±à³ÌµÄÊ鏸¶ÁÕߵĵÚÒ»¸öÀý×Ó¶¼ÊÇ Hello World ³ÌÐò£¬ÄÇôÎÒÃǽñÌìÒ²¾Í´ÓÕâ¸öÀý×Ó³ö·¢£¬À´Öð²½Á˽â BASH¡£
Óà vi ±à¼­Æ÷±à¼­Ò»¸ö hello ÎļþÈçÏ£º

#!/bin/bash
# This is a very simple example
echo Hello World
ÕâÑù×î¼òµ¥µÄÒ»¸ö BASH ³ÌÐò¾Í±àдÍêÁË¡£ÕâÀïÓм¸¸öÎÊÌâÐèҪ˵Ã÷һϣº
Ò»£¬µÚÒ»ÐÐµÄ #! ÊÇʲôÒâ˼
¶þ£¬µÚÒ»ÐÐµÄ /bin/bash ÓÖÊÇʲôÒâ˼
Èý£¬µÚ¶þÐÐÊÇ×¢ÊÍÂð
ËÄ£¬echo Óï¾ä
Î壬ÈçºÎÖ´ÐиóÌÐò
#! ÊÇ˵Ã÷ hello Õâ¸öÎļþµÄÀàÐ͵ģ¬ÓеãÀàËÆÓÚ Windows ϵͳÏÂÓò»Í¬Îļþºó׺À´±íʾ²»Í¬ÎļþÀàÐ͵ÄÒâ˼£¨µ«²»Ïàͬ£©¡£Linux ϵͳ¸ù¾Ý "#!" ¼°¸Ã×Ö´®ºóÃæµÄÐÅϢȷ¶¨¸ÃÎļþµÄÀàÐÍ£¬¹ØÓÚÕâÒ»ÎÊÌâͬѧÃÇ»ØÈ¥ÒÔºó¿ÉÒÔͨ¹ý "man magic"ÃüÁî ¼° /usr/share/magic ÎļþÀ´Á˽âÕâ·½ÃæµÄ¸ü¶àÄÚÈÝ¡£ÔÚ BASH ÖÐ µÚÒ»ÐÐµÄ "#!" ¼°ºóÃæµÄ "/bin/bash" ¾Í±íÃ÷¸ÃÎļþÊÇÒ»¸ö BASH ³ÌÐò£¬ÐèÒªÓÉ /bin Ŀ¼Ï嵀 bash ³ÌÐòÀ´½âÊÍÖ´ÐС£BASH Õâ¸ö³ÌÐòÒ»°ãÊÇ´æ·ÅÔÚ /bin Ŀ¼Ï£¬Èç¹ûÄãµÄ Linux ϵͳ±È½ÏÌØ±ð£¬bash Ò²ÓпÉÄܱ»´æ·ÅÔÚ /sbin ¡¢/usr/local/bin ¡¢/usr/bin ¡¢/usr/sbin »ò /usr/local/sbin ÕâÑùµÄĿ¼Ï£»Èç¹û»¹ÕÒ²»µ½£¬Äã¿ÉÒÔÓà "locate bash" "find / -name bash 2> /dev/null" »ò "whereis bash" ÕâÈý¸öÃüÁîÕÒ³ö bash ËùÔÚµÄλÖã»Èç¹ûÈÔÈ»ÕÒ²»µ½£¬ÄÇÄã¿ÉÄÜÐèÒª×Ô¼º¶¯ÊÖ°²×°Ò»¸ö BASH Èí¼þ°üÁË¡£
µÚ¶þÐÐµÄ "# This is a ..." ¾ÍÊÇ BASH ³ÌÐòµÄ×¢ÊÍ£¬ÔÚ BASH ³ÌÐòÖдӡ°#¡±ºÅ£¨×¢Ò⣺ºóÃæ½ô½Ó×ÅÊÇ¡°!¡±ºÅµÄ³ýÍ⣩¿ªÊ¼µ½ÐÐβµÄ¶àÓв¿·Ö¾ù±»¿´×÷ÊdzÌÐòµÄ×¢ÊÍ¡£µÄÈýÐÐµÄ echo Óï¾äµÄ¹¦ÄÜÊÇ°Ñ echo ºóÃæµÄ×Ö·û´®Êä³öµ½±ê×¼Êä³öÖÐÈ¥¡£ÓÉÓÚ echo ºó¸úµÄÊÇ "Hello World" Õâ¸ö×Ö·û´®£¬Òò´Ë "Hello World"Õâ¸ö×Ö´®¾Í±»ÏÔʾÔÚ¿ØÖÆÌ¨ÖÕ¶ËµÄÆÁÄ»ÉÏÁË¡£ÐèҪעÒâµÄÊÇ BASH Öеľø´ó¶àÊýÓï¾ä½áβ´¦¶¼Ã»Óзֺš£
ÈçºÎÖ´ÐиóÌÐòÄØ£¿ÓÐÁ½ÖÖ·½·¨£ºÒ»ÖÖÊÇÏÔÊ½ÖÆ¶¨ BASH È¥Ö´ÐУº
$ bash hello »ò
$ sh hello £¨ÕâÀï sh ÊÇÖ¸Ïò bash µÄÒ»¸öÁ´½Ó£¬¡°lrwxrwxrwx 1 root root 4 Aug 20 05:41 /bin/sh -> bash¡±£©
»òÕß¿ÉÒÔÏȽ« hello Îļþ¸ÄΪ¿ÉÒÔÖ´ÐеÄÎļþ£¬È»ºóÖ±½ÓÔËÐÐËü£¬´ËʱÓÉÓÚ hello ÎļþµÚÒ»ÐÐµÄ "#! /bin/bash" µÄ×÷Óã¬ÏµÍ³»á×Ô¶¯ÓÃ/bin/bash ³ÌÐòÈ¥½âÊÍÖ´ÐÐ hello ÎļþµÄ£º
$ chmod u+x hello
$ ./hello
´Ë´¦Ã»ÓÐÖ±½Ó ¡°$ hello¡±ÊÇÒòΪµ±Ç°Ä¿Â¼²»Êǵ±Ç°Óû§¿ÉÖ´ÐÐÎļþµÄĬÈÏĿ¼£¬¶ø½«µ±Ç°Ä¿Â¼¡°.¡±ÉèΪĬÈÏĿ¼ÊÇÒ»¸ö²»°²È«µÄÉèÖá£
ÐèҪעÒâµÄÊÇ£¬BASH ³ÌÐò±»Ö´Ðкó£¬Êµ¼ÊÉÏ Linux ϵͳÊÇÁíÍ⿪ÉèÁËÒ»¸ö½ø³ÌÀ´ÔËÐеġ£

2.2 ¹ØÓÚÊäÈë¡¢Êä³öºÍ´íÎóÊä³ö
ÔÚ×Ö·ûÖÕ¶Ë»·¾³ÖУ¬±ê×¼ÊäÈë/±ê×¼Êä³öµÄ¸ÅÄîºÜºÃÀí½â¡£ÊäÈë¼´Ö¸¶ÔÒ»¸öÓ¦ÓóÌÐò »òÃüÁîµÄÊäÈ룬ÎÞÂÛÊÇ´Ó¼üÅÌÊäÈ뻹ÊÇ´Ó±ðµÄÎļþÊäÈ룻Êä³ö¼´Ö¸Ó¦ÓóÌÐò»òÃüÁî²úÉúµÄһЩÐÅÏ¢£»Óë Windows ϵͳϲ»Í¬µÄÊÇ£¬Linux ϵͳÏ»¹ÓÐÒ»¸ö±ê×¼´íÎóÊä³öµÄ¸ÅÄÕâ¸ö¸ÅÄîÖ÷ÒªÊÇΪ³ÌÐòµ÷ÊÔºÍϵͳά»¤Ä¿µÄ¶øÉèÖõ쬴íÎóÊä³öÓÚ±ê×¼Êä³ö·Ö¿ª¿ÉÒÔÈÃһЩ¸ß¼¶µÄ´íÎóÐÅÏ¢²»¸ÉÈÅÕý³£µÄÊä³ö ÐÅÏ¢£¬´Ó¶ø·½±ãÒ»°ãÓû§µÄʹÓá£
ÔÚ Linux ϵͳÖУº±ê×¼ÊäÈë(stdin)ĬÈÏΪ¼üÅÌÊäÈ룻±ê×¼Êä³ö(stdout)ĬÈÏΪÆÁÄ»Êä³ö£»±ê×¼´íÎóÊä³ö(stderr)ĬÈÏÒ²ÊÇÊä³öµ½ÆÁÄ»£¨ÉÏÃæµÄ std ±íʾ standard£©¡£ÔÚ BASH ÖÐʹÓÃÕâЩ¸ÅÄîʱһ°ã½«±ê×¼Êä³ö±íʾΪ 1£¬½«±ê×¼´íÎóÊä³ö±íʾΪ 2¡£ÏÂÃæÎÒÃǾÙÀýÀ´ËµÃ÷ÈçºÎʹÓÃËûÃÇ£¬ÌرðÊDZê×¼Êä³öºÍ±ê×¼´íÎóÊä³ö¡£
ÊäÈë¡¢Êä³ö¼°±ê×¼´íÎóÊä³öÖ÷ÒªÓÃÓÚ I/O µÄÖØ¶¨Ïò£¬¾ÍÊÇ˵ÐèÒª¸Ä±äËûÃǵÄĬÈÏÉèÖá£ÏÈ¿´Õâ¸öÀý×Ó£º
$ ls > ls_result
$ ls -l >> ls_result
ÉÏÃæÕâÁ½¸öÃüÁî·Ö±ð½« ls ÃüÁîµÄ½á¹ûÊä³öÖØ¶¨Ïòµ½ ls_result ÎļþÖкÍ×·¼Óµ½ ls_result ÎļþÖУ¬¶ø²»ÊÇÊä³öµ½ÆÁÄ»ÉÏ¡£">"¾ÍÊÇÊä³ö£¨±ê×¼Êä³öºÍ±ê×¼´íÎóÊä³ö£©Öض¨ÏòµÄ´ú±í·ûºÅ£¬Á¬ÐøÁ½¸ö ">" ·ûºÅ£¬¼´ ">>" Ôò±íʾ²»Çå³ýÔ­À´µÄ¶ø×·¼ÓÊä³ö¡£ÏÂÃæÔÙÀ´¿´Ò»¸öÉÔ΢¸´ÔÓµÄÀý×Ó£º
$ find /home -name lost* 2> err_result
Õâ¸öÃüÁîÔÚ ">" ·ûºÅ֮ǰ¶àÁËÒ»¸ö "2"£¬"2>" ±íʾ½«±ê×¼´íÎóÊä³öÖØ¶¨Ïò¡£ÓÉÓÚ /home Ŀ¼ÏÂÓÐЩĿ¼ÓÉÓÚȨÏÞÏÞÖÆ²»ÄÜ·ÃÎÊ£¬Òò´Ë»á²úÉúһЩ±ê×¼´íÎóÊä³ö±»´æ·ÅÔÚ err_result ÎļþÖС£´ó¼Ò¿ÉÒÔÉèÏëһϠfind /home -name lost* 2>>err_result ÃüÁî»á²úÉúʲô½á¹û£¿
Èç¹ûÖ±½ÓÖ´ÐÐ find /home -name lost* > all_result £¬Æä½á¹ûÊÇÖ»Óбê×¼Êä³ö±»´æÈë all_result ÎļþÖУ¬ÒªÏëÈñê×¼´íÎóÊä³öºÍ±ê×¼ÊäÈëÒ»Ñù¶¼±»´æÈëµ½ÎļþÖУ¬ÄǸÃÔõô°ìÄØ£¿¿´ÏÂÃæÕâ¸öÀý×Ó£º
$ find /home -name lost* > all_result 2>& 1
ÉÏÃæÕâ¸öÀý×ÓÖн«Ê×ÏȽ«±ê×¼´íÎóÊä³öÒ²ÖØ¶¨Ïòµ½±ê×¼Êä³öÖУ¬ÔÙ½«±ê×¼Êä³öÖØ¶¨Ïòµ½ all_result Õâ¸öÎļþÖС£ÕâÑùÎÒÃǾͿÉÒÔ½«ËùÓеÄÊä³ö¶¼´æ´¢µ½ÎļþÖÐÁË¡£ÎªÊµÏÖÉÏÊö¹¦ÄÜ£¬»¹ÓÐÒ»ÖÖ¼ò±ãµÄд·¨ÈçÏ£º
$ find /home -name lost* >& all_result

Èç¹ûÄÇЩ³ö´íÐÅÏ¢²¢²»ÖØÒª£¬ÏÂÃæÕâ¸öÃüÁî¿ÉÒÔÈÃÄã±Ü¿ªÖÚ¶àÎÞÓóö´íÐÅÏ¢µÄ¸ÉÈÅ£º
$ find /home -name lost* 2> /dev/null
ͬѧÃÇ»ØÈ¥ºó»¹¿ÉÒÔÔÙÊÔÑéÒ»ÏÂÈçϼ¸ÖÖÖØ¶¨Ïò·½Ê½£¬¿´¿´»á³öʲô½á¹û£¬ÎªÊ²Ã´£¿
$ find /home -name lost* > all_result 1>& 2
$ find /home -name lost* 2> all_result 1>& 2
$ find /home -name lost* 2>& 1 > all_result
ÁíÍâÒ»¸ö·Ç³£ÓÐÓõÄÖØ¶¨Ïò²Ù×÷·ûÊÇ "-"£¬Çë¿´ÏÂÃæÕâ¸öÀý×Ó£º
$ (cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xvfp -)
¸ÃÃüÁî±íʾ°Ñ /source/directory Ŀ¼ÏµÄËùÓÐÎļþͨ¹ýѹËõºÍ½âѹ£¬¿ìËÙµÄÈ«²¿Òƶ¯µ½ /dest/directory Ŀ¼ÏÂÈ¥£¬Õâ¸öÃüÁîÔÚ /source/directory ºÍ /dest/directory ²»´¦ÔÚͬһ¸öÎļþϵͳÏÂʱ½«ÏÔʾ³öÌØ±ðµÄÓÅÊÆ¡£
ÏÂÃæ»¹¼¸ÖÖ²»³£¼ûµÄÓ÷¨£º
n<&- ±íʾ½« n ºÅÊäÈë¹Ø±Õ
<&- ±íʾ¹Ø±Õ±ê×¼ÊäÈ루¼üÅÌ£©
n>&- ±íʾ½« n ºÅÊä³ö¹Ø±Õ
>&- ±íʾ½«±ê×¼Êä³ö¹Ø±Õ
2.3 BASH ÖжԱäÁ¿µÄ¹æ¶¨£¨Óë C ÓïÑÔµÄÒìͬ£©
ºÃÁËÏÂÃæÎÒÃǽøÈëÕýÌ⣬ÏÈ¿´¿´ BASH ÖеıäÁ¿ÊÇÈçºÎ¶¨ÒåºÍʹÓõġ£¶ÔÓÚÊìϤ C ÓïÑԵijÌÐòÔ±£¬ÎÒÃǽ«½âÊÍ BASH Öе͍ÒåºÍÓ÷¨Óë C ÓïÑÔÖÐÓкβ»Í¬¡£
2.3.1. BASH ÖеıäÁ¿½éÉÜ
ÎÒÃÇÏÈÀ´´ÓÕûÌåÉϰÑÎÕһϠBASH ÖбäÁ¿µÄÓ÷¨£¬È»ºóÔÙÈ¥·ÖÎö BASH ÖбäÁ¿Ê¹ÓÃÓë C ÓïÑÔÖеIJ»Í¬¡£BASH ÖеıäÁ¿¶¼ÊDz»Äܺ¬Óб£Áô×Ö£¬²»Äܺ¬ÓÐ "-" µÈ±£Áô×Ö·û£¬Ò²²»Äܺ¬Óпոñ¡£
2.3.1.1 ¼òµ¥±äÁ¿
ÔÚ BASH ÖбäÁ¿¶¨ÒåÊDz»ÐèÒªµÄ£¬Ã»ÓÐ "int i" ÕâÑùµÄ¶¨Òå¹ý³Ì¡£Èç¹ûÏëÓÃÒ»¸ö±äÁ¿£¬Ö»ÒªËûûÓÐÔÚÇ°Ãæ±»¶¨Òå¹ý£¬¾ÍÖ±½Ó¿ÉÒÔÓ㬵±È»ÄãʹÓøñäÁ¿µÄµÚÒ»ÌõÓï¾äÓ¦¸ÃÊǶÔËû¸³³õÖµÁË£¬Èç¹ûÄã²»¸³³õֵҲû¹Ø ϵ£¬Ö»²»¹ý¸Ã±äÁ¿Êǿգ¨ ×¢Ò⣺ÊÇ NULL£¬²»ÊÇ 0 £©¡£²»¸ø±äÁ¿¸³³õÖµËäÈ»Óï·¨Éϲ»·´¶Ô£¬µ«²»ÊÇÒ»¸öºÃµÄ±à³Ìϰ¹ß¡£ºÃÁËÎÒÃÇ¿´¿´ÏÂÃæµÄÀý×Ó£º
Ê×ÏÈÓà vi ±à¼­ÏÂÃæÕâ¸öÎļþ hello2£º
#!/bin/bash
# give the initialize value to STR
STR="Hello World"
echo $STR

ÔÚÉÏÃæÕâ¸ö³ÌÐòÖÐÎÒÃÇÐèҪעÒâÏÂÃæ¼¸µã£º
Ò»£¬±äÁ¿¸³ÖµÊ±£¬'='×óÓÒÁ½±ß¶¼²»ÄÜÓпոñ£»
¶þ£¬BASH ÖеÄÓï¾ä½áβ²»ÐèÒª·ÖºÅ£¨";"£©£»
Èý£¬³ýÁËÔÚ±äÁ¿¸³ÖµºÍÔÚFORÑ­»·Óï¾äÍ·ÖУ¬BASH ÖеıäÁ¿Ê¹ÓñØÐëÔÚ±äÁ¿Ç°¼Ó"$"·ûºÅ£¬Í¬Ñ§ÃÇ¿ÉÒÔ½«ÉÏÃæ³ÌÐòÖеÚÈýÐиÄΪ "echo STR" ÔÙÊÔÊÔ£¬¿´¿´»á³öʲô½á¹û¡£==>output: STR
ËÄ£¬ÓÉÓÚ BASH ³ÌÐòÊÇÔÚÒ»¸öеĽø³ÌÖÐÔËÐеģ¬ËùÒԸóÌÐòÖеıäÁ¿¶¨ÒåºÍ¸³Öµ²»»á¸Ä±äÆäËû½ø³Ì»òԭʼ Shell ÖÐͬÃû±äÁ¿µÄÖµ£¬Ò²²»»áÓ°ÏìËûÃǵÄÔËÐС£
¸üϸÖµÄÎĵµÉõÖÁÌáµ½ÒÔµ«ÒýºÅÀ¨ÆðÀ´µÄ±äÁ¿½«²»±» BASH ½âÊÍΪ±äÁ¿£¬Èç '$STR' £¬¶ø±»¿´³ÉΪ´¿´âµÄ×Ö·û´®¡£¶øÇÒ¸üΪ±ê×¼µÄ±äÁ¿ÒýÓ÷½Ê½ÊÇ ${STR} ÕâÑùµÄ£¬$STR ×Ô²»¹ýÊÇ¶Ô ${STR} µÄÒ»ÖÖ¼ò»¯¡£ÔÚ¸´ÔÓÇé¿öÏ£¨¼´ÓпÉÄܲúÉúÆçÒåµÄµØ·½£©×îºÃÓôø {} µÄ±íʾ·½Ê½¡£
BASH ÖеıäÁ¿¼ÈÈ»²»ÐèÒª¶¨Ò壬Ҳ¾ÍûÓÐÀàÐÍһ˵£¬Ò»¸ö±äÁ¿¼´¿ÉÒÔ±»¶¨ÒåΪһ¸ö×Ö·û´®£¬Ò²¿ÉÒÔ±»ÔÙ¶¨ÒåΪÕûÊý¡£Èç¹û¶Ô¸Ã±äÁ¿½øÐÐÕûÊýÔËË㣬Ëû¾Í±»½âÊÍΪÕûÊý£»Èç¹û¶ÔËû½øÐÐ×Ö·û´®²Ù×÷£¬Ëû¾Í±»¿´×÷Ϊһ¸ö×Ö·û´®¡£Çë¿´ÏÂÃæµÄÀý×Ó£º
#!/bin/bash
x=1999
let "x = $x + 1"
echo $x
x="olympic'"$x
echo $x
¹ØÓÚÕûÊý±äÁ¿¼ÆË㣬ÓÐÈçϼ¸ÖÖ£º" + - * / % "£¬ËûÃǵÄÒâ˼ºÍ×ÖÃæÒâ˼Ïàͬ¡£ÕûÊýÔËËãÒ»°ãͨ¹ý let ºÍ expr ÕâÁ½¸öÖ¸ÁîÀ´ÊµÏÖ£¬Èç¶Ô±äÁ¿ x ¼Ó 1 ¿ÉÒÔд×÷£ºlet "x = $x + 1" »òÕß x=`expr $x + 1`
ÔڱȽϲÙ×÷ÉÏ£¬ÕûÊý±äÁ¿ºÍ×Ö·û´®±äÁ¿¸÷²»Ïàͬ£¬Ïê¼ûÏÂ±í£º
¶ÔÓ¦µÄ²Ù×÷ ÕûÊý²Ù×÷ ×Ö·û´®²Ù×÷
Ïàͬ -eq =
²»Í¬ -ne !=
´óÓÚ -gt >
СÓÚ -lt <
´óÓÚ»òµÈÓÚ -ge
СÓÚ»òµÈÓÚ -le
Ϊ¿Õ -z
²»Îª¿Õ -n

±ÈÈ磺
±È½Ï×Ö·û´® a ºÍ b ÊÇ·ñÏàµÈ¾Íд×÷£ºif [ $a = $b ]
ÅжÏ×Ö·û´® a ÊÇ·ñΪ¿Õ¾Íд×÷£º if [ -z $a ]
ÅжÏÕûÊý±äÁ¿ a ÊÇ·ñ´óÓÚ b ¾Íд×÷£ºif [ $a -gt $b ]
¸üϸÖµÄÎĵµÍƼöÔÚ×Ö·û´®±È½Ïʱ¾¡Á¿²»ÒªÊ¹Óà -n £¬¶øÓà ! -z À´´úÌæ¡££¨ÆäÖзûºÅ "!" ±íʾÇó·´²Ù×÷£©
BASH ÖеıäÁ¿³ýÁËÓÃÓÚ¶Ô ÕûÊý ºÍ ×Ö·û´® ½øÐвÙ×÷ÒÔÍ⣬ÁíÒ»¸ö×÷ÓÃÊÇ×÷ΪÎļþ±äÁ¿¡£BASH ÊÇ Linux ²Ù×÷ϵͳµÄ Shell£¬Òò´ËϵͳµÄÎļþ±ØÈ»ÊÇ BASH ÐèÒª²Ù×÷µÄÖØÒª¶ÔÏó£¬Èç if [ -x /root ] ¿ÉÒÔÓÃÓÚÅÐ¶Ï /root Ŀ¼ÊÇ·ñ¿ÉÒÔ±»µ±Ç°Óû§½øÈ롣ϱíÁгöÁË BASH ÖÐÓÃÓÚÅжÏÎļþÊôÐԵIJÙ×÷·û£º
ÔËËã·û º¬Ò壨 Âú×ãÏÂÃæÒªÇóʱ·µ»Ø TRUE £©
-e file Îļþ file ÒѾ­´æÔÚ
-f file Îļþ file ÊÇÆÕͨÎļþ
-s file Îļþ file ´óС²»ÎªÁã
-d file Îļþ file ÊÇÒ»¸öĿ¼
-r file Îļþ file ¶Ôµ±Ç°Óû§¿ÉÒÔ¶ÁÈ¡
-w file Îļþ file ¶Ôµ±Ç°Óû§¿ÉÒÔдÈë
-x file Îļþ file ¶Ôµ±Ç°Óû§¿ÉÒÔÖ´ÐÐ
-g file Îļþ file µÄ GID ±êÖ¾±»ÉèÖÃ
-u file Îļþ file µÄ UID ±êÖ¾±»ÉèÖÃ
-O file Îļþ file ÊÇÊôÓÚµ±Ç°Óû§µÄ
-G file Îļþ file µÄ×é ID ºÍµ±Ç°Óû§Ïàͬ
file1 -nt file2 Îļþ file1 ±È file2 ¸üÐÂ
file1 -ot file2 Îļþ file1 ±È file2 ¸üÀÏ

×¢Ò⣺ÉϱíÖÐµÄ file ¼° file1¡¢file2 ¶¼ÊÇָij¸öÎļþ»òĿ¼µÄ·¾¶¡£
2.3.1.1. ¹ØÓÚ¾Ö²¿±äÁ¿
ÔÚ BASH ³ÌÐòÖÐÈç¹ûÒ»¸ö±äÁ¿±»Ê¹ÓÃÁË£¬ÄÇôֱµ½¸Ã³ÌÐòµÄ½á⣬¸Ã±äÁ¿¶¼Ò»Ö±ÓÐЧ¡£ÎªÁËʹµÃij¸ö±äÁ¿´æÔÚÓÚÒ»¸ö¾Ö²¿³ÌÐò¿éÖУ¬¾ÍÒýÈëÁ˾ֲ¿±äÁ¿µÄ¸ÅÄî¡£BASH ÖУ¬ÔÚ±äÁ¿Ê״α»¸³³õֵʱ¼ÓÉÏ local ¹Ø¼ü×־ͿÉÒÔÉùÃ÷Ò»¸ö¾Ö²¿±äÁ¿£¬ÈçÏÂÃæÕâ¸öÀý×Ó£º
#!/bin/bash
HELLO=Hello
function hello {
local HELLO=World
echo $HELLO
}
echo $HELLO
hello
echo $HELLO
¸Ã³ÌÐòµÄÖ´Ðнá¹ûÊÇ£º
Hello
World
Hello
Õâ¸öÖ´Ðнá¹û±íÃ÷È«¾Ö±äÁ¿ $HELLO µÄÖµÔÚÖ´Ðк¯Êý hello ʱ²¢Ã»Óб»¸Ä±ä¡£Ò²¾ÍÊÇ˵¾Ö²¿±äÁ¿ $HELLO µÄÓ°ÏìÖ»´æÔÚÓÚº¯ÊýÄǸö³ÌÐò¿éÖС£
2.3.2. BASH ÖеıäÁ¿Óë C ÓïÑÔÖбäÁ¿µÄÇø±ð
ÕâÀïÎÒÃÇΪԭÀ´²»ÊìϤ BASH ±à³Ì£¬µ«ÊǷdz£ÊìϤ C ÓïÑԵijÌÐòÔ±×ܽáÒ»ÏÂÔÚ BASH »·¾³ÖÐʹÓñäÁ¿ÐèҪעÒâµÄÎÊÌâ¡£
1£¬BASH ÖеıäÁ¿ÔÚÒýÓÃʱ¶¼ÐèÒªÔÚ±äÁ¿Ç°¼ÓÉÏ "$" ·ûºÅ£¨ µÚÒ»´Î¸³Öµ¼°ÔÚForÑ­»·µÄÍ·²¿²»ÓÃ¼Ó "$"·ûºÅ £©£»
2£¬BASH ÖÐûÓи¡µãÔËË㣬Òò´ËÒ²¾ÍûÓи¡µãÀàÐ͵ıäÁ¿¿ÉÓã»
3£¬BASH ÖеÄÕûÐαäÁ¿µÄ±È½Ï·ûºÅÓë C ÓïÑÔÖÐÍêÈ«²»Í¬£¬¶øÇÒÕûÐαäÁ¿µÄËãÊõÔËËãÒ²ÐèÒª¾­¹ý let »ò expr Óï¾äÀ´´¦Àí£»
2.4 BASH ÖеĻù±¾Á÷³Ì¿ØÖÆÓï·¨
BASH Öм¸ºõº¬ÓÐ C ÓïÑÔÖг£ÓõÄËùÓпØÖƽṹ£¬ÈçÌõ¼þ·ÖÖ§¡¢Ñ­»·µÈ£¬ÏÂÃæÖðÒ»½éÉÜ¡£
2.4.1 if...then...else
if Óï¾äÓÃÓÚÅжϺͷÖÖ§£¬ÆäÓï·¨¹æÔòºÍ C ÓïÑ﵀ if ·Ç³£ÏàËÆ¡£Æä¼¸ÖÖ»ù±¾½á¹¹Îª£º
if [ expression ]
then
statments
fi
»òÕß
if [ expression ]
then
statments
else
statments
fi
»òÕß
if [ expression ]
then
statments
else if [ expression ]
then
statments
else
statments
fi
»òÕß
if [ expression ]
then
statments
elif [ expression ]
then
statments
else
statments
fi
ÖµµÃ˵Ã÷µÄÊÇÈç¹ûÄ㽫 if ºÍ then ¼ò½àµÄдÔÚÒ»ÐÐÀïÃæ£¬¾Í±ØÐëÔÚ then Ç°Ãæ¼ÓÉϷֺţ¬È磺if [ expression ]; then ... ¡£ÏÂÃæÕâ¸öÀý×Ó˵Ã÷ÁËÈçºÎʹÓà if Ìõ¼þÅжÏÓï¾ä£º
#!/bin/bash

if [ $1 -gt 90 ]
then
echo "Good, $1"
elif [ $1 -gt 70 ]
then
echo "OK, $1"
else
echo "Bad, $1"
fi

exit 0
ÉÏÃæÀý×ÓÖÐµÄ $1 ÊÇÖ¸ÃüÁîÐеĵÚÒ»¸ö²ÎÊý£¬Õâ¸ö»áÔÚºóÃæµÄ¡°BASH ÖеÄÌØÊâ±£Áô×Ö¡±Öн²½â¡£
2.4.2 for
for Ñ­»·½á¹¹Óë C ÓïÑÔÖÐÓÐËù²»Í¬£¬ÔÚ BASH ÖÐ for Ñ­»·µÄ»ù±¾½á¹¹ÊÇ£º
for $var in

do
statments
done
ÆäÖÐ $var ÊÇÑ­»·¿ØÖƱäÁ¿£¬
ÊÇ $var ÐèÒª±éÀúµÄÒ»¸ö¼¯ºÏ£¬do/done ¶Ô°üº¬ÁËÑ­»·Ì壬Ï൱ÓÚ C ÓïÑÔÖеÄÒ»¶Ô´óÀ¨ºÅ¡£ÁíÍâÈç¹ûdo ºÍ for ±»Ð´ÔÚͬһÐУ¬±ØÐëÔÚ do Ç°Ãæ¼ÓÉÏ ";"¡£È磺 for $var in
; do ¡£ÏÂÃæÊÇÒ»¸öÔËÓà for ½øÐÐÑ­»·µÄÀý×Ó£º
#!/bin/bash

for day in Sun Mon Tue Wed Thu Fri Sat
do
echo $day
done

# Èç¹ûÁÐ±í±»°üº¬ÔÚÒ»¶ÔË«ÒýºÅÖУ¬Ôò±»ÈÏΪÊÇÒ»¸öÔªËØ
for day in "Sun Mon Tue Wed Thu Fri Sat"
do
echo $day
done

exit 0
×¢ÒâÉÏÃæµÄÀý×ÓÖУ¬ÔÚ for ËùÔÚÄÇÐеıäÁ¿ day ÊÇûÓÐ¼Ó "$" ·ûºÅµÄ£¬¶øÔÚÑ­»·ÌåÄÚ£¬echo ËùÔÚÐбäÁ¿ $day ÊDZØÐë¼ÓÉÏ "$" ·ûºÅµÄ¡£ÁíÍâÈç¹ûд³É for day ¶øÃ»ÓкóÃæµÄ in
²¿·Ö£¬Ôò day ½«È¡±éÃüÁîÐеÄËùÓвÎÊý¡£ÈçÕâ¸ö³ÌÐò£º
#!/bin/bash

for param
do
echo $param
done

exit 0
ÉÏÃæÕâ¸ö³ÌÐò½«ÁгöËùÓÐÃüÁîÐвÎÊý¡£for Ñ­»·½á¹¹µÄÑ­»·Ìå±»°üº¬ÔÚ do/done ¶ÔÖУ¬ÕâÒ²ÊǺóÃæµÄ while¡¢until Ñ­»·Ëù¾ßÓеÄÌØµã¡£
2.4.3 while
while Ñ­»·µÄ»ù±¾½á¹¹ÊÇ£º
while [ condition ]
do
statments
done
Õâ¸ö½á¹¹Çë´ó¼Ò×Ô¼º±àдһ¸öÀý×ÓÀ´ÑéÖ¤¡£
2.4.4 until
until Ñ­»·µÄ»ù±¾½á¹¹ÊÇ£º
until [ condition is TRUE ]
do
statments
done
Õâ¸ö½á¹¹Ò²Çë´ó¼Ò×Ô¼º±àдһ¸öÀý×ÓÀ´ÑéÖ¤¡£
2.4.5 case
BASH ÖÐµÄ case ½á¹¹Óë C ÓïÑÔÖÐµÄ switch Óï¾äµÄ¹¦ÄܱȽÏÀàËÆ£¬¿ÉÒÔÓÃÓÚ½øÐжàÏî·ÖÖ§¿ØÖÆ¡£Æä»ù±¾½á¹¹ÊÇ£º
case "$var" in
condition1 )
statments1;;
condition2 )
statments2;;
...
* )
default statments;;
esac
ÏÂÃæÕâ¸ö³ÌÐòÊÇÔËÓà case ½á¹¹½øÐзÖÖ§Ö´ÐеÄÀý×Ó£º
#!/bin/bash

echo "Hit a key, then hit return."
read Keypress

case "$Keypress" in
[a-z] ) echo "Lowercase letter";;
[A-Z] ) echo "Uppercase letter";;
[0-9] ) echo "Digit";;
* ) echo "Punctuation, whitespace, or other";;
esac

exit 0
ÉÏÃæÀý×ÓÖеĵÚËÄÐÐ "read Keypress" Ò»¾äÖÐµÄ read Óï¾ä±íʾ´Ó¼üÅÌÉ϶ÁÈ¡ÊäÈë¡£Õâ¸öÃüÁÔÚ±¾½²ÒåµÄ BASH µÄÆäËû¸ß¼¶ÎÊÌâÖн²½â¡£
2.4.6 break/continue
ÊìϤ C ÓïÑÔ±à³ÌµÄ¶¼ºÜÊìϤ break Óï¾äºÍ continue Óï¾ä¡£BASH ÖÐͬÑùÓÐÕâÁ½ÌõÓï¾ä£¬¶øÇÒ×÷ÓúÍÓ÷¨Ò²ºÍ C ÓïÑÔÖÐÏàͬ£¬break Óï¾ä¿ÉÒÔÈóÌÐòÁ÷³Ì´Óµ±Ç°Ñ­»·ÌåÖÐÍêÈ«Ìø³ö£¬¶ø continue Óï¾ä¿ÉÒÔÌø¹ýµ±´ÎÑ­»·µÄÊ£Óಿ·Ö²¢Ö±½Ó½øÈëÏÂÒ»´ÎÑ­»·¡£
2.5 º¯ÊýµÄʹÓÃ
BASH ÊÇÒ»¸öÏà¶Ô¼òµ¥µÄ½Å±¾ÓïÑÔ£¬²»¹ýΪÁË·½±ã½á¹¹»¯µÄÉè¼Æ£¬BASH ÖÐÒ²ÌṩÁ˺¯Êý¶¨ÒåµÄ¹¦ÄÜ¡£BASH Öеĺ¯Êý¶¨ÒåºÜ¼òµ¥£¬Ö»ÒªÏòÏÂÃæÕâÑùд¾Í¿ÉÒÔÁË£º
function my_funcname {
code block
}
»òÕß
my_funcname() {
code block
}
ÉÏÃæµÄµÚ¶þÖÖд·¨¸ü½Ó½üÓÚ C ÓïÑÔÖеÄд·¨¡£BASH ÖÐÒªÇóº¯ÊýµÄ¶¨Ò屨ÐëÔÚº¯ÊýʹÓÃ֮ǰ£¬ÕâÊÇºÍ C ÓïÑÔÓÃÍ·Îļþ˵Ã÷º¯Êý·½·¨µÄ²»Í¬¡£
¸ü½øÒ»²½µÄÎÊÌâÊÇÈçºÎ¸øº¯Êý´«µÝ²ÎÊýºÍ»ñµÃ·µ»ØÖµ¡£BASH Öк¯Êý²ÎÊýµÄ¶¨Òå²¢²»ÐèÒªÔÚº¯Êý¶¨Òå´¦¾ÍÖÆ¶¨£¬¶øÖ»ÐèÒªÔÚº¯Êý±»µ÷ÓÃʱÓà BASH µÄ±£Áô±äÁ¿ $1 $2 ... À´ÒýÓþͿÉÒÔÁË£»BASH µÄ·µ»ØÖµ¿ÉÒÔÓà return Óï¾äÀ´Ö¸¶¨·µ»ØÒ»¸öÌØ¶¨µÄÕûÊý£¬Èç¹ûûÓÐ return Óï¾äÏÔʽµÄ·µ»ØÒ»¸ö·µ»ØÖµ£¬Ôò·µ»ØÖµ¾ÍÊǸú¯Êý×îºóÒ»ÌõÓï¾äÖ´ÐеĽá¹û£¨Ò»°ãΪ 0£¬Èç¹ûÖ´ÐÐʧ°Ü·µ»Ø´íÎóÂ룩¡£º¯ÊýµÄ·µ»ØÖµÔÚµ÷Óøú¯ÊýµÄ³ÌÐòÌåÖÐͨ¹ý $? ±£Áô×ÖÀ´»ñµÃ¡£ÏÂÃæÎÒÃǾÍÀ´¿´Ò»¸öÓú¯ÊýÀ´¼ÆËãÕûÊýƽ·½µÄÀý×Ó£º
#!/bin/bash

square() {
let "res = $1 * $1"
return $res
}

square $1
result=$?
echo $result

exit 0

BASH ÖеÄÌØÊâ±£Áô×Ö
• ±£Áô±äÁ¿
• Ëæ»úÊý
• ÔËËã·û
• ±äÁ¿µÄÌØÊâ²Ù×÷
3.1 ±£Áô±äÁ¿
BASH ÖÐÓÐһЩ±£Áô±äÁ¿£¬ÏÂÃæÁгöÁËһЩ£º

$IFS¡¡¡¡Õâ¸ö±äÁ¿Öб£´æÁËÓÃÓÚ·Ö¸îÊäÈë²ÎÊýµÄ·Ö¸î×Ö·û£¬Ä¬ÈÏʶ¿Õ¸ñ¡£
$HOME ¡¡Õâ¸ö±äÁ¿Öд洢Á˵±Ç°Óû§µÄ¸ùĿ¼·¾¶¡£
$PATH ¡¡Õâ¸ö±äÁ¿Öд洢Á˵±Ç° Shell µÄĬÈÏ·¾¶×Ö·û´®¡£
$PS1¡¡¡¡±íʾµÚÒ»¸öϵͳÌáʾ·û¡£
$PS2¡¡¡¡±íʾµÄ¶þ¸öϵͳÌáʾ·û¡£
$PWD¡¡¡¡±íʾµ±Ç°¹¤×÷·¾¶¡£
$EDITOR ±íʾϵͳµÄĬÈϱ༭Æ÷Ãû³Æ¡£
$BASH ¡¡±íʾµ±Ç° Shell µÄ·¾¶×Ö·û´®¡£
$0, $1, $2, ...
±íʾϵͳ´«¸ø½Å±¾³ÌÐò»ò½Å±¾³ÌÐò´«¸øº¯ÊýµÄµÚ0¸ö¡¢µÚÒ»¸ö¡¢µÚ¶þ¸öµÈ²ÎÊý¡£
$#¡¡¡¡¡¡±íʾ½Å±¾³ÌÐòµÄÃüÁî²ÎÊý¸öÊý»òº¯ÊýµÄ²ÎÊý¸öÊý¡£
$$¡¡¡¡¡¡±íʾ¸Ã½Å±¾³ÌÐòµÄ½ø³ÌºÅ£¬³£ÓÃÓÚÉú³ÉÎļþÃûΨһµÄÁÙʱÎļþ¡£
$?¡¡¡¡¡¡±íʾ½Å±¾³ÌÐò»òº¯ÊýµÄ·µ»Ø×´Ì¬Öµ£¬Õý³£Îª 0£¬·ñÔòΪ·ÇÁãµÄ´íÎóºÅ¡£
$*¡¡¡¡¡¡±íʾËùÓеĽű¾²ÎÊý»òº¯Êý²ÎÊý¡£
$@¡¡¡¡¡¡ºÍ $* º­ÒåÏàËÆ£¬µ«ÊÇ±È $* ¸ü°²È«¡£
$!¡¡¡¡¡¡±íʾ×î½üÒ»¸öÔÚºǫ́ÔËÐеĽø³ÌµÄ½ø³ÌºÅ¡£

3.2 Ëæ»úÊý
Ëæ»úÊýÊǾ­³£ÒªÓõ½µÄ£¬BASH ÖÐÒ²ÌṩÁËÕâ¸ö¹¦ÄÜ£¬Çë¿´ÏÂÃæÕâ¸ö³ÌÐò£º
#!/bin/bash

# Prints different random integer from 1 to 65536

a=$RANDOM
echo $a

exit 0
Õâ¸ö³ÌÐò¿ÉÒÔÔÚÿ´ÎÖ´ÐеÄʱºòËæ»úµÄ´òÓ¡³öÒ»¸ö´óСÔÚ 1 µ½ 65536 Ö®¼äµÄÕûÊý¡£
3.3 ÔËËã·û
ËãÊõÔËËã·û
+ - * / % ±íʾ¼Ó¼õ³Ë³ýºÍÈ¡ÓàÔËËã
+= -= *= /= ͬ C ÓïÑÔÖеĺ¬Òå
λ²Ù×÷·û
<< <<= >> >>= ±íʾλ×óÓÒÒÆÒ»Î»²Ù×÷
& &= | |= ±íʾ°´Î»Ó롢λ»ò²Ù×÷
~ ! ±íʾ·Ç²Ù×÷
^ ^= ±íʾÒì»ò²Ù×÷
¹ØÏµÔËËã·û
< > <= >= == != ±íʾ´óÓÚ¡¢Ð¡ÓÚ¡¢´óÓÚµÈÓÚ¡¢Ð¡ÓÚµÈÓÚ¡¢µÈÓÚ¡¢²»µÈÓÚ²Ù×÷
&& || Âß¼­Óë¡¢Âß¼­»ò²Ù×÷
3.4 ±äÁ¿µÄÌØÊâ²Ù×÷
BASH Öл¹ÓÐһЩ¶Ô±äÁ¿µÄ¼ò½à¡¢¿ìËٵIJÙ×÷£¬´ó¼Ò»¹¼ÇµÃ "${var}" ºÍ "$var" ͬÑùÊǶԱäÁ¿µÄÒýÓðɣ¬¶Ô ${var} ½øÐÐһЩ±ä»¯¾Í¿ÉÒÔ²úÉúһЩй¦ÄÜ£º
${var-default} ±íʾÈç¹û±äÁ¿ $var »¹Ã»ÓÐÉèÖã¬Ôò±£³Ö $var ûÓÐÉèÖõÄ״̬£¬²¢·µ»ØºóÃæµÄĬÈÏÖµ default¡£
${var=default} ±íʾÈç¹û±äÁ¿ $var »¹Ã»ÓÐÉèÖã¬ÔòÈ¡ºóÃæµÄĬÈÏÖµ default¡£
${var+otherwise} ±íʾÈç¹û±äÁ¿ $var ÒѾ­ÉèÖã¬Ôò·µ»Ø otherwise µÄÖµ£¬·ñÔò·µ»Ø¿Õ( null )¡£
${var?err_msg} ±íʾÈç¹û±äÁ¿ $var ÒѾ­ÉèÖã¬Ôò·µ»Ø¸Ã±äÁ¿µÄÖµ£¬·ñÔò½«ºóÃæµÄ err_msg Êä³öµ½±ê×¼´íÎóÊä³öÉÏ¡£
ÇëͬѧÃÇ×Ô¼º³¢ÊÔÏÂÃæµÄÀý×Ó£º
#!/bin/bash

echo ${var?There is an error}

exit 0
»¹ÓÐÏÂÃæÒ»Ð©Ó÷¨£¬ÕâЩÓ÷¨Ö÷ÒªÓÃÓÚ´ÓÎļþ·¾¶×Ö·û´®ÖÐÌáÈ¡ÓÐÓÃÐÅÏ¢£º
${var#pattern}, ${var##pattern} ÓÃÓÚ´Ó±äÁ¿ $var ÖаþÈ¥×î¶Ì£¨×£©µÄºÍ pattern ÏàÆ¥ÅäµÄ×î×ó²àµÄ´®¡£
${var%pattern}, ${var%%pattern} ÓÃÓÚ´Ó±äÁ¿ $var ÖаþÈ¥×î¶Ì£¨×£©µÄºÍ pattern ÏàÆ¥ÅäµÄ×îÓÒ²àµÄ´®¡£
ÁíÍâ BASH 2 Öл¹¼ÓÈëÏÂÃæÒ»Ð©²Ù×÷£º
${var:pos} ±íʾȥµô±äÁ¿ $var ÖÐǰ pos ¸ö×Ö·û¡£
${var:pos:len} ±íʾ±äÁ¿ $var ÖÐÈ¥µôǰ pos ¸ö×Ö·ûºóµÄÊ£Óà×Ö·û´®µÄǰ len ¸ö×Ö·û¡£
${var/pattern/replacement} ±íʾ½«±äÁ¿ $var ÖеÚÒ»¸ö³öÏÖµÄ pattern Ä£Ê½Ìæ»»Îª replacement ×Ö·û´®¡£
${var//pattern/replacement} ±íʾ½«±äÁ¿ $var ÖгöÏÖµÄËùÓÐ pattern ģʽȫ²¿¶¼Ì滻Ϊ replacment ×Ö·û´®¡£

BASH ÖÐµÄÆäËû¸ß¼¶ÎÊÌâ
• BASH ÖжԷµ»ØÖµµÄ´¦Àí
• Óà BASH Éè¼Æ¼òµ¥Óû§½çÃæ
• ÔÚ BASH ÖжÁÈ¡Óû§ÊäÈë
• Ò»Ð©ÌØÊâµÄ¹ßÓ÷¨
• BASH ³ÌÐòµÄµ÷ÊÔ
• ¹ØÓÚ BASH2
4.1 BASH ÖжԷµ»ØÖµµÄ´¦Àí
ÎÞÂÛÊÇÔÚ Shell ÖÐ¶Ô BASH ½Å±¾·µ»ØÖµµÄ´¦Àí£¬»¹ÊÇÔڽű¾ÖжԺ¯Êý·µ»ØÖµµÄ´¦Àí£¬¶¼ÊÇͨ¹ý "$?" ϵͳ±äÁ¿À´»ñµÃ¡£BASH ÒªÇó·µ»ØÖµ±ØÐëΪһ¸öÕûÊý£¬²»ÄÜÓà return Óï¾ä·µ»Ø×Ö·û´®±äÁ¿¡£

4.2 Óà BASH Éè¼Æ¼òµ¥Óû§½çÃæ
BASH ÖÐÌṩÁËÒ»¸öСµÄÓï¾ä¸ñʽ£¬¿ÉÒÔÈóÌÐò¿ìËÙµÄÉè¼Æ³öÒ»¸ö×Ö·û½çÃæµÄÓû§½»»¥Ñ¡ÔñµÄ²Ëµ¥£¬¸Ã¹¦ÄܾÍÊÇÓÉ select Óï¾äÀ´ÊµÏֵģ¬select Óï¾äµÄÓ﷨Ϊ£º
select var in

do
statments use $var
done
ÉÏÃæµÄÓï·¨½á¹¹ÔÚÖ´Ðкó£¬BASH »á½«
ÖеÄËùÓÐÏî¼ÓÉÏÊý×ÖÁÐÔÚÆÁÄ»ÉϵȴýÓû§Ñ¡Ôñ£¬ÔÚÓû§×÷³öÑ¡Ôñºó£¬±äÁ¿ $var ÖоͰüº¬ÁËÄǸö±»Ñ¡ÖеÄ×Ö·û´®£¬È»ºó¾Í¿ÉÒԶԸñäÁ¿½øÐÐÐèÒªµÄ²Ù×÷ÁË¡£ÎÒÃÇ¿ÉÒÔ´ÓÏÂÃæµÄÀý×ÓÖиüÖ±¹ÛµÄÀ´Àí½âÕâ¸ö¹¦ÄÜ£º
#!/bin/bash

OPTIONS="Hello Quit"
select opt in $OPTIONS; do
if [ "$opt" = "Quit" ]; then
echo done
exit
elif [ "$opt" = "Hello" ]; then
echo Hello World
else
clear
echo bad option
fi
done

exit 0
´ó¼Ò¿ÉÒÔÊÔ×ÅÖ´ÐÐÉÏÃæµÄ³ÌÐò£¬¿´¿´ÊÇʲôִÐнá¹û¡£
4.3 ÔÚ BASH ÖжÁÈ¡Óû§ÊäÈë
BASH ÖÐͨ¹ý read º¯ÊýÀ´ÊµÏÖ¶ÁÈ¡Óû§ÊäÈëµÄ¹¦ÄÜ£¬ÈçÏÂÃæÕâ¶Î³ÌÐò£º
#!/bin/bash

echo Please enter your name
read NAME
echo "Hi! $NAME !"

exit 0
ÉÏÃæÕâ¸ö½Å±¾¶ÁÈ¡Óû§µÄÊäÈ룬²¢»ØÏÔÔÚÆÁÄ»ÉÏ¡£
ÁíÍâ BASH Öл¹ÌṩÁíÍâÒ»ÖÖ³ÆÎª here documents µÄ½á¹¹????£¬¿ÉÒÔ½«Óû§ÐèҪͨ¹ý¼üÅÌÊäÈëµÄ×Ö·û´®¸ÄΪ´Ó³ÌÐòÌåÖÐÖ±½Ó¶ÁÈ룬ÈçÃÜÂë¡£ÏÂÃæµÄС³ÌÐòÑÝʾÁËÕâ¸ö¹¦ÄÜ£º
#!/bin/bash

passwd="aka@tsinghua"
ftp -n localhost <user anonymous $passwd
binary
bye
FTPFTP

exit 0
Õâ¸ö³ÌÐòÔÚÓû§ÐèҪͨ¹ý¼üÅÌÇÃÈëһЩ×Ö·ûʱ£¬Í¨¹ý³ÌÐòÄÚ²¿µÄ¶¯×÷À´Ä£Äâ¼üÅÌÊäÈë¡£Çë×¢Òâ here documents µÄ»ù±¾½á¹¹Îª£º
command <statments
...
SOMESPECIALSTRING
ÕâÀïÒªÇóÔÚÐèÒª¼üÅÌÊäÈëµÄÃüÁîºó£¬Ö±½Ó¼ÓÉÏ <<·ûºÅ£¬È»ºó¸úÉÏÒ»¸öÌØ±ðµÄ×Ö·û´®£¬Ôڸô®ºó°´Ë³ÐòÊäÈë±¾À´Ó¦¸ÃÓɼüÅÌÊäÈëµÄËùÓÐ×Ö·û£¬ÔÚËùÓÐÐèÒªÊäÈëµÄ×Ö·û¶¼½áÊøºó£¬Öظ´Ò»±éÇ°Ãæ <<·ûºÅºóµÄ¡°ÌرðµÄ×Ö·û´®¡±¼´±íʾ¸ÃÊäÈëµ½´Ë½áÊø¡£
4.4 Ò»Ð©ÌØÊâµÄ¹ßÓ÷¨
ÔÚ BASH ÖÐ () Ò»¶ÔÀ¨ºÅÒ»°ã±»ÓÃÓÚÇóÈ¡À¨ºÅÖбí´ïʽµÄÖµ»òÃüÁîµÄÖ´Ðнá¹û£¬È磺(a=hello; echo $a) £¬Æä×÷ÓÃÏ൱ÓÚ `...` ¡£
: ÓÐÁ½¸öº¬Ò壬һÊDZíʾ¿ÕÓï¾ä£¬ÓеãÀàËÆÓÚ C ÓïÑÔÖеĵ¥¸ö ";" ¡£±íʾ¸ÃÐÐÊÇÒ»¸ö¿ÕÃüÁÈç¹û±»ÓÃÔÚ while/until µÄÍ·½á¹¹ÖУ¬Ôò±íʾֵ 0£¬»áʹѭ»·Ò»Ö±½øÐÐÏÂÈ¥£¬ÈçÏÂÀý£º
while :
do
operation-1
operation-2
...
operation-n
done
ÁíÍâ : »¹¿ÉÒÔÓÃÓÚÇóÈ¡ºóÃæ±äÁ¿µÄÖµ£¬±ÈÈ磺
#!/bin/bash

: ${HOSTNAME?} {USER?} {MAIL?}
echo $HOSTNAME
echo $USER
echo $MAIL

exit 0
ÔÚ BASH ÖÐ export ÃüÁîÓÃÓÚ½«ÏµÍ³±äÁ¿Êä³öµ½Íâ²ãµÄ Shell ÖÐÁË¡£
4.5 BASH ³ÌÐòµÄµ÷ÊÔ
Óà bash -x bash-script ÃüÁ¿ÉÒԲ鿴һ¸ö³ö´íµÄ BASH ½Å±¾µ½µ×´íÔÚʲôµØ·½£¬¿ÉÒÔ°ïÖú³ÌÐòÔ±ÕÒ³ö½Å±¾ÖеĴíÎó¡£
ÁíÍâÓà trap Óï¾ä¿ÉÒÔÔÚ BASH ½Å±¾³ö´íÍ˳öʱ´òÓ¡³öһЩ±äÁ¿µÄÖµ£¬ÒÔ¹©³ÌÐòÔ±¼ì²é¡£trap Óï¾ä±ØÐë×÷Ϊ¼Ì "#!/bin/bash" ºóµÄµÚÒ»¾ä·Ç×¢ÊÍ´úÂ룬һ°ã trap ÃüÁд×÷£º trap 'message $checkvar1 $checkvar2' EXIT ¡£
4.6 ¹ØÓÚ BASH2
ʹÓà bash -version ÃüÁî¿ÉÒÔ¿´³öµ±Ç°ÄãÕýÔÚʹÓÃµÄ BASH ÊÇʲô°æ±¾£¬Ò»°ã°æ±¾ºÅΪ1.14»òÆäËû°æ±¾¡£¶øÏÖÔÚ»úÆ÷ÉÏÒ»°ã»¹°²×°ÁËÒ»¸ö°æ±¾ºÅΪ 2.0 µÄ BASH ¡£¸Ã BASH Ò²ÔÚ /bin Ŀ¼Ï¡£BASH2 ÌṩÁËһЩй¦ÄÜ£¬ÓÐÐËȤµÄͬÐð¿ÉÒÔ×Ô¼ºÈ¥¿´Ïà¹Ø×ÊÁÏ£¬»òÖ±½Ó man bash2 ¼´¿É¡£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 45 ÌõÆÀÂÛ

  1. ytwolf007 ÓÚ 2010-09-29 16:57:47·¢±í:

    ºÃ¸´ÔÓ

  2. kryuw100 ÓÚ 2010-09-23 09:03:31·¢±í:

    ½áºÏCÓïÑÔ£¬¿ÉÒÔ¿´¶®´ó²¿·Ö£¬Ð»Ð»Â¥Ö÷

  3. sohappy5156 ÓÚ 2010-09-22 14:14:05·¢±í:

    ×ö¸öÎĵµ·¢³öÀ´ ¸üºÃ~£¡

  4. Dazkj ÓÚ 2010-09-21 20:49:22·¢±í:

    ºÃ³¤£¬Ñ§Ï°ÏÂ

  5. ¶éÂäkiss ÓÚ 2010-09-21 17:31:02·¢±í:

    ²»´í£¬Ñ§Ï°Ò»ÏÂ.................Ö§³Ö