首先介绍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学习之路之使用脚本来复制二进制程序和所需的库文件