S25.shell脚本每日一练

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

猜你喜欢

转载自blog.csdn.net/qq_25599925/article/details/126772731