bash腳本之練習

1、編寫服務腳本/root/bin/testsrv.sh,完成如下要求 

(1) 腳本可接受參數:start, stop, restart, status 

(2) 如果參數非此四者之一,提示使用格式后報錯退出

(3) 如是start:則創建/var/lock/subsys/SCRIPTNAME, 并顯示“啟動成功” 考慮:如果事先已經啟動過一次,該如何處理?

(4) 如是stop:則刪除/var/lock/subsys/SCRIPTNAME, 并顯示“停止完成” 考慮:如果事先已然停止過了,該如何處理?

(5) 如是restart,則先stop, 再start 考慮:如果本來沒有start,如何處理?

(6) 如是status, 則如果/var/lock/subsys/SCRIPTNAME文件存在,則顯示“SCRIPTNAMEis running…” 如果/var/lock/subsys/SCRIPTNAME文件不存在,則顯示“SCRIPTNAME isstopped…” 

其中:SCRIPT_NAME為當前腳本名

[root@localhost shel]# cat testsrv.sh
#!/bin/bash
#
#discription:server test script

cat << EOF
start)start succeed
stop)stop finished
restart)frist stop then start
status)running... or stopped...
==================================
EOF
read -p "input your chose: " n
prog=$(basename $0)
file=/var/lock/subsys/$prog

start(){
    if [ -f $file ];then
        echo "service is running."
    else
        touch $file
        echo "start succeed."
    fi
}   
stop(){
    if [ -f $file ];then
        rm -f $file
        echo "stop succeed."
    else
        echo "stop already."
    fi
}
status(){
    if [ -f $file ];then
        echo "$file is running..."
    else
        echo "$file is stopping..."
    fi
}
other(){
    echo "select error."
    exit
}
case $n in
start)
    start;;
stop)
    stop;;
restart)
    stop
    start;;
status)
    status;;
*)
    other;;
esac

2、編寫腳本/root/bin/copycmd.sh 

(1) 提示用戶輸入一個可執行命令名稱; 

(2) 獲取此命令所依賴到的所有庫文件列表 

(3) 復制命令至某目標目錄(例如/root/testdir)下的對應路徑下; 如:/bin/bash ==> /root/testdir/bin/bash /usr/bin/passwd==> /root/testdir/usr/bin/passwd 

(4) 復制此命令依賴到的所有庫文件至目標目錄下的對應路徑下: 如:/lib64/ld-linux-x86-64.so.2 ==> /root/testdir/lib64/ld-linux-x86-64.so.2 

(5)每次復制完成一個命令后,不要退出,而是提示用戶鍵入新的要復制的命令,并重復完成上述功能;直到用戶輸入quit退出

[root@localhost shell]# cat copycmd.sh
#!/bin/bash
#
read -p "enter an execute command: " n
load=$(whereis -b $n | cut -d ' ' -f 2)

command(){
        dir=$(dirname $load)
        mkdir -p /root/testdir$dir
        cp -r $load /root/testdir$dir
}
library(){
        libload=$(ldd $load | cut -d '>' -f 2 | cut -d '(' -f 1)
        dir1=$(dirname $libload)
        dir2=$(echo $dir1 | cut -d ' ' -f 1)
        mkdir -p /root/testdir$dir2
        cp -r $libload /root/testdir$dir2

}
while true;do
    command
    library
    read -p "enter an execute command: " n
    if [ "$n" == "quit" ];then
        echo "command finish."
        exit
    fi
done

原創文章,作者:pao,如若轉載,請注明出處:http://www.www58058.com/38966

(0)
paopao
上一篇 2016-08-24
下一篇 2016-08-24

相關推薦

  • RPM程序包管理器及其前端工具YUM

    RPM:     RPM,Redhat Package Manager,RPM is Package Manager 功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操作 1)RPM包的命名 2)RPM包文件的組成   &nb…

    Linux干貨 2016-08-21
  • 優云云監控:先定一個運維小目標,比方監控它10000臺主機

    “想做世界最好是對的,但是最好先定一個能達到的小目標,比方說我先掙它一個億?!?,王首富云淡風輕地給各行各業提供了一個很好的Roadmap,包括我們運維。的確,如今數據中心的規模增長速度也已像一匹脫韁的野馬,各地都頻頻建設起超大型數據中心。按工信部的定義,超大型是指規模大于等于一萬個標準機架的數據中心,考慮到虛擬化技術的使用,實際上需要運維的主機規模很容易超過…

    系統運維 2016-12-05
  • xen虛擬機實時遷移

    前言:  xen虛擬機提供了一種類似于heartbeat高可用方案,在保證也不中斷的業務情況下實現虛擬機遷移技術。在保證虛擬機上的服務正常的情況下將運行中的Domain遷移到其他機器上,實現xen虛擬機的高可用。 一、實驗準備:  (1)各個測試機之間時間要同步  (2)node3提供iscsi網絡共享存儲  (4)n…

    Linux干貨 2015-08-27
  • 0812作業

    練習題 1、查找/var目錄下屬主為root,且屬組為mail的所有文件 ?2、查找/var目錄下不屬于root、lp、gdm的所有文件 ?3、查找/var目錄下最近一周內其內容修改過,同時屬主不為root,也不是postfix的文件 ?4、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件 ?5、查找/etc目錄下大于1M且類型為普通文件的所有文…

    Linux干貨 2016-08-15
  • Openssl——為你的信息保駕護航

    OpenSSL基礎 ·傳輸層協議:TCP,UDP,SCTP         port:進程地址,進程向內核注冊使用某端口(獨占) ·同一主機上的進程間通信:IPC,message queue,shm,semerphor ·不同主機上的進程間通信:socket  &nbs…

    Linux干貨 2016-09-22
  • Linux網絡屬性配置

      如何將linux主機接入到TCP/IP網絡中:     第一步:         配置IP/NETMASK(ip地址、子網掩碼):本地通信     第二步:   &n…

    Linux干貨 2016-12-16
欧美性久久久久