首先介绍bash的特殊语法

${parameter#*word}

其中parameter为变量,word为分隔符,表示从变量最边左字符开始到第一匹配到分隔符(word)之间的字符串都去掉

${parameter##*word}:表示从变量最左边字符开始到最后一次匹配到该分隔符之间的字符串都去掉

注意:其中变量不要加$符号

当*在分隔符(word)前面时,表示从左开始匹配

当*在分隔符(word)后面时,表示从右开始匹配

${parameter%word*}:表示从最右边字符开始到第一次匹配到的分隔符之间的字符串全部删除

${parameter%%word*}:表示从最右边字符开始到最后一次匹配到的分隔符之间的字符串全部删除

如何使用脚本来完成二进制程序和所需库文件的复制

#!/bin/bash
DEST=/mnt/sysroot
#复制库文件
LIBCP() {
        LIBDIR=${1%/*}
        #判断目录是否存在,不存在则创建目录
        [ ! -d $DEST$LIBDIR ] && mkdir -p $DEST$LIBDIR
        #判断库文件是否存在,不存在则复制库文件到指定目录下
        [ ! -e $DEST${1} ] && cp ${1}  $DEST$LIBDIR && echo "copy lib $1 finished "

}
#复制二进制程序
CMDCP() {

#找到某个命令的二进制文件
        CMD=`which $1 | grep -v '^alias*' | grep -o '[^[:space:]]\{1,\}'`

#取二进制程序所在的目录
        CMDDIR=${CMD%/*}
        #判断这个二进制文件所在目录是否存在,不存在则创建
        [ ! -d $DEST$CMDDIR ] && mkdir -p $DEST$CMDDIR
        #判断指定目录下是否存在该二进制程序,不存在则复制
        [ ! -e $DEST$CMD ] && cp $CMD $DEST$CMDDIR && echo "copy command $CMD finished"
        #通过ldd命令来找到某个二进制文件所需要的库文件,并生成列表供for循环使用
        for BINARY in `ldd $CMD | grep -o --color '/.*lib\(64\)\?/[^[:space:]]\{1,\}' `;do

#调用LIBCP函数复制二进制程序的库文件
                LIBCP $BINARY
        done
        }
#提醒用户输入命令
read -p 'Pelase input command:' COM
#判断用户输入的命令是否正确
until [ $COM == 'q' ];do
        ! which $COM &> /dev/null && echo 'command Wrong!' && read -p 'input again:' COM \
        && continue
        CMDCP $COM
        read -p 'Pelase input command continue:' COM
done

转载于:https://blog.51cto.com/xslwahaha/1532529

linux学习之路之使用脚本来复制二进制程序和所需的库文件相关推荐

  1. Linux学习之路(持续补充中......)

    Linux学习之路 Linux的基础知识 第一章:Linux的概述以及系统安装及使用 第一节:简单了解一下Linux发展历史与历程 Linux是一种自由.开源的类UNIX操作系统. linux 的创始 ...

  2. linux学习之路——ubuntu 16.04 开机开启数字小键盘解决方法

    linux学习之路--ubuntu 16.04 开机开启数字小键盘解决方法 参考文章: (1)linux学习之路--ubuntu 16.04 开机开启数字小键盘解决方法 (2)https://www. ...

  3. Linux学习之一键建站脚本

    本文转自lnmp.lamp.lnmpa一键安装包和LAMP一键安装脚本使用说明 这个脚本是使用shell编写,为了快速在生产环境上部署lnmp/lamp/lnmpa(Linux.Nginx/Tengi ...

  4. 高人指点 linux 学习之路

    博客的原创之路艰辛,小女子对创作人心生崇敬,转载是为了起步,从转载开始,过渡到有胆识和见识写自己的话吧,加油! Linux驱动学习的最大困惑在于书籍的缺乏,市面上最常见的书为 <linux_de ...

  5. linux 的基本命令格式,Linux学习之路(一)命令基本格式

    据统计Linxu里面能够识别的命令超过3000个,而我们常用的Linux基本命令在60个左右.常用命令是我们必须掌握的命令,需要我们多练习才能记住,最起码要敲3遍以上. 简单的把常用命令分为以下几大类 ...

  6. Linux学习笔记(3)- 网络编程以及范例程序

    Linux学习笔记(3)- 网络编程以及范例程序 前言 网络介绍 IP地址的介绍 端口和端口号的介绍 通信流程 socket介绍 TCP介绍 python3编码转换 TCP客户端程序开发流程 多任务版 ...

  7. linux 学习之路

    很多同学接触Linux不多,对Linux平台的开发更是一无所知. 而现在的趋势越来越表明,作为一个优秀的软件开发人员,或计算机IT行业从业人员, 掌握Linux是一种很重要的谋生资源与手段. 下来我将 ...

  8. Linux学习之路01

    决心开始学习自学Linux,以前混迹贴吧,现在觉得自己开始写一下博客,记录一下自己的学习之路,同时也是希望自己算是自己自学动手练习的记录吧. -- 题序 登录SSH服务 新建一个hello.c文件 # ...

  9. 【Linux学习】如何编写Shell脚本调用企业微信api来发消息给企业微信成员?

    一.前言 最近通过python实现了发送消息给企业微信的功能,参考链接: [Jenkins学习 ]如何编写Python脚本来调用企业微信的api通知企业微信成员关于Jenkins的编译结果? http ...

最新文章

  1. 运用Hibernate-Tools自动生成Java类和schema时,出现not found while looking for property...异常...
  2. python流程控制语句-Python流程控制语句
  3. Matlab错误:Y must be a vector or a character array
  4. XML Json
  5. PHP $_SERVER['HTTP_REFERER'] 获取前一页面的 URL 地址
  6. J.U.C并发框架源码阅读(二)AbstractQueuedSynchronizer
  7. springboot pom.xml实战(com.mchange与c3p0配置)
  8. switch_case,,||,条件操作符和逗号操作符,循环语句
  9. 简单的程序工具:matlab实现香农编码
  10. 低分辨率的显示器模拟高分辨率显示模式
  11. pfamscan 的使用_【T】每日一生信--PfamScan及fam数据库
  12. 火焰传感器模块的使用
  13. 18个Java开源CMS系统一览
  14. 学习计算机编程的基础
  15. docker quick start
  16. 手动进行释放内存的API
  17. 用Java编写租车项目核心业务
  18. Java基本面向对象(自学)
  19. CQuickList一个codeproject上的超级好用的控件
  20. 谈谈我用扫地机器人的心得

热门文章

  1. Visual Studio的下载安装
  2. Mac 如何寻找Mac自带的IDLE
  3. mysql 与QT的连接
  4. 汇编语言---GCC内联汇编
  5. 手把手教你用Jieba做中文分词
  6. 崩溃!新浪程序员加班错失 77 万年会大奖
  7. Bruce Eckel:我最喜欢Python,Kotlin或将取代Java(附演讲全文+PPT)
  8. STM32之I2C原理
  9. 这个超时问题花了我两周才解决!
  10. 牛逼了!PDF 版本 5000 页 Java 技术栈手册开放下载!