shell 实用例一,编译模块及拷贝

该脚本用于手动编译指定动态库,并将其拷贝到目标设备。支持编译多个模块或单个模块,根据用户输入自动完成编译、清理、找寻库文件并进行远程拷贝操作。在执行过程中,需要输入目标IP地址,并使用sshpass进行无密码登录。
摘要由CSDN通过智能技术生成

使用场景:手动编译指定的动态库,同时拷贝到目标板上。

#!/bin/bash

moduleList="cJson Json Archive Http Encrypt Sqllite Tinyxml Event Config Media Command MagixBox DeviceAux Muxer Stream NetApp GB28181 RTSP Onvif Web"
SO_FILE=
IP=${IP:-"192.168.74.79"} #若IP未定义且为空的,返回一个默认值

if [ $# -eq 0 ]; then
    for modul in ${moduleList} #编译所有模块
    do 
        cd ${modul}
        cmake -DPLATFORM=dv300 -DDEBUG=yes -Dmajor=0 -Dminor=01 -Dpatch=001;make clean;make -j32
        rm -rf CMakeCache.txt CMakeFiles/ cmake_install.cmake Makefile
        cd ..
    done
elif [ $# -eq 1 ]; then
    module=$1
    module=${module%/} #去掉按Tab自动完成时带的/,这里不能直接用$1,用了一个临时变量module进行操作
    echo "cd $module and make"
    cd ${module}
    cmake -DPLATFORM=dv300 -DDEBUG=yes -Dmajor=0 -Dminor=01 -Dpatch=001;make clean;make -j32
	if [ $? -ne 0 ]; then
		echo -e "\033[31m"
		echo -e "compile fail"
		echo -e "\033[0m"
		exit 1
	fi
    rm -rf CMakeCache.txt CMakeFiles/ cmake_install.cmake Makefile
    cd ..

    #根据模块名查找库文件
    LIB_SO=lib*${module}*.so
    SO_FILE=`find ./Build/dv300/ -iname ${LIB_SO}`

    #如果找到匹配则SO_FILE不为空,为空退出
	if [ -z ${SO_FILE} ]; then
        echo -e "\033[31m find ${LIB_SO} fail\033[0m"
        exit
    fi

    #输入目标ip地址,进行拷贝
	read -p "ip 地址: " IP
    echo "scp ${SO_FILE} to remote ${IP}"
    # password为登录用户root的密码
    sshpass -p "password" scp ${SO_FILE} root@${IP}:/usr/lib/
else
    echo "only support 1 param!"
fi

可以添加ssh登录重启操作,请看上一篇文章。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值