shell脚本:写入文件

时间:2016-02-13 16:34:25

标签: c shell scripting

我必须接受命令:echo 'slkdjf' > filename 因此,用户键入" echo",他们要键入的字符串,以及他们要键入的文件名。如何在C中编写它以接收这些命令。

这是我到目前为止所做的。

int main(int argc, char* argv[])
{
    int j = 0
    int i = 6
    char buff[100];
    FILE * fp;

    if(argv[0] == 'e' && argv[1] == 'c' && argv[2] == 'h' &&
       argv[3] == 'o' && argv[4] == ' ' && argv[5] == '''){
            while(argv[i] != '''){
                    buff[j] = argv[i];
                    i++;
                    j++;
            }
    }
    fp = fopen("\proc\hello\hello", "w");
    fwrite(buff, 1, sizeof(buff), fp);
    fclose(fp);
}

到目前为止看起来是否合适?

1 个答案:

答案 0 :(得分:1)

argv[0] == 'e'首先不是好事。 argvchar**,因此如果您想将argv[i]与某些内容进行比较,则应使用strcmp()
因此,为了测试第一个单词是否为echo,您必须这样做:

if(strcmp(argv[1], "echo") == 0) // argv[0] is your program name
{ //do something }

您还应该注意到argv[i]char*,如果您想复制字符串,可以使用strcpy

int main(int argc, char* argv[])
{
    int j = 0;
    char buff[100];
    FILE * fp;

    if(argc < 2)
    {
        printf("There are not enough arguments\n");
        return 1;
    }

    if(strcmp(argv[1], "echo") == 0) // means you the user typed 'prog_name echo "something"'
    {
        if(argc > 4) // So you have 'prog_name echo "something" > filename'
                     // But you cannot do 'prog_name echo "something" >filename' this way
                     // Because '>filename' will be counted as 1 argument (1 word)
        {
            fp = fopen(argv[4], "w");
            fwrite(argv[2], sizeof(char), strlen(argv[2]), fp);
            fclose(fp);
        }
        else
            printf("Nothing to save\n");
    }

    return 0;
}