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

Linux½âÊÍÆ÷Ô­Àí

·¢²¼Ê±¼ä:2005-11-23 12:02:02À´Ô´:ºìÁª×÷Õß:thej
ÒýÑÔ
ʹÓÃShell½øÐй¤×÷µÄÈËÃǶÔUnix/LinuxϵÄShell±à³Ì¶¼ºÜÊìϤ£¬ÔÚËùÓеÄShell±à³ÌµÄÊéÖж¼»áÌáµ½#!/bin/bash,¶øÕâÀïµ½µ×°üº¬ÁËЩʲô£¿¶Ô²Ù×÷ϵͳ¶øÑÔ£¬ÕâÒ»ÐÐ×Ö·û´®Òâζ×Åʲô£¿Äã¿ÉÄÜ»á˵£¬²»¾ÍÊÇ»áÈÃ/bin/bash³ÌÐòÀ´½âÊÍÕâ¸ö½Å±¾³ÌÐòÂ𣿵±È»ÄãÊǶԵģ¬¿´¿´ÎÒÃǵıêÌ⣬ÕâÀïÎÒÃÇ̸̸½âÊÍÆ÷£¬ÈÃÎÒÃÇÒ»ÆðÀ´¿´¿´½Å±¾ÎļþÀïµÄµÚÒ»¾äµ½µ×¶Ôϵͳ¶øÑÔÒâζ×Åʲô¡£µ«ÓÐÒ»µãÎÒÃÇ¿ÉÏÈÃ÷ȷһϣ¬Ëùν½âÊÍÆ÷¾ÍÊÇÖ¸#!ÐкóÃæµÄ¿ÉÖ´ÐеijÌÐò¡£

Ò»¡¢ÎÒÃÇ´Óexec×庯Êý̸Æð
Èç¹ûÄã´Ó²»Ð´C³ÌÐò£¬¿ÉÄÜÐèÒª¶Ô±¾½ÚµÄÄÚÈÝ¿´µÃ¸üΪ×Ðϸ²¢ÇÒÊÔÑéһϡ£

´úÂë:
#include

extern char **environ;

int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg , ..., char * const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);

exec×庯ÊýÒ»¹²ÓÐÉÏÃæËùÁеÄ5¸ö£¬×÷Óö¼ÊÇÒ»Ñù£ºÖ´ÐÐÒ»¶ÎеĴúÂë¡£Çø±ðÖ»ÊÇÏòº¯Êý´«µÝµÄ²ÎÊý·½Ê½²»Í¬¶øÒÑ£¬ÎÒÔÚÕâÀï½²½²execlº¯Êý£ºµÚÒ»¸ö²ÎÊý pathÊÇÖ¸ÏòÉèÖÃÁËÖ´ÐÐλÎļþµÄ·¾¶£¬ºóÃæµÄ¿É±ä²ÎÊýÁбí·Ö±ðÖ¸ÏòÁË´«µÝ¸ø´ËÖ´ÐÐÎļþµÄ²ÎÊýÁбí(°üÀ¨Á˲ÎÊý0,¼´ÊÇÖ´ÐÐÎļþµÄÃû³Æ)¡£×îºóÒ»¸ö²ÎÊýΪ (char *) 0£¬±íʾ²ÎÊýÁбí½áÊø¡£

¶ÔÓÚ½âÊÍÆ÷£¬exec×庯ÊýÊÇÕâÑù×öµÄ(ÒÔexeclΪÀý)£¬Èç¹ûpathÊÇÖ¸ÏòÁËÒ»¸ö½Å±¾£¬½Å±¾µÄµÚÒ»ÐÐÒÔ#!¿ªÍ·£¬ÔòÕâÑùµ÷Óãº
ÒÔ#!ºóÃæµÄ×Ö·û´®ÎªÃüÁºóÃæ¼ÓÉÏexecl²ÎÊýÁбíÖÐÖ¸¶¨µÄ²ÎÊýÁÐ±í£¬ÕâÑùÐγÉÁËеijÌÐòÖ´ÐС£
ÏÂÃæÎÒÃÇÒÔÀý×ÓÀ´ÑéÖ¤Õâ¸ö½á¹û£º

ÏÂÃæÕâ¸öC³ÌÐòµÄ×÷ÓÃÊÇ»ØÉäËùÓÐÃüÁîÐвÎÊý¡£

´úÂë:
/* Program source : showargs.c *
* Program name : showargs */

#include

int
main(int argc, char *argv[])
{
int i;
for(i = 0; i < argc; i++)
{
printf("arg[%d]: %s\n", i, argv[i]);
}
return 0;
}
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 1 ÌõÆÀÂÛ

  1. thej ÓÚ 2005-11-23 12:02:39·¢±í:

    ±àÒ룺gcc -o showargs showargs.c
    Ö´ÐУº

    ´úÂë:
    $ pwd
    /home/kiron
    $ ./showargs arg1 arg2
    arg[0]: ./showargs
    arg[1]: arg1
    arg[2]: arg2




    ÎÒÃÇÔÚͬһ¸öĿ¼ÏÂÔÙдһ¸ö½Å±¾£º

    ´úÂë:
    #!/home/kiron/showargs addargs



    ÎÒûÓдò´í£¬Êǵģ¬Õâ¸ö½Å±¾¾ÍÖ»ÓÐÒ»ÐУ¬Õâ¸ö½Å±¾ÎÒÃÇÃüÃûΪtestexec£¬¼ÓÉÏÖ´ÐÐλºó£¬Ö´ÐÐÇé¿öÈçÏ£º

    ´úÂë:
    $ ./testexec
    arg[0]: /home/kiron/showargs
    arg[1]: addargs
    arg[2]: ./testexec



    Ôõô»áÕâÑù£¿ÎҲ»áÓÐÈ˶ԵÚ2¸ö²ÎÊý./testexec²»Àí½â£¬ÔÝÇÒÂô¸ö¹Ø×Ó£¬ÔÙÒý³öÒ»¸öC³ÌÐò£º

    ´úÂë:
    /* Program source : mytest.c *
    * Program name : mytest */
    #include

    int
    main(void)
    {
    execl("/home/kiron/testexec", "testexec", "arg1", "arg2", (char *) 0);
    return 0;
    }



    ±àÒ룺gcc -o mytest mytest.c
    Ö´ÐУº

    ´úÂë:
    $ ./mytest
    arg[0]: /home/kiron/showargs
    arg[1]: addargs
    arg[2]: /home/kiron/testexec
    arg[3]: arg1
    arg[4]: arg2



    ×Ðϸ¹Û²ìÉÏÃæµÄÈý¸öÀý×Ó£¬´ð°¸¿ªÊ¼¸¡³öË®ÃæÁË¡£ÕýÈçÔÚ¿ªÊ¼Ê±½²µ½µÄ£¬exec×庯ÊýµÄ´¦ÀíÊÇ°Ñ#!ºóÃæµÄ×Ö·û´®ÎªÃüÁºóÃæ¼ÓÉÏexecl²ÎÊýÁбíÖÐÖ¸¶¨µÄ²ÎÊýÁÐ±í£¬ÕâÑùÐγÉÁËеijÌÐòÖ´ÐС£·ÖÎöÒ»ÏÂmytest.cÔ´³ÌÐò£¬execl°ÑÃüÁîµÄ½á¹ûÊÇÕâÑùÖ´ÐеÄ/home/kiron/testexecµÄÄÚÈÝÊÇ#!/home/kiron/showargs addargs£¬Ôò#!ºóÃæµÄ×Ö·û´®"/home/kiron/showargs addargs"¼ÓÉÏÃüÁî²ÎÊýÁÐ±í£º"/home/kiron/testexec arg1 arg2"¾ÍÐγÉÁËеijÌÐòÐУº/home/kiron/showargs addargs /home/kiron/testexec arg1 arg2¡£¶ÔÓÚtestexec½Å±¾£¬ÎÒÃÇÔÚshellÖе÷ÓÃËüʱ£¬shellµ÷ÓÃÁËfork,exec,waitÀ´Ö´ÐÐËü£¬Ò²¾ÍÊǺͳÌÐò mytest.cÒ»ÑùÓÃÁËexecº¯Êý£¬Ê×ÏÈ£¬execº¯Êý¶Ô#!ÐзÖÎöºóµÃ³ö´Ë½Å±¾µÄ½âÊÍÆ÷Ϊ/home/kiron/showargs£¬È»ºó¾ÍÐγÉÁË°ÑÃüÁîÐд¦Àí³ÉÁË£º¡°/home/kiron/showargs addargs ./testexec¡±¡£

    ×¢Ò⣺#!ÐÐÖеĽâÊÍÆ÷µÄ·¾¶±ØÐëÊÇȫ·¾¶£¬execº¯Êý²¢²»¶ÔÆäÌØÊâ´¦Àí£¬±ÈÈçÓÃPATH±äÁ¿À´ËÑË÷ËüµÄÕæʵ·¾¶£¬ËùÒÔ·¾¶ÊÇÓɳÌÐòÔ±À´±£Ö¤ÕýÈ·µÄ¡£

    ¶þ¡¢ÎҵĽű¾µÚÒ»¾ä±ØÐëµÃÊÇ#!/bin/bashÂð£¿
    µ±È»²»±ØÁË£¬Í¨¹ýÉÏÃæµÄ½âÊÍ£¬ÆäʵµÚÒ»¾äµÄ#!ÊǶԽű¾µÄ½âÊÍÆ÷³ÌÐò·¾¶£¬½Å±¾µÄÄÚÈÝÊÇÓɽâÊÍÆ÷½âÊ͵ģ¬ÎÒÃÇ¿ÉÒÔÓø÷ÖÖ¸÷ÑùµÄ½âÊÍÆ÷À´Ð´¶ÔÓ¦µÄ½Å±¾£¬±ÈÈç˵/bin/csh½Å±¾£¬/bin/perl½Å±¾£¬/bin/awk½Å±¾£¬/bin/sed½Å±¾£¬ÉõÖÁ/bin/echoµÈµÈ¡£ÄÇÎÒÃÇÕæµÄÄÜдһ¸ö /bin/echoµÄ½Å±¾ÎļþÂð£¿ÎÒÃÇÀ´ÊÔÊÔ£¬ÏÂÃæÊÇÒ»¸öÀý×Ó£º

    ´úÂë:
    #!/bin/echo -e



    ÎÒ°ÑÕâÖ»ÓÐÒ»ÐеijÌÐò(ʵ¼ÊÉÏËüÒ²Ö»ÄÜÊÇÒ»ÐУ¬echo³ÌÐò²¢²»ÊDZ»Éè¼Æ³ÉÏñawkÄÇÑùµÄ±à³ÌÓïÑÔ£¬ÄÜд³ÉÔ´³ÌÐòÎļþ)ÃüÃûΪmyecho£¬¼ÓÉÏȨÏÞºóÖ´ÐÐËü£º

    ´úÂë:
    $ ./myecho "hi\a"
    ./myecho hi



    Èç¹ûÄãµÄechoÖ§³Ö-eÑ¡Ïî²¢ÇÒÄ㹤×÷µÄ»·¾³»¹Ëã°²¾²£¬ÄãÔڵõ½ÉÏÃæµÄ½á¹ûµÄʱºòÒ²Ó¦¸ÃÌýµ½Çå´àµÄÖÕ¶ËÏìÁå¡£µ«ÕâÖÖ³ÌÐòÊǺÁÎÞ×÷Óõġ£

    Èý¡¢ÎÒÄÜÀûÓýâÊÍÆ÷À´×öʲô£¿
    µ«ÊÇÉÏÃæµÄecho½Å±¾Êµ¼ÊÓ¦ÓÃʱ²¢Ã»ÓÐʲô×÷Óã¬ÎÒÃÇ¿ÉÒԵóöÒ»¸öССµÄʵÑé½á¹û£¬²¢²»ÊÇËùÓеĿÉÖ´Ðжþ½øÖÆÎļþ¶¼¿ÉÒÔÓÃÀ´Ð´½âÊÍÆ÷½Å±¾¡£ÄÇÎÒ±àд½âÊÍÆ÷µÄ½Å±¾ÓÐʲôÓã¿Èç¹ûÄãÓÐÒ»¸ö¿É±à³ÌµÄ½âÊÍÆ÷£¬ÄÇÄã»òÐíÄܱàд¸Ã½âÊÍÆ÷µÄ³ÌÐòÀ´¼ò»¯Ä㹤×÷¡£±ÈÈç˵³£Óõ½µÄ½âÊÍÆ÷Èçawk,perl,bashµÈµÈ¡£µ«ÊÇÕýÈçÎÒÃÇÉÏÃæ×ܽáµÄʵÑé½á¹û£¬ºÜ²»Ðҵأ¬²¢²»ÊÇÈ«²¿µÄ¿É±à³Ì³ÌÐò¶¼ÊÇÓÐÓõĽâÊÍÆ÷£¬exec½Å±¾Ê±£¬ÄÜ´ÓµÚÒ»Ðеõ½½Å±¾µÄ½âÊÍÆ÷£¬È»ºóÓÃexecÈ¥½âÊͽű¾(¿ÉÄÜÊÇÑ¡ÏîÈ¥¿ØÖÆ£¬Èç#!/bin/awk -f)£¬Ò²°üÀ¨ÁËÐÎÈç#!/PATH/µÄµÚÒ»ÐУ¬Èç¹û¸Ã½âÊÍÆ÷¶ÔÕâÐв»ÄܺöÂԵĻ°£¬¾Í»á³ö´í£¬ÁíÍâ½âÊÍÆ÷Ò²±ØÐëÒª¶ÔÓàϵijÌÐòÓï¾äÄܽâÊÍ(Õâ¾äºÃÏñÊÇ·Ï»°£¬µ«ÏëÏóһϣ¬ÉÏÃæmyecho³ÌÐò¼ÓһЩ"hello world"µÄÐÐÀ´£¬»áÓÐЧÂð£¿ÏÂÃæµÄmysed³ÌÐòÖеÄs/UNIX/unix/pÒ²ÊÇÒ»ÑùµÄµÀÀí)¡£Ïñawk,perl,bashµÈ³ÌÐò¶Ô#¿ªÍ·µÄÐе±³É×¢ÊÍÐд¦Àí£¬¾ÍÄÜд³ÉÓÐÓõĽű¾¡£
    ÔÙ¿´ÏÂÃæµÄmysed³ÌÐò£¬

    ´úÂë:
    #!/bin/sed -f
    s/UNIX/unix/p



    Ö´ÐÐ./mysedʱ³ö´íÁË¡£ÒòΪ±»½âÊͳÉÁË"/bin/sed -f ./mysed"£¬ÆäÖÐ-fÑ¡ÏîÊDZíʾÒÔÎļþÀïµÄÄÚÈÝ×÷ΪsedµÄÃüÁîÊäÈë,µ«sedµÄÃüÁîÊäÈë²»ÄܶÔ"#!/bin/sed -f"½âÊÍ£¬ÄÇô³ÌÐò³ö´íÁË¡£
    ËùÒÔ£¬ÓÐÓõĽâÊÍÆ÷Ó¦¸ÃÊÇÀàËÆbash,perl,awkµÄ³ÌÐò£¬²¢ÇÒÄܶÔһЩ¹æ¶¨µÄÓï¾äÓнâÊ͹¦Äܵġ£ÏÂÃæ¸ø³öÒ»¸öawk³ÌÐòдµÄͳ¼ÆÎļþÐÐÊýºÍµ¥´ÊÊýµÄ½Å±¾³ÌÐòmyawk¡£

    ´úÂë:
    #!/usr/bin/awk -f
    BEGIN {
    sum = 0;
    }
    {sum += NF;}
    END {
    printf("file \"%s\" have %d line, %d words.\n", FILENAME, NR, sum);
    }



    ÉèÖÃÖ´ÐÐλ֮ºó£¬Ö´ÐÐÈçÏ£º

    ´úÂë:
    $ echo -e "hi\nhello world">test.txt
    $ ./myawk test.txt
    file "test.txt" have 2 line, 3 words



    ÕâÀïÖ´ÐÐ./myawk±»Ö´Ðгɡ°/usr/bin/awk -f ./myawk test.txt¡±£¬ÒòΪawkµÄÃüÁîÖУ¬ÒÔ#¿ªÍ·µÄÐб»ÈÏΪÊÇ×¢ÊÍÐжøºöÂÔ£¬awkºöÂÔÁ˵ÚÒ»ÐÐ"#!/usr/bin/awk -f"£¬ÕýÈ·µÄÒÔ·Ç#¿ªÍ·Ðе±³ÉģʽºÍÃüÁîµÄÊäÈë²¢ÄܶÔÆä½âÊÍ£¬ËùÒÔÕâ¸ö³ÌÐòÊÇÕýÈ·µÄ£¬Äܱ»Ë³ÀûµØÖ´ÐС£