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

首先介绍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 $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:‘ COM
done

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

时间: 2024-10-16 16:56:40

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

linux学习之路之脚本编程知识点

脚本编程知识点 1.获取变量中字符的长度 ${#VARNAME} 2.变量赋值 ${parameter:-word}:如果parameter为空或者未定义,则整个表达式为word:否则表达式值为parameter ${parameter:+word}:如果parameter为空或者未定义,则整个表达式为空:如果parameter有值,则整个表达式为word ${parameter:=word}:如果parameter为空或者未定义,则整个表达式值为parameter:否则整个表达式值为word

linux学习之路之sed命令使用

本章主要介绍sed的命令使用 sed(Stream Editor)是一种流编辑器,或者叫做行编辑器,以行为单位进行编辑处理,而后续会介绍的vi编辑器是一种全屏编辑器. sed的工作原理: 逐行读取文件中的每一行,并将其放在内存空间中,在对内存空间中的数据进行处理,将处理后的结果打印到屏幕上.而这种内存空间也叫做模式空间. 所谓模式空间:就是将放在内存空间的数据根据模式来匹配,匹配成功的数据进行相应的编辑处理,将处理后的数据打印到屏幕上去. 说明:sed命令默认将文件中所有的行打印到屏幕上去. s

1.菜鸟的linux学习之路------linux初体验

脚本编程语言通常是解释型的.这类程序的执行,是由解释器读入代码,并将其转换成内部的形式,在执行.请注意,解释器本身是一般的编译型程序. 常用的脚本编程语言有 :awk,Perl,Python,Ruby,Shell.这里的Ruby是日本人研发的. 注释: linux : 1.rm 删除指定的文件 例:rm /Users/apple/Desktop/QQDock.plist 2.假设你想知道现在的系统有多少人在登录,那么 who命令可以实现 3.|管道符号可以在两个程序之间建立管道:who的输出,成

linux学习之路之函数的使用

什么是函数呢? 函数就是将一些代码封装起来,实现代码重用的功能 函数是不能独立运行的,只有函数调用时才可以执行,而且可以调用多次 使用函数的好处可以避免代码多次重复使用,是程序代码更具有结构性. 那么该如何定义函数呢? 定义函数有二种结构 结构一: function FUNCNAME { COMMAND } 其中function为关键字,FUNCNAME为函数名,COMMAND为函数体内执行的命令 结构二: FUNCNAME() { COMMAND } 其中FUNCNAME为函数名 我们说过函数

linux学习之路之LVM

试想一种情况,当初我们在规划磁盘的时候,只给某一个磁盘或分区之划分了30G的容量,但是后来,随着业务的需求,该磁盘或者分区的使用量会越来越大,等到以后再有数据存放时,发现该磁盘或者分区的容量不够用,此时该怎么办了?可以新增一个磁盘,经过格式化,挂载等过程就可以使用这个磁盘了,再将原来磁盘的数据完全的复制过来.等到后来又发现,规划的磁盘又太大了,然后又使用上述方法来减少磁盘的大小.虽然这种方法可行,但是效率低,比较复杂.不应该是我们首选的方法. 当然,我们可以这样做,将多个磁盘或者分区(PV)组合

linux学习之路之LVM的快照功能

我们知道LVM可以弹性的调整文件系统的大小,其实LVM除了可以调整文件系统的大小之外,还有另一个功能就是系统快照. 所谓系统快照就是将某一时刻文件系统中的信息记录到快照区中,这里的某一时刻指的是在原始数据被改变的那一瞬间,原始数据会移到快照区里.而其他没有改变的数据,快照区和文件系统共享.所以刚建立快照时快照区内容和文件系统的内容一样. 由于我们知道只有改变的数据才会移动到快照区,因此快照区中保存的内容比较少. 快照区的原理图如下: 那么如何建立快照区呢? 使用lvcreate -s命令来创建快

linux学习之路之磁盘管理和文件系统三

ext3文件系统和ext2文件系统的区别? 在某些时候,某个用户在linux系统上写入数据,这时系统正好断电或者系统核心出现错误,写入的数据仅有inode table和datablock而已,可能会导致之前写过的数据没有保存在磁盘上.而当系统重启后,系统可能会对没有保存的数据进行数据恢复.但是,由于系统并不知道是哪个文件不完整,因此会遍历整个文件系统中inode,来查看block是否完整.不过,当某个文件的数据太大时,数据的恢复时间可能会比较长,而这对于服务器来说是不利的.所以在这种情况下,也就

linux学习之路之vim编辑器的使用

本章将介绍vim编辑器的使用 vim编辑器是vi编辑器的增强版 vim是一种全屏的编辑器,是一种模式化的编辑器,之所以称为模式化的编辑器,因为vim有多种模式. 接下来将介绍vim主要的三种模式: 编辑模式(也叫命令模式):在该模式下你可以完成字符串跳转,字符串删除,翻屏操作等操作 输入模式:在该模式下输入的任何字符都会保存在该文件中,作为文件的一部分 末行模式:在该模式下,可以实现字符串搜索,字符串替换等操作 vim编辑器的三种模式之间的相互转换 模式转换: 编辑模式-->输入模式 i:在当前

linux学习之路之文本的查找---find命令的使用

文本的查找可以使用两种方式来实现,即使用locate命令来查找和find命令来查找 那么这两种方式有什么区别呢? locate:是一种非实时查找,所谓非实时查找就是查找的不够实际,不够精确.因为locate查找是在 系统文件数据库中进行的,而数据库默认是一天更新一次,也就是说你查找的文件再数据库 更新之前查找的话,有可能找不到文件,因为那时数据库还没有去读取硬盘上的文件,所以 有些文件没有写入到数据库中. 可以收到更新数据库,使用命令updatedb 因为不上在硬盘上读取,因此速度快 locat