49.编写脚本/root/bin/copycmd.sh
(1)提示用户输入一个可执行命令名称
(2)获取此命令所依赖到的所有库文件列表
(3)赋值命令至某目标目录(例如/mnt/sysroot)下的对应路径下
如:/bin/bash ==> /mnt/sysroot/bin/bash
/usr/bin/passwd ==> /mnt/sysroot/usr/bin/passwd
(4)复制此命令依赖到的所有库文件至目标目录下的对应路径下: 如:/lib64/ld-linux-x86-64.so.2 ==> /mnt/sysroot/lib64/ld-linux-x86-64.so.2
(5)每次复制完成一个命令后,不要退出,而是提示用户键入新的要复制的命令,并重复完成上述功能;直到用户输入 quit退出
[root@centos8 ~]# vim copycmd.sh
#!/bin/bash
#
#**********************************************************************************************
#Author: Raymond
#QQ: 88563128
#Date: 2021-10-21
#FileName: copycmd.sh
#URL: raymond.blog.csdn.net
#Description: The test script
#Copyright (C): 2021 All rights reserved
#**********************************************************************************************
read -p "please input a excute cmd(eg:cat|bash|quit):" command
[ -a /mnt/sysroot ]||mkdir /mnt/sysroot &>/dev/null
cpdir () {
cmd=`which --skip-alias $command`
if [ -f /mnt/sysroot$cmd ];then
echo "the $cmd has been cp before"
else
local dir=`dirname $cmd`
mkdir -p /mnt/sysroot$dir
cp $cmd /mnt/sysroot$cmd
echo "cp $cmd finished"
fi
}
cplib () {
cmd=`which --skip-alias $command`
ldd $cmd |egrep -o "/lib64.* "|while read i;do
if [ ! -f /mnt/sysroot$i ];then
local dir=`dirname $i`
mkdir -p /mnt/sysroot$dir
cp $i /mnt/sysroot$i
echo "cp $i finished"
else
echo "$i has been cp before"
fi
done
}
type $command&>/dev/null||{
echo the command is not exsit;exit 100; }
until [ $command == quit ];do
type $command&>/dev/null||{
echo the command is not exsit;exit 100; }
cpdir
cplib
read -p "please input new excute cmd(eg:cat|bash|quit):" command
cmd=`which --skip-alias $command`
done
[root@centos8 ~]# bash copycmd.sh
please input a excute cmd(eg:cat|bash|quit):ls
cp /usr/bin/ls finished
cp /lib64/libselinux.so.1 finished
cp /lib64/libcap.so.2 finished
cp /lib64/libc.so.6 finished
cp /lib64/libpcre2-8.so.0 finished
cp /lib64/libdl.so.2 finished
cp /lib64/ld-linux-x86-64.so.2 finished
cp /lib64/libpthread.so.0 finished
please input new excute cmd(eg:cat|bash|quit):cd
cp /usr/bin/cd finished
please input new excute cmd(eg:cat|bash|quit):pwd
cp /usr/bin/pwd finished
/lib64/libc.so.6 has been cp before
/lib64/ld-linux-x86-64.so.2 has been cp before
please input new excute cmd(eg:cat|bash|quit):rm
cp /usr/bin/rm finished
/lib64/libc.so.6 has been cp before
/lib64/ld-linux-x86-64.so.2 has been cp before
please input new excute cmd(eg:cat|bash|quit):quit
which: no quit in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
[root@centos8 ~]# tree /mnt/sysroot/
/mnt/sysroot/
├── lib64
│ ├── ld-linux-x86-64.so.2
│ ├── libcap.so.2
│ ├── libc.so.6
│ ├── libdl.so.2
│ ├── libpcre2-8.so.0
│ ├── libpthread.so.0
│ └── libselinux.so.1
└── usr
└── bin
├── cd
├── ls
├── pwd
└── rm
3 directories, 11 files
50.裴波那契数列又称黄金分割数列,因数学家列昂纳多·裴波那契以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、…,裴波那契数列以如下被以递归的方法定义:F (0) =0,F (1) =1,F (n) =F(n-1)+F(n-2) (n≥2),利用函数,求n阶裴波那契数列
[root@centos8 ~]# vim fibonacci.sh
#!/bin/bash
#
#**********************************************************************************************
#Author: Raymond
#QQ: 88563128
#Date: 2021-10-21
#FileName: fibonacci.sh
#URL: raymond.blog.csdn.net
#Description: The test script
#Copyright (C): 2021 All rights reserved
#**********************************************************************************************
fibonacci(){
tmp=$1
if [ $tmp -le 2 ];then
echo 1
else
F1=`fibonacci $[tmp-1]`
F2=`fibonacci $[tmp-2]`
echo $[F1+F2]
fi
}
fibonacci $1
[root@centos8 ~]# bash fibonacci.sh 10
55
[root@centos8 ~]# bash fibonacci.sh 15
610