Shell脚本编程中作业

一、作业:

1、1、编写服务脚本/root/bin/testsrv.sh,完成如下要求

(1) 脚本可接受参数:start, stop, restart, status

(2) 如果参数非此四者之一,提示使用格式后报错退出

(3) 如是start:则创建/var/lock/subsys/SCRIPT_NAME, 并显示“启动成功”

考虑:如果事先已经启动过一次,该如何处理?

(4) 如是stop:则删除/var/lock/subsys/SCRIPT_NAME, 并显示“停止完成”

考虑:如果事先已然停止过了,该如何处理?

(5) 如是restart,则先stop, 再start

考虑:如果本来没有start,如何处理?

(6) 如是status, 则如果/var/lock/subsys/SCRIPT_NAME文件存在,则显示“SCRIPT_NAMEis running…”

如果/var/lock/subsys/SCRIPT_NAME文件不存在,则显示“SCRIPT_NAME is stopped…”

其中:SCRIPT_NAME为当前脚本名

#!/bin/bash
#
# descriptio: test service scripts
prog=$(basename $0)
lockfile=/var/lock/subsys/$prog

start() {
   if [ -e $lockfile ]; then
       echo "$prog is aleady running."
       return 0
     else
       touch $lockfile
       [ $? -eq 0 ] && echo "Starting $prog finished."
   fi
}

stop() {
   if [ -e $lockfile ];then
       rm -f $lockfile && echo "Stop $prog ok."
     else
       echo "$prog is stopped yet."
   fi
}

status() {
   if [ -e $lockfile ];then
       echo "$prog is running." 
     else
       echo "$prog is stopped."
   fi
}

usage() {
     echo "Usage: $prog {start|stop|restart|status}"
}

if [ $# -lt 1 ];then
     usage
     exit 1
fi

case $1 in
start)
       start
       ;;
stop)
       stop
       ;;
restart)
       stop
       start
       ;;
status)
       status
       ;;
*)
       usage
esac

2、编写脚本/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退出

#!/bin/bash
#

ch_root="/mnt/sysroot"
[ ! -d $ch_root ] && mkdir $ch_root

bincopy() {
     if which $1 &> /dev/null; then

        local cmd_path=`which --skip-alias $1`
        local bin_dir=`dirname $cmd_path`
        [ -d ${ch_root}${bin_dir} ] || mkdir -p ${ch_root}${bin_dir}
        [ -f ${ch_root}${cmd_path} ] || cp $cmd_path ${ch_root}${bin_dir}
        return 0
     else
        echo "Command not found."
        return 1
     fi
}

libcopy() {
     local lib_list=$(ldd `which --skip-alias $1` | grep -Eo '/[^[:space:]]+')
     for loop in $lib_list;do
         local lib_dir=`dirname $loop`
        [ -d ${ch_root}${lib_dir} ] || mkdir -p ${ch_root}${lib_dir}
        [ -f ${ch_root}${loop} ] || cp $loop ${ch_root}${lib_dir}
     done
}

read -p "Please input a command: " command

while [ "$command" != "quit" ];do
     if bincopy $command ;then
          libcopy $command
     fi
     read -p "Please input a command or quit: " command
done

3、汉诺塔(又称河内塔)问题是源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

利用函数,实现N片盘的汉诺塔的移动步骤

#!/bin/bash
#

step=0
hanoi() {
         [[ ! $1 =~ ^[1-9][0-9]*$ ]] && echo "error! please input a positive interger" && exit
         if [ $1 -eq 1 ]; then
                let step++
                echo "$step:  move plate $1   $2 ----> $4"
         else
                hanoi "$[$1-1]" $2 $4 $3
                let step++
                echo "$step:  move plate $1   $2 ----> $4"
                hanoi  "$[$1-1]" $3  $2  $4
         fi
}

read -p "please input the number of plates: " number
hanoi $number A B C

原创文章,作者:Aleen,如若转载,请注明出处:http://www.178linux.com/37241

(0)
AleenAleen
上一篇 2016-08-24 21:22
下一篇 2016-08-24 21:22

相关推荐

  • linux-系统自动化安装

    一、安装程序及配置 CentOS 系统安装 系统启动流程: bootloader–>kernel(initramfs)–>rootfs–>/sbin/init anaconda: 系统安装程序 tui:  基于图形库curses 的文本 窗口 gui :图形窗口 安装程序启动过程 MB…

    Linux干货 2016-09-26
  • IP地址的三种表示格式及在Socket编程中的应用

       使用TCP/IP协议进行网络应用开发的朋友首先要面对的就是对IP地址信息的处理。IP地址其实有三种不同的表示格式:        1)Ascii(网络点分字符串)-        2) 网络地址(32位无符号整形,网络字节序,大头) &nbsp…

    Linux干货 2015-04-10
  • 高级文件系统管理2

    五、btrfs文件系统     技术预览版     Btrfs (B-tree, Butter FS, Better FS), GPL, Oracle,2007, CoW     核心特性:     …

    Linux干货 2016-09-09
  • 计算机基础入门及Pyhton基础

    编程基础 计算机基础 程序(program识别并执行的指令 计算机是执行程序的机器 现代计算机 艾伦·麦席森·图灵奠定了现在计算机的逻辑工作方式的基础 冯·诺依曼提出计算机应该有五大部件组成:输入/输出设备、运算器、控制器、输出设备。这是现代计算机基本框架。 语言基础 计算机语言:与计算机之间交互的语言 机器语言:一定位数的二进制代码成为机器指令,指令集合则…

    2017-09-16
  • N26-第三周作业-邢岩

    马哥门徒-N26-邢岩   “精深练习×一万小时=世界级技能”。髓鞘质是不可逆的,就让我们包裹一层厚厚的髓鞘质吧!今天继续我的练习。   第一题,列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可  ~]# who | cut -d' ' -f1 | sort -u &nbs…

    Linux干货 2017-02-14
  • bash脚本之练习

    1、编写服务脚本/root/bin/testsrv.sh,完成如下要求  (1) 脚本可接受参数:start, stop, restart, status  (2) 如果参数非此四者之一,提示使用格式后报错退出 (3) 如是start:则创建/var/lock/subsys/SCRIPTNAME, 并显示“启动成功” 考虑:如果事先已经启…

    Linux干货 2016-08-24