copy命令及库文件至/mnt/sysroot/目录shell脚本

#!/bin/bash
#

#获取目标目录
target=/mnt/sysroot

#命令copy函数
cmndcopy(){
        #假如命令不存在,return 1
        if ! which $1 &> /dev/null; then
                return 1
        fi
        #获取命令决定路径
        cmnd=$(which --skip-alias $1)
        #获取命令目录名
        cmndpath=$(dirname $cmnd)
        
        #判断命令目录名是否存在,否,则创建
        [ -d $target/$cmndpath ] || mkdir -p $target/$cmndpath
        
        #判断命令是否存在,否,则copy
        [ -e $target/$cmnd ] || cp $cmnd $target/$cmnd
        return 0
}

#库文件copy函数
libcopy(){
        #获取库文件目录名
        libpath=$(dirname $1)
        
        #判断库文件目录名是否存在,否,则创建
        [ -d $target/$libpath ] || mkdir -p $target/$libpath
        
        #判断库文件是否存在,否,则copy
        [ -e $target/$1 ] || cp $1 $target/$1
}

#提示输入要copy的命令,quit可以退出
read -p "Plz enter a command(quit for quiting):" binary

#循环copy命令,遇到quit字符推出循环
until [ $binary == "quit" ]; do
        
        #调用命令copy函数 
        cmndcopy $binary
        
        #保存命令copy函数返回值
        retval=$?
        
        #如果返回值等于0,则
        if [ $retval -eq 0 ]; then
            
                #获取命令库文件的路径
                binary=$(which --skip-alias $binary)
                
                #循环取出库文件路径
                for lib in $(ldd $binary | grep -o "/[^[:space:]]*lib[^[:space:]]*"); do
                        #调用库文件copy函数
                        libcopy $lib
                done
        
        #如果返回值不为0,则
        else
                #提示命令输入错误,并可以重新输入
                read -p "$binary is not correct, Plz enter again(quit for quiting):" binary
                #并提前结束本轮循环
                continue
        fi
        
        #再次提示输入要copy的命令,quit可以退出
        read -p "Plz enter a command(quit for quiting):" binary
done
时间: 2024-08-24 09:31:01

copy命令及库文件至/mnt/sysroot/目录shell脚本的相关文章

使用copy命令把csv文件导入postgres数据库

1. 把excel另存为csv 2. 使用txt打开csv格式 3. 以UTF-8格式编码,另存为blacklist20141231.csv 4. 创建一个表 Create table backlist_20141231(日期 varchar(20),手机号码 nvarchar(20),渠道 nvarchar(50)); 5. 使用copy命令,copy backlist_20141231 from 'd:/blacklist20141231.csv' delimiter as ',' csv

cmd copy命令 文件复制

cmd copy命令 文件复制 作者: 字体:[增加 减小] 类型:转载 时间:2009-07-05我要评论 copy,中文含义为"复制",一个很容易见名知意的命令,它的作用是复制文件,用法十分简单:copy 源文件 目的路径. 假设,你需要把d:\test\test.txt这个文件复制到D盘根目录下,那么,使用 copy d:\test\test.txt d:\ 就可以轻易办到. 当然,这是最简单的情形,在实际使用中,还是会碰到十分复杂的情况的. 如果D盘根目录下已经存在了一个名为t

关于Eclipse 和 IDEA 导入library库文件 的步骤

这里我们以PullToRefresh(上拉刷新下拉加载)组件的library为例 下载地址: https://github.com/chrisbanes/Android-PullToRefresh 现在我们需要把library文件夹导入到Eclipse或者IDEA中去 一.IDEA 导入library库文件步骤 1.首先我们要有一个项目,没有的就创建一个吧 2.右击项目名称点击Open Module Settings(F4) 3.可以看到这样的界面 接下来在中间部分 点击绿色的加号 导入Modu

《Linux命令行与shell脚本编程大全》第十七章 创建函数

可以将shell脚本代码放进函数中封装起来,这样就能在脚本中的任何地方多次使用它了. 17.1 基本的脚本函数 函数:是一个脚本代码块,可以为其命名并在代码中任何位置重用. 17.1.1 创建函数 有两种格式:name 是函数名 1) function name {          commands } 2)这种就比较接近c语言风格了 name() {          commands } 17.1.2 使用函数 跟其他shell命令一样,在行中指定函数名就好了. 在函数定义前使用函数,会收

Shell脚本与文件的执行

1.Shell脚本程序 Shell是操作系统的"外壳",Shell为用户提供操作计算机的人机交互接口.用户对计算机的所有操作以及计算机所获得数据都是由Shell管理的. Shell 一般分2类:(1).图形Shell (2)文字Shell:Shell在操作系统上面只是一个普通的应用程序,无论其形式多么复杂,可以随需要被随时替换. 我们编程研究的是文字Shell : 命令行式, 用户登录Linux系统时,就会开启一个Shell进程为该用户提供人机交互服务:用户就可以将命令提供给Shell

执行系统命令并且将输出写到指定日志文件的shell脚本(2)

上一篇是个简单的可以执行并且写入日志的脚本,但是如果放到生产环境上就显得太粗糙了,所以需要进一步的优化: #! /bin/bash if [ -d "/opt/bmc" ] ; then if [ -f "/opt/bmc/usysfault.log" ] ; then { date +"%Y-%m-%d %H:%M:%S" /usr/lpp/diagnostics/bin/usysfault #要执行的命令的绝对路径 } > /opt/b

Linux系统裁减之,制作一个极度精简的Linux-用脚本实现自动拷贝命令和依赖库文件

第2章 用脚本实现自动拷贝命令和依赖库文件 这篇文章主要是对我上一篇博文http://blog.51cto.com/linuxprince/2045703加以完善的,前一篇文章中拷贝命令和依赖库文件的过程是完全手工方式的,显得特别LOW,这章把该过程完善一下,用脚本方式实现. 2.1命令具体实现方法 创建脚本文件bincp.sh输入一下内容: #!/bin/bash # DESPATH=/mnt/sysroot libcp() { LIBPATH=${1%/*} [ ! -d $LIBPATH

小黑的日常折腾-复制外部命令的可执行文件和依赖库文件到指定目录下的对应目录

清明三天假期基本都是在写脚本中度过了,今天又折腾了一个新的脚本,该脚本的作用是快速复制一个或多个命令的可执行文件和依赖库文件到一个模拟的根文件系统下的相应目录下,这个脚本平时运维估计用不到,只有自己制作一个小的Linux发行版时才有可能使用该脚本. 脚本具体的功能如下: 1)提示用户选择要从文本中读取要复制的命令名还是从当前终端中交互式输入命令名. 2)用户选择前者,会自动使用vim打开一个文件,用户根据格式说明填入要复制的命令的名称,可以是多个命令,保存退出后自动执行复制操作. 3)用户选择后

在Ubuntu宿主机上查看ARM交叉编译好的可执行程序和库文件的相关依赖关系,类似于PC上的ldd命令

在电脑上安装的Linux系统中,有一个ldd命令,可以查看对应的可执行文件或库文件依赖哪些库,但可执行文件或库文件要求与操作系统的编译器类型相同,即电脑是X86的GCC编译器,那么无法通过ldd命令查看ARM交叉编译器编译出来的可执行文件或库文件. 如果想在Ubuntu等Linux宿主机上查看ARM交叉编译好的可执行程序和库文件的相关依赖关系,可以通过以下命令: [email protected]:$ arm-linux-readelf  -a  busybox |grep "Shared&qu