Csh脚本调用C程序,参数问题

时间:2016-01-27 13:19:27

标签: c linux

这是来自csh脚本的行

./model2grd $model -D$nx/$ny/$nz -O$x0/$y0 -I$dx/$dy -L$layer -C$coverage -Avel.dat -Gvel.grd

这是model2grd.c

的一部分
for (i = 2; i < argc; i++) {
    if (argv[i][0] == '-') {
        switch (argv[i][1]) {
            case 'G':
                grdfile = &argv[i][2];
                lgrd = TRUE;
                break;
            case 'C':
                cov = &argv[i][2];
                lcov = TRUE;
                break;
            case 'A':
                xyzfile = &argv[i][2];
                lxyz = TRUE;
                break;
            case 'D':
                sscanf(&argv[i][2],"%d/%d/%d",&nx,&ny,&nz);
                break;
            case 'I':
                sscanf(&argv[i][2], "%lf/%lf", &dx, &dy);
                break;
            case 'O':
                sscanf(&argv[i][2], "%lf/%lf", &xmin, &ymin);
                break;
            case 'L':
                layer = atoi(&argv[i][2]);
                break;
            case 'N':
                nan = (float)atof(&argv[i][2]);
                break;
            case 'Z':
                cvalue = (float)atof(&argv[i][2]);
                break;
            case 'V':
                verbose = TRUE;
                break;
            default:
                break;
        }
    }
}

这是否意味着它需要D(nx,ny,nz),O(xmin和ymin),L层和C覆盖?是否Avel.dat和Gvel.grd输入文件?

1 个答案:

答案 0 :(得分:3)

Avel.datGvel.grd不是输入文件。再看一下解析参数。

 switch (argv[i][1]) {
        case 'G':
            grdfile = &argv[i][2];
            lgrd = TRUE;
            break;

考虑这个论点:

  

-Gvel.grd

用简单的英语,switch检查每个参数的第二个字符。在这种情况下,-Gvel.grd是参数,因此它会查看G。通过该测试,case语句然后在字符串中的G之后立即派生字符的地址。换句话说,v

因此,文件名实际上是vel.grd。您应该能够将相同的逻辑应用于遵循相同模式的其余参数。