c获取shell中的参数

问题背景python

在Linux中咱们会使用到shell,来完成输入参数的获取,就如同下面的形式,这种形式在进行多语言编程和调用有着很是重要的做用web

sh test_params 9 8 7

1、传递的过程shell

1.1 原理模型以下:编程

1.1.1 可执行sh文件中调用C文件后端

1.1.2 可执行c文件中调用sh文件spa

1.2 从shell调用c命令行

 根据上述的模型能够知道,经过在shell中加入c程序的编译运行命令,如[gcc -o filename filename.c]来完成编译,使用命令[./filename]来进行调用3d

代码:code

下面的代码就是运行编译后的hello.c产生的hello文件和对new.c文件的编译和运行,new.c中是一个输入三个数实现求和运算blog

echo ./hello gcc -o new new.c ./new

结果:

1.3 从c中调用shell

使用读取shell的文件来完成数据的获取

if((stream = popen("sh test_adjust.sh", 'r')) == NULL){ fprintf(stderr, "%s", strerror(errno)); return -1; } int i = 0; while (fgets(buf, sizeof(buf), stream) != NULL){ a[i] = (int)buf[0] - 48; i++; }

2、 带有参数的传递

在c中调用sh文件获取参数以前,先让sh从命令行获取参数

2.1 shell获取参数

shell脚本的参数传递,经过$+n来获取第几个参数,0是特殊的参数,是获取脚本的名称

代码:

echo $1
echo $2
echo $3
echo $4
echo $5
echo $6
echo $7
echo $12
echo $123
echo $1235

结果:

 

2.1.1 不输入参数的调用

在shell中使用$0——$n来获取参数,0表明脚本,其余的就是依次获取参数,在不指定的状况下会输入减一位的值

2.1.2 参数输入和位置获取不对应

若是有输入就要和位置对应起来,不然会默认输出$后面的值

2.1.3 按位置输入获取

按照对应的位置输入就会出现对应位置的值

2.2 利用c调用shell命令获取shell的参数

上述讲述了如何利用[sh <filename>.sh param_0 param_1 ... ]来获取命令行对sh文件的参数输入获取,在c中如何进行调用sh脚本,代码以下

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h>
int main(){ char buf[1024]; FILE *stream = NULL; int a[1024]; int ret; memset(buf, 0, sizeof(buf)); if((stream = popen("sh test_adjust.sh 3 5 8", 'r')) == NULL){ //关键位置 fprintf(stderr, "%s", strerror(errno)); return -1; } int i = 0; while (fgets(buf, sizeof(buf), stream) != NULL){ a[i] = (int)buf[0] - 48; // 扣掉的48是0的ASCII码 i++; } printf("the sum of number:%d\n",a[0] +a[1] +a[2]); ret = atoi(buf); if (ret){ printf("command execute succeed!\n"); } else { printf("command execute fail!\n"); } return 0; }

结果

从上述的代码咱们就实现从c语言中输入参数给shell,在将shell输出的参数获取到进行一个处理。最后能够将这个写入shell做为一个脚本

3、总结

介绍了如何在将命令行的参数给shell,c语言如何获取shell的参数,在用shell将其封装起来。内容相似递归,可是在咱们实际使用中很重要。咱们须要在一段代码中引入其余语言的内容,就会出现因为编译器的问题没法解析这段代码,此时咱们就须要利用命令行来完成这段代码的解析。举一个例子在web开发中,利用PHP搭建一个web后端,可是因为数据处理方面PHP并非很适合,此时咱们使用的是python,由于没法直接在PHP中对python语法进行编译运行,就须要使用命令行调用python文件,获取输出结果(以下图)。这就是一个很常见的应用场景之一。shell调用c也是同样的,将其封装起来,使用shell能够快速完成复杂的调用过程,这个过程就是利用数据进行驱动的。

相关文章
相关标签/搜索