¡¡¡¡LinuxĬÈÏÊäÈëÊǼüÅÌ£¬Êä³öÊÇÏÔʾÆ÷¡£Äã¿ÉÒÔÓÃÖØ¶¨ÏòÀ´¸Ä±äÕâЩÉèÖᣱÈÈçÓÃwcÃüÁîµÄʱºò±¾À´ÊÇÒªÊÖ¶¯ÊäÈëһƪÎÄ×ÖÀ´¼ÆËã×Ö·ûÊýµÄ£¬ÓÃÁËÖØ¶¨Ïòºó¿ÉÒÔÖ±½Ó°ÑÒ»¸öÒѾдºÃµÄÎļþÓá®<¡¯Ö¸ÏòÕâÌõÃüÁ¾ÍÖ±½Ó¿ÉÒÔͳ¼ÆÕâ¸öÎļþµÄ×Ö·ûÊýµÈÁË¡£Êä³öÒ²ÊÇÒ»Ñù£¬Äã¿ÉÒÔ°ÑÆÁÄ»Êä³öÖØ¶¨Ïòµ½Ò»¸öÎļþÀÔÙµ½ÎļþÀïÈ¥¿´½á¹û¡£Öض¨Ïò²Ù×÷·û¿ÉÒÔÓÃÀ´½«ÃüÁîÊäÈëºÍÊä³öÊý¾ÝÁ÷´ÓĬÈÏλÖÃÖØ¶¨Ïòµ½ÆäËûλÖã¬ÆäÊäÈë»òÊä³öÊý¾ÝÁ÷µÄλÖóÆÎª¾ä±ú£»³£¼ûµÄ¾ä±úÓÐÈýÖÖ£¬µ±È»¾ä±ú¿ÉÒÔ×ÔÐÐÀ©Õ¹£¬Ò»°ãµÄOS¶¼ÌṩÀàËÆµÄ¹¦ÄÜ¡£¾ä±ú ¾ä±ú´úºÅ ¾ä±úÃèÊö
¡¡¡¡STDIN 0 ¼üÅÌÊäÈë
¡¡¡¡STDOUT 1 Êä³öÐÅÏ¢µ½Ìáʾ·û´°¿Ú
¡¡¡¡STDERR 2 Êä³ö´íÎóÐÅÏ¢µ½Ìáʾ·û´°¿Ú
¡¡¡¡Ä¬È쵀 < ÖØ¶¨ÏòÊäÈë²Ù×÷·ûÊÇ 0£¬¶øÄ¬È쵀 > ÖØ¶¨ÏòÊä³ö²Ù×÷·ûÊÇ 1¡£¼üÈë < »ò > ²Ù×÷·ûÖ®ºó£¬±ØÐëÖ¸¶¨Êý¾ÝµÄ¶ÁдλÖ㬿ÉÒÔÊÇÎļþÃû»òÆäËûÏÖÓеľä±ú¡£
¡¡¡¡ÒªÖ¸¶¨Öض¨Ïòµ½ÏÖÓоä±ú£¬ÇëʹÓÃÓë & ×Ö·û£¬ºóÃæ½ÓÒªÖØ¶¨ÏòµÄ¾ä±úºÅ£¨¼´ &¾ä±úºÅ£©¡£
ÀýÈ磬ÏÂÃæµÄÃüÁî¿ÉÒÔ½«¾ä±ú 2£¨¼´ STDERR£©Öض¨Ïòµ½¾ä±ú 1£¨¼´ STDOUT£©£º2>&1
¡¡¡¡Ï±íÁгöÁË¿ÉÓÃÓÚÖØ¶¨ÏòÊäÈëºÍÊä³öÊý¾ÝÁ÷µÄ²Ù×÷·û£º
¡¡¡¡LinuxÖØ¶¨Ïò²Ù×÷·û ¹¦ÄÜÃèÊö
¡¡¡¡> ½«ÃüÁîÊä³öдÈëÎļþ»òÉ豸£¬¶ø²»ÊÇÃüÁîÌáʾ·û»ò¾ä±ú
¡¡¡¡< ´ÓÎļþ¶ø²»ÊÇ´Ó¼üÅÌ»ò¾ä±ú¶ÁÈëÃüÁîÊäÈë
¡¡¡¡>> ½«ÃüÁîÊä³öÌí¼Óµ½Îļþĩβ¶ø²»É¾³ýÎļþÖÐÒÑÓеÄÐÅÏ¢
¡¡¡¡>& ½«Ò»¸ö¾ä±úµÄÊä³öдÈëµ½ÁíÒ»¸ö¾ä±úµÄÊäÈëÖÐ
¡¡¡¡<& ´ÓÒ»¸ö¾ä±ú¶ÁÈ¡ÊäÈë²¢½«ÆäдÈëµ½ÁíÒ»¸ö¾ä±úÊä³öÖÐ
¡¡¡¡| ´ÓÒ»¸öÃüÁîÖжÁÈ¡Êä³ö²¢½«ÆäдÈëÁíÒ»¸öÃüÁîµÄÊäÈëÖУ»Ò²³ÆÎª¹ÜµÀ²Ù×÷·û
¡¡¡¡ÏÖÔÚÎÒÃǻعýÍ·À´¿´¿´ÉÏÃæµÄÄÇÌõÓï¾ämysh > mylog.txt 2>&1¾Í¿ÉÃ÷°×£º
¡¡¡¡> mylog.txtÒâ˼Êǽ«±ê×¼Êä³öÖØ¶¨Ïòµ½mylog.txt£¬µÈ¼ÛÓÚmysh 1> mylog.txt£»
¡¡¡¡2 >& 1 Òâ˼Êǽ«´íÎóÊä³öÖØ¶¨Ïòµ½¾ä±ú1±ê×¼Êä³ö£»×ÛºÏÆðÀ´¾ÍÊÇmyshÃüÁîÖ´Ðйý³ÌÖвúÉúµÄ±ê×¼Êä³öºÍ´íÎóÊä³ö¶¼»á±»Öض¨Ïòµ½mylog.txtÖУ»
¡¡¡¡Öض¨ÏòµÄ¹¦ÄÜÊ®·ÖÇ¿´ó£¬ÓÐÐËȤµÄ¿ÉÒÔÈ¥³¢ÊÔ¸÷ÖÖ²»Í¬µÄ×éºÏ£¬¿´¿´Ç°ºóλÖñäÏ»áÓÐʲô½á¹û£¿
¡¡¡¡Ä³Ð©Ê±ºòÎÒÃÇ¿ÉÄܲ¢²»Ï£Íû¼Ç¼ʲô±ê×¼Êä³ö»òÕßÊÇ´íÎóÊä³ö£¬ÄÇ¿ÉÒÔÓÃmysh >null 2>null»òÕßmysh >/dev/null 2>/dev/null£»
¡¡¡¡I/OÖØ¶¨ÏòÏê½â
¡¡¡¡1¡¢ »ù±¾¸ÅÄÕâÊÇÀí½âºóÃæµÄ֪ʶµÄǰÌᣬÇëÎñ±ØÀí½â£©
¡¡¡¡a¡¢ I/OÖØ¶¨Ïòͨ³£Óë FDÓйأ¬shellµÄFDͨ³£Îª10¸ö£¬¼´ 0¡«9£»
¡¡¡¡b¡¢ ³£ÓÃFDÓÐ3¸ö£¬Îª0£¨stdin£¬±ê×¼ÊäÈ룩¡¢1£¨stdout£¬±ê×¼Êä³ö£©¡¢2£¨stderr£¬±ê×¼´íÎóÊä³ö£©£¬Ä¬ÈÏÓëkeyboard¡¢monitor¡¢monitorÓйأ»
¡¡¡¡c¡¢ Óà < À´¸Ä±ä¶Á½øµÄÊý¾ÝÐŵÀ(stdin)£¬Ê¹Ö®´ÓÖ¸¶¨µÄµµ°¸¶Á½ø£»
¡¡¡¡d¡¢ Óà > À´¸Ä±äËͳöµÄÊý¾ÝÐŵÀ(stdout, stderr)£¬Ê¹Ö®Êä³öµ½Ö¸¶¨µÄµµ°¸£»
¡¡¡¡e¡¢ 0 ÊÇ < µÄĬÈÏÖµ£¬Òò´Ë < Óë 0<ÊÇÒ»ÑùµÄ£»Í¬Àí£¬> Óë 1> ÊÇÒ»ÑùµÄ£»
¡¡¡¡f¡¢ ÔÚIOÖØ¶¨Ïò ÖУ¬stdout Óë stderr µÄ¹ÜµÀ»áÏÈ×¼±¸ºÃ£¬²Å»á´Ó stdin ¶Á½ø×ÊÁÏ£»
¡¡¡¡g¡¢ ¹ÜµÀ¡°|¡±(pipe line):ÉÏÒ»¸öÃüÁîµÄ stdout ½Óµ½ÏÂÒ»¸öÃüÁîµÄ stdin;
¡¡¡¡h¡¢ tee ÃüÁîÊÇÔÚ²»Ó°ÏìÔ±¾ I/O µÄÇé¿öÏ£¬½« stdout ¸´ÖÆÒ»·Ýµ½µµ°¸È¥;
¡¡¡¡i¡¢ bash£¨ksh£©Ö´ÐÐÃüÁîµÄ¹ý³Ì£º·ÖÎöÃüÁäÁ¿ÇóÖµ£ÃüÁîÌæ´ú£¨``ºÍ$( )£©£Öض¨Ïò£Í¨Åä·ûÕ¹¿ª£È·¶¨Â·¾¶£Ö´ÐÐÃüÁ
¡¡¡¡j¡¢ ( ) ½« command group ÖÃÓÚ sub-shell È¥Ö´ÐУ¬Ò²³Æ nested sub-shell£¬ËüÓÐÒ»µã·Ç³£ÖØÒªµÄÌØÐÔÊÇ£º¼Ì³Ð¸¸shellµÄStandard input, output, and error plus any other open file descriptors¡£
¡¡¡¡k¡¢ exec ÃüÁ³£ÓÃÀ´Ìæ´úµ±Ç° shell ²¢ÖØÐÂÆô¶¯Ò»¸ö shell£¬»»¾ä»°Ëµ£¬²¢Ã»ÓÐÆô¶¯×Ó shell¡£Ê¹ÓÃÕâÒ»ÃüÁîʱÈκÎÏÖÓл·¾³¶¼½«»á±»Çå³ý¡£exec ÔÚ¶ÔÎļþÃèÊö·û½øÐвÙ×÷µÄʱºò£¬Ò²Ö»ÓÐÔÚÕâʱ£¬exec ²»»á¸²¸ÇÄ㵱ǰµÄ shell »·¾³¡£
¡¡¡¡2¡¢ »ù±¾IO
¡¡¡¡cmd > file °Ñ stdout ÖØ¶¨Ïòµ½ file ÎļþÖУ»
¡¡¡¡cmd >> file °Ñ stdout ÖØ¶¨Ïòµ½ file ÎļþÖÐ(×·¼Ó)£»
¡¡¡¡cmd 1> fiel °Ñ stdout ÖØ¶¨Ïòµ½ file ÎļþÖУ»
¡¡¡¡cmd > file 2>&1 °Ñ stdout ºÍ stderr Ò»ÆðÖØ¶¨Ïòµ½ file ÎļþÖУ»
¡¡¡¡cmd 2> file °Ñ stderr ÖØ¶¨Ïòµ½ file ÎļþÖУ»
¡¡¡¡cmd 2>> file °Ñ stderr ÖØ¶¨Ïòµ½ file ÎļþÖÐ(×·¼Ó)£»
¡¡¡¡cmd >> file 2>&1 °Ñ stderr ºÍ stderr Ò»ÆðÖØ¶¨Ïòµ½ file ÎļþÖÐ(×·¼Ó)£»
¡¡¡¡cmd < file >file2 cmd ÃüÁîÒÔ file Îļþ×÷Ϊ stdin£¬ÒÔ file2 Îļþ×÷Ϊ stdout£»
¡¡¡¡cat <>file ÒÔ¶ÁдµÄ·½Ê½´ò¿ª file£»
¡¡¡¡cmd < file cmd ÃüÁîÒÔ file Îļþ×÷Ϊ stdin£»
¡¡¡¡cmd << delimiter Here document£¬´Ó stdin ÖжÁÈ룬ֱÖÁÓöµ½ delimiter ·Ö½ç·û¡£
¡¡¡¡3¡¢ ½ø½×IO
¡¡¡¡>&n ʹÓÃϵͳµ÷Óà dup (2) ¸´ÖÆÎļþÃèÊö·û n ²¢°Ñ½á¹ûÓÃ×÷±ê×¼Êä³ö£»
¡¡¡¡<&n ±ê×¼ÊäÈë¸´ÖÆ×ÔÎļþÃèÊö·û n£»
¡¡¡¡<&- ¹Ø±Õ±ê×¼ÊäÈ루¼üÅÌ£©£»
¡¡¡¡>&- ¹Ø±Õ±ê×¼Êä³ö£»
¡¡¡¡n<&- ±íʾ½« n ºÅÊäÈë¹Ø±Õ£»
¡¡¡¡n>&- ±íʾ½« n ºÅÊä³ö¹Ø±Õ£»
¡¡¡¡ÉÏÊöËùÓÐÐÎʽ¶¼¿ÉÒÔǰµ¼Ò»¸öÊý×Ö£¬´Ëʱ½¨Á¢µÄÎļþÃèÊö·ûÓÉÕâ¸öÊý×ÖÖ¸¶¨¶ø²»ÊÇȱʡµÄ 0 »ò 1¡£È磺
¡¡¡¡... 2>file ÔËÐÐÒ»¸öÃüÁî²¢°Ñ´íÎóÊä³ö(ÎļþÃèÊö·û 2)¶¨Ïòµ½ file¡£
¡¡¡¡... 2>&1 ÔËÐÐÒ»¸öÃüÁî²¢°ÑËüµÄ±ê×¼Êä³öºÍÊä³öºÏ²¢¡£(ÑϸñµÄ˵ÊÇͨ¹ý¸´ÖÆÎļþÃèÊö·û 1 À´½¨Á¢ÎļþÃèÊö·û 2 £¬µ«Ð§¹ûͨ³£ÊǺϲ¢ÁËÁ½¸öÁ÷¡£)
¡¡¡¡ÎÒÃÇ¶Ô 2>&1Ïêϸ˵Ã÷һϠ£º2>&1 Ò²¾ÍÊÇ FD2£½FD1 £¬ÕâÀï²¢²»ÊÇ˵FD2 µÄÖµ µÈÓÚFD1µÄÖµ£¬ÒòΪ > ÊǸıäËͳöµÄÊý¾ÝÐŵÀ£¬Ò²¾ÍÊÇ˵°Ñ FD2 µÄ ¡°Êý¾ÝÊä³öͨµÀ¡± ¸ÄΪ FD1 µÄ ¡°Êý¾ÝÊä³öͨµÀ¡±¡£Èç¹û½ö½öÕâÑù£¬Õâ¸ö¸Ä±äºÃÏñûÓÐʲô×÷Óã¬ÒòΪ FD2 µÄĬÈÏÊä³öºÍ FD1µÄĬÈÏÊä³ö±¾À´¶¼ÊÇ monitor£¬Ò»ÑùµÄ£¡µ«ÊÇ£¬µ± FD1 ÊÇÆäËûÎļþ£¬ÉõÖÁÊÇÆäËû FD ʱ£¬Õâ¸ö¾Í¾ßÓÐÌØÊâµÄÓÃ;ÁË¡£Çë´ó¼ÒÎñ±ØÀí½âÕâÒ»µã¡£
¡¡¡¡exec 0exec 1>outfilename # ´ò¿ªÎļþoutfilename×÷Ϊstdout¡£
¡¡¡¡exec 2>errfilename # ´ò¿ªÎļþ errfilename×÷Ϊ stderr¡£
¡¡¡¡exec 0<&- # ¹Ø±Õ FD0¡£
¡¡¡¡exec 1>&- # ¹Ø±Õ FD1¡£
¡¡¡¡exec 5>&- # ¹Ø±Õ FD5¡£
1 COMMAND_OUTPUT >
2 # ÖØ¶¨Ïòstdoutµ½Ò»¸öÎļþ.
3 # Èç¹ûûÓÐÕâ¸öÎļþ¾Í´´½¨, ·ñÔò¾Í¸²¸Ç.
4
5 ls -lR > dir-tree.list
6 # ´´½¨Ò»¸ö°üº¬Ä¿Â¼Ê÷ÁбíµÄÎļþ.
7
8 : > filename
9 # > »á°ÑÎļþ"filename"½Ø¶ÏΪ0³¤¶È.
10 # Èç¹ûÎļþ²»´æÔÚ, ÄÇô¾Í´´½¨Ò»¸ö0³¤¶ÈµÄÎļþ(Óë'touch'µÄЧ¹ûÏàͬ).
11 # : ÊÇÒ»¸öռλ·û, ²»²úÉúÈκÎÊä³ö.
12
13 > filename
14 # > »á°ÑÎļþ"filename"½Ø¶ÏΪ0³¤¶È.
15 # Èç¹ûÎļþ²»´æÔÚ, ÄÇô¾Í´´½¨Ò»¸ö0³¤¶ÈµÄÎļþ(Óë'touch'µÄЧ¹ûÏàͬ).
16 # (ÓëÉϱߵÄ": >"Ч¹ûÏàͬ, µ«ÊÇÔÚijЩshellÏ¿ÉÄܲ»Äܹ¤×÷.)
17
18 COMMAND_OUTPUT >>
19 # ÖØ¶¨Ïòstdoutµ½Ò»¸öÎļþ.
20 # Èç¹ûÎļþ²»´æÔÚ, ÄÇô¾Í´´½¨Ëü, Èç¹û´æÔÚ, ÄÇô¾Í×·¼Óµ½Îļþºó±ß.
21
22
23 # µ¥ÐÐÖØ¶¨ÏòÃüÁî(Ö»»áÓ°ÏìËüÃÇËùÔÚµÄÐÐ):
24 # --------------------------------------------------------------------
25
26 1>filename
27 # ÖØ¶¨Ïòstdoutµ½Îļþ"filename".
28 1>>filename
29 # ÖØ¶¨Ïò²¢×·¼Óstdoutµ½Îļþ"filename".
30 2>filename
31 # ÖØ¶¨Ïòstderrµ½Îļþ"filename".
32 2>>filename
33 # ÖØ¶¨Ïò²¢×·¼Óstderrµ½Îļþ"filename".
34 &>filename
35 # ½«stdoutºÍstderr¶¼Öض¨Ïòµ½Îļþ"filename".
36
37 #==============================================================================
38 # ÖØ¶¨Ïòstdout, Ò»´ÎÒ»ÐÐ.
39 LOGFILE=script.log
40
41 echo "This statement is sent to the log file, \"$LOGFILE\"." 1>$LOGFILE
42 echo "This statement is appended to \"$LOGFILE\"." 1>>$LOGFILE
43 echo "This statement is also appended to \"$LOGFILE\"." 1>>$LOGFILE
44 echo "This statement is echoed to stdout, and will not appear in \"$LOGFILE\"."
45 # ÿÐйýºó, ÕâÐ©ÖØ¶¨ÏòÃüÁî»á×Ô¶¯"reset".
46
47
48
49 # ÖØ¶¨Ïòstderr, Ò»´ÎÒ»ÐÐ.
50 ERRORFILE=script.errors
51
52 bad_command1 2>$ERRORFILE # ´íÎóÏûÏ¢·¢µ½$ERRORFILEÖÐ.
53 bad_command2 2>>$ERRORFILE # ´íÎóÏûÏ¢Ìí¼Óµ½$ERRORFILEÖÐ.
54 bad_command3 # ´íÎóÏûÏ¢echoµ½stderr,
55 #+ ²¢ÇÒ²»³öÏÖÔÚ$ERRORFILEÖÐ.
56 # ÿÐйýºó, ÕâÐ©ÖØ¶¨ÏòÃüÁîÒ²»á×Ô¶¯"reset".
57 #==============================================================================
58
59
60
61 2>&1
62 # ÖØ¶¨Ïòstderrµ½stdout.
63 # µÃµ½µÄ´íÎóÏûÏ¢ÓëstdoutÒ»Ñù, ·¢Ë͵½Ò»¸öµØ·½.
64
65 i>&j
66 # ÖØ¶¨ÏòÎļþÃèÊö·ûi µ½ j.
67 # Ö¸ÏòiÎļþµÄËùÓÐÊä³ö¶¼·¢Ë͵½jÖÐÈ¥.
68
69 >&j
70 # ĬÈϵÄ, ÖØ¶¨ÏòÎļþÃèÊö·û1(stdout)µ½ j.
71 # ËùÓд«µÝµ½stdoutµÄÊä³ö¶¼Ë͵½jÖÐÈ¥.
72
73 0< FILENAME
74 < FILENAME
75 # ´ÓÎļþÖнÓÊÜÊäÈë.
76 # Óë">"ÊdzɶÔÃüÁî, ²¢ÇÒͨ³£¶¼ÊǽáºÏʹÓÃ.
77 #
78 # grep search-word
80
81 [j]<>filename
82 # ΪÁ˶Áд"filename", °ÑÎļþ"filename"´ò¿ª, ²¢ÇÒ·ÖÅäÎļþÃèÊö·û"j"¸øËü.
83 # Èç¹ûÎļþ"filename"²»´æÔÚ, ÄÇô¾Í´´½¨Ëü.
84 # Èç¹ûÎļþÃèÊö·û"j"ûָ¶¨, ÄÇĬÈÏÊÇfd 0, stdin.
85 #
86 # ÕâÖÖÓ¦ÓÃͨ³£ÊÇΪÁËдµ½Ò»¸öÎļþÖÐÖ¸¶¨µÄµØ·½.
87 echo 1234567890 > File # д×Ö·û´®µ½"File".
88 exec 3<> File # ´ò¿ª"File"²¢ÇÒ¸øËü·ÖÅäfd 3.
89 read -n 4 <&3 # Ö»¶Á4¸ö×Ö·û.
90 echo -n . >&3 # дһ¸öСÊýµã.
91 exec 3>&- # ¹Ø±Õfd 3.
92 cat File # ==> 1234.67890
93 # Ëæ»ú´æ´¢.
94
95
96
97 |
98 # ¹ÜµÀ.
99 # ͨÓÃÄ¿µÄµÄ´¦ÀíºÍÃüÁîÁ´¹¤¾ß.
100 # Óë">"ºÜÏàËÆ, µ«ÊÇʵ¼ÊÉϸüͨÓÃ.
101 # ¶ÔÓÚÏ뽫ÃüÁî, ½Å±¾, ÎļþºÍ³ÌÐò´®Á¬ÆðÀ´µÄʱºòºÜÓÐÓÃ.
102 cat *.txt | sort | uniq > result-file
103 # ¶ÔËùÓеÄ.txtÎļþµÄÊä³ö½øÐÐÅÅÐò, ²¢ÇÒɾ³ýÖØ¸´ÐÐ,
104 # ×îºó½«½á¹û±£´æµ½"result-file"ÖÐ.
¿ÉÒÔ½«ÊäÈëÊä³öÖØ¶¨ÏòºÍ(»ò)¹ÜµÀµÄ¶à¸öʵÀý½áºÏµ½Ò»ÆðдÔÚÒ»ÐÐÉÏ.
command < input-file > output-file
command1 | command2 | command3 > output-file
¿ÉÒÔ½«¶à¸öÊä³öÁ÷ÖØ¶¨Ïòµ½Ò»¸öÎļþÉÏ.
1 ls -yz >> command.log 2>&1
2 # ½«´íÎóÑ¡Ïî"yz"µÄ½á¹û·Åµ½Îļþ"command.log"ÖÐ.
3 # ÒòΪstderr±»Öض¨Ïòµ½Õâ¸öÎļþÖÐ,
4 #+ ËùÓеĴíÎóÏûÏ¢Ò²¾Í¶¼Ö¸ÏòÄÇÀïÁË.
5
6 # ×¢Òâ, ϱßÕâ¸öÀý×ӾͲ»»á¸ø³öÏàͬµÄ½á¹û.
7 ls -yz 2>&1 >> command.log
8 # Êä³öÒ»¸ö´íÎóÏûÏ¢, µ«ÊDz¢²»Ð´µ½ÎļþÖÐ.
9
10 # Èç¹û½«stdoutºÍstderr¶¼Öض¨Ïò,
11 #+ ÃüÁîµÄ˳Ðò»áÓÐЩ²»Í¬.
exec
ʹÓÃexecÖØ¶¨Ïò±ê×¼ÊäÈë
1 #!/bin/bash
2 # ʹÓÃ'exec'ÖØ¶¨Ïò±ê×¼ÊäÈë.
3
4
5 exec 6<&0 # ½«ÎļþÃèÊö·û#6ÓëstdinÁ´½ÓÆðÀ´.
6 # ±£´æÁËstdin.
7
8 exec < data-file # stdin±»Îļþ"data-file"Ëù´úÌæ.
9
10 read a1 # ¶ÁÈ¡Îļþ"data-file"µÄµÚÒ»ÐÐ.
11 read a2 # ¶ÁÈ¡Îļþ"data-file"µÄµÚ¶þÐÐ.
12
13 echo
14 echo "Following lines read from file."
15 echo "-------------------------------"
16 echo $a1
17 echo $a2
18
19 echo; echo; echo
20
21 exec 0<&6 6<&-
22 # ÏÖÔÚ½«stdin´Ófd #6Öлָ´, ÒòΪ¸Õ²ÅÎÒÃǰÑstdinÖØ¶¨Ïòµ½#6ÁË,
23 #+ È»ºó¹Ø±Õfd #6 ( 6<&- ), ºÃÈÃÕâ¸öÃèÊö·û¼ÌÐø±»ÆäËû½ø³ÌËùʹÓÃ.
24 #
25 # <&6 6<&- Õâô×öÒ²¿ÉÒÔ.
26
27 echo -n "Enter data "
28 read b1 # ÏÖÔÚ"read"ÒѾ»Ö¸´Õý³£ÁË, ¾ÍÊÇ´ÓstdinÖжÁÈ¡.
29 echo "Input read from stdin."
30 echo "----------------------"
31 echo "b1 = $b1"
32
33 echo
34
35 exit 0ʹÓÃexecÀ´Öض¨Ïòstdout 1 #!/bin/bash
2 # reassign-stdout.sh
3
4 LOGFILE=logfile.txt
5
6 exec 6>&1 # ½«fd #6ÓëstdoutÏàÁ¬½Ó.
7 # ±£´æstdout.
8
9 exec > $LOGFILE # stdout¾Í±»Îļþ"logfile.txt"Ëù´úÌæÁË.
10
11 # ----------------------------------------------------------- #
12 # ÔÚÕâ¿éÖÐËùÓÐÃüÁîµÄÊä³ö¾Í¶¼·¢ÏòÎļþ $LOGFILE.
13
14 echo -n "Logfile: "
15 date
16 echo "-------------------------------------"
17 echo
18
19 echo "Output of \"ls -al\" command"
20 echo
21 ls -al
22 echo; echo
23 echo "Output of \"df\" command"
24 echo
25 df
26
27 # ----------------------------------------------------------- #
28
29 exec 1>&6 6>&- # »Ö¸´stdout, È»ºó¹Ø±ÕÎļþÃèÊö·û#6.
30
31 echo
32 echo "== stdout now restored to default == "
33 echo
34 ls -al
35 echo
36
37 exit 0
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
ʹÓÃexecÔÚͬһ½Å±¾ÖÐÖØ¶¨ÏòstdinºÍstdout 1 #!/bin/bash
2 # upperconv.sh
3 # ½«Ò»¸öÖ¸¶¨µÄÊäÈëÎļþת»»Îª´óд.
4
5 E_FILE_ACCESS=70
6 E_WRONG_ARGS=71
7
8 if [ ! -r "$1" ] # ÅжÏÖ¸¶¨µÄÊäÈëÎļþÊÇ·ñ¿É¶Á?
9 then
10 echo "Can't read from input file!"
11 echo "Usage: $0 input-file output-file"
12 exit $E_FILE_ACCESS
13 fi # ¼´Ê¹ÊäÈëÎļþ($1)û±»Ö¸¶¨
14 #+ Ò²»¹ÊÇ»áÒÔÏàͬµÄ´íÎóÍ˳ö(Ϊʲô?).
15
16 if [ -z "$2" ]
17 then
18 echo "Need to specify output file."
19 echo "Usage: $0 input-file output-file"
20 exit $E_WRONG_ARGS
21 fi
22
23
24 exec 4<&0
25 exec < $1 # ½«»á´ÓÊäÈëÎļþÖжÁÈ¡.
26
27 exec 7>&1
28 exec > $2 # ½«Ð´µ½Êä³öÎļþÖÐ.
29 # ¼ÙÉèÊä³öÎļþÊÇ¿ÉдµÄ(Ìí¼Ó¼ì²é?).
30
31 # -----------------------------------------------
32 cat - | tr a-z A-Z # ת»»Îª´óд.
33 # ^^^^^ # ´ÓstdinÖжÁÈ¡.Reads from stdin.
34 # ^^^^^^^^^^ # дµ½stdoutÉÏ.
35 # È»¶ø, stdinºÍstdout¶¼±»Öض¨ÏòÁË.
36 # -----------------------------------------------
37
38 exec 1>&7 7>&- # »Ö¸´ stout.
39 exec 0<&4 4<&- # »Ö¸´ stdin.
40
41 # »Ö¸´Ö®ºó, ϱßÕâÐдúÂ뽫»áÈçÆÚÍûµÄÒ»Ñù´òÓ¡µ½stdoutÉÏ.
42 echo "File \"$1\" written to \"$2\" as uppercase conversion."
43
44 exit 0
--------------------------------------------------------------------------------
I/OÖØ¶¨ÏòÊÇÒ»ÖÖ±ÜÃâ¿ÉŵÄ×ÓshellÖв»¿É´æÈ¡±äÁ¿ÎÊÌâµÄ·½·¨.
--------------------------------------------------------------------------------
±ÜÃâ×Óshell 1 #!/bin/bash
2 # avoid-subshell.sh
3 # Matthew WalkerÌá³öµÄ½¨Òé.
4
5 Lines=0
6
7 echo
8
9 cat myfile.txt | while read line; # (ÒëÕß×¢: ¹ÜµÀ»á²úÉú×Óshell)
10 do {
11 echo $line
12 (( Lines++ )); # Ôö¼ÓÕâ¸ö±äÁ¿µÄÖµ
13 #+ µ«ÊÇÍⲿѻ·È´²»ÄÜ´æÈ¡.
14 # ×ÓshellÎÊÌâ.
15 }
16 done
17
18 echo "Number of lines read = $Lines" # 0
19 # ´íÎó!
20
21 echo "------------------------"
22
23
24 exec 3<> myfile.txt
25 while read line <&3
26 do {
27 echo "$line"
28 (( Lines++ )); # Ôö¼ÓÕâ¸ö±äÁ¿µÄÖµ
29 #+ ÏÖÔÚÍⲿѻ·¾Í¿ÉÒÔ´æÈ¡ÁË.
30 # ûÓÐ×Óshell, ÏÖÔÚ¾ÍûÎÊÌâÁË.
31 }
32 done
33 exec 3>&-
34
35 echo "Number of lines read = $Lines" # 8
36
37 echo
38
39 exit 0
40
41 # ϱßÕâЩÐÐÊǽű¾µÄ½á¹û, ½Å±¾ÊDz»»á×ßµ½ÕâÀïµÄ.
42
43 $ cat myfile.txt
44
45 Line 1.
46 Line 2.
47 Line 3.
48 Line 4.
49 Line 5.
50 Line 6.
51 Line 7.
52 Line 8.
À´Ô´£ºLinuxÉçÇø