您的位置:首页 > 运维架构 > Shell

10月7号,shell脚本完善版

2012-10-08 20:48 176 查看
不废话,代码如下

#!/bin/bash
#Author: MOS
#Script name: demo1.sh
#Date & Time: 2012-10-08/18:59:09
#Version: 1.0.2
#Description:
#
[ ! -d /media/sysroot ] && echo "Error! No such /media/sysroot." && exit 1        #保证此目录存在,否则退出,上篇提到,这个是挂载微系统的根目录
CPC(){        #定义函数名
Cp='/media/sysroot'
Rcom=${1:-passwd}        #这个是测试默认值,用的passwd命令…
if which $Rcom &> /dev/null ;then        #如果命令是错误的,直接函数跳转2出去,如果正确,则执行如下
Res=`which $Rcom|grep -o "/.*bin.*"`        #考虑到命令可能有别名,截取有效值
Path=`echo ${Res%/*}`        #截取命令的路径,去除命令名
Com=`echo ${Res##*/}`        #仅截取所需命令
[ -d $Cp$Path ] || mkdir -p $Cp$path        #如果目标命令路径不存在,则创建
[ ! -f $Cp$Res ] && cp $Res $Cp$Res || return 3        #如果命令存在,则跳转3出去,没有则复制
else
return 2
fi

Lres=(`ldd $Res|grep -o "/.*lib.*"|cut -d" " -f1`)        #截取命令库文件,赋值给数组Lres
for i in ${Lres[*]}; do        #遍历数组
[  -f $Cp$i ] && echo "have $Cp$i,cp next." && continue        #如果此库文件已存在,则提示有,跳转到下次循环,若无,则执行如下
Lpath=`echo ${i%/*}`        #截取库文件名字
[ -d $Cp$Lpath ] || mkdir -p $Cp$Lpath        #检查若无目标目录,则创建
cp $i $Cp$i        #复制库文件到目标目录
done
}
read -p "A Command": Command        #读取输入命令
CPC $Command        #将命令传给函数
Return=$?        #获取函数跳转值
[ $Return -eq 2 ] && echo "Error!Invalid command --> $Command" && exit 2        #如果函数跳转值为2,则提示输入的命令无效,设置脚本退出状态为2
[ $Return -eq 3 ] && echo "$Command <---already exist!!" && exit 3        #如果函数跳转值为3,则提示输入的命令已存在,设置脚本退出状态为3


以上就是脚本内容,暂时没感觉有太大问题,测试都已通过了…个人感觉,如果您已经有命令,但是没有库文件,这个可能会不起作用…这个如果真需要的话,可以将下面的循环单独分离出来,再做个仅复制库文件的即可,或者,把跳转去掉和if稍微修改一下,即使命令存在,也依然进行遍历,也行…要预习课程了,不折腾了.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息