shell调用c程序,求子网掩码

实际需求

      突发奇想,在手写一个自动配置网卡信息时,需手动算出子网掩码后再添加,比如/24 对应子网掩码为255.255.255.0,如果是其他掩码呢比如/21、/17 等等,你还要算几秒钟,多唠哦,用程序实现就很快了,我这里用shell和c混合编程来计算例如/23子网掩码为255.255.254.0 下面介绍方法 。

 

  • 思路:

          c程序:实现子网计算并返回输出,

          shell脚本:对192.168.100.1/23分割并调用c程序计算,然后输出

 

C语言代码:

 

#include"stdio.h"
#include
/*
	求子网掩吗,比如/23 转换为255.255.254.0
	单位实现
*/

int getmask(int n) //转换为掩吗标准格式
{
	int ns[]={128,64,32,16,8,4,2,1};
        int y=0,sum=0;
        y=n%8;
	if(n==8)return 255;

        for(int j=0;j0&&n<33)
        {
                for(i=0;i

        

编写好c代码后用gcc编译成可执行文件    

            gcc -c set_ip.c

           gcc set_ip.o -o set_ip.exe

调用c程序结果如下:

       shell调用c程序,求子网掩码_第1张图片

 

 

 

 

shell代码:

    考虑到用c语言做字符串切割比较麻烦下面写了个shell脚本来实现

          

#!/bin/bash

netmask=255.255.255.0     #默认子网掩吗

#获得ip段和掩吗数字段
ip=`echo $1 | awk -F/ '{print $1}'`
nm=`echo $1 | awk -F/ '{print $2}'`

#判断ip后面有无参数
if [ -z $nm ];then

	netmask=255.255.255.0  #没传参数默认掩码
else

	netmask=`./set_ip.exe $nm`       ##调用c程序set_ip.exe
fi



#输出结果
echo "     ip: $ip"
echo "netmask: $netmask"

shell调用c程序结果:

       注意:确保你c的执行程序和shell脚本在同一路径下!你的shell脚本要有执行权限

                  chmod u+x 脚本名                            #加执行权限

                 ./shell脚本名   192.168.100.1/24     #脚本名你自己随便取 ,后面掩码/24你也可以不加默认为/24

        shell调用c程序,求子网掩码_第2张图片

 

 

总结:实际证明shell可以很好的调用c程序,有同样想法的小伙伴可以参考哦,本脚本掩码计算功能实现了 ,如果自己还有兴趣可以扩展一下,比如说通过掩码求网络号和主机号等等。编程最重要的就是要有骚想法,解决实际问题,不然没啥意思。哈哈。

你可能感兴趣的:(linux,shell脚本)