1. 程式人生 > >複製命令的Shell指令碼編寫示例

複製命令的Shell指令碼編寫示例

編寫指令碼/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
#------------------------------------------
# Filename:copycmd72.sh 
# Revision:1.0 
# Date:2017-09-11 
# Author:156
# Email:[email protected]
# Description:用於複製命令和他的庫檔案到/mnt/sysroot/目錄下。
#------------------------------------------
#判斷使用者輸入的命令是不是命令
com() {
    local var1
    man $1 &>/dev/null
    var1=$?
    if
[ $var1 -eq 0 ];then return 0 else echo -e "\terror,找不到\e[33m${1}命令\e[0m,您請確認!" return 1 fi } #判斷命令是內部命令還是外部命令 encmd() { local var2=`type $1` local var3=`echo $var2 | grep -o "builtin"` if [ -n "$var3" ];then echo -e "\terror,\e[34m${CMD}是內部命令\e[0m,不可以複製!"
return 1 else return 0 fi } #判斷檔案型別的函式 filetype() { file=`ls -l $1 | grep -o "^."` case $file in -) return 0 ;; d) return 1 ;; l) return 2 ;; esac } #建立目錄的函式 createdir() { local dirnm=`dirname $1` mkdir -p ${Dir}${dirnm} targetdir=${Dir}${dirnm} return 0 } #複製檔案的函式 copy() { filetype $1 local ft=$? if [ $ft -eq 0 ];then createdir $1 cp -pdr $1 $targetdir &> /dev/null echo -e "\t\t$1\t\c" echo -e "========>\t\c" echo -e "\e[31m${targetdir}\e[0m" return 0 elif [ $ft -eq 2 ];then createdir $1 cp -pdr $1 $targetdir &> /dev/null echo -e "\t\t$1\t\c" echo -e "========>\t\c" echo -e "\e[31m${targetdir}\e[0m" lianjiewenjian=$(locate `ls -l $1 | cut -d " " -f 11`) copy $lianjiewenjian fi } Dir="/mnt/sysroot" mkdir -p $Dir while true;do read -p "請輸入一個您想要複製的命令(quit:退出):" cmd CMD=`basename $cmd` if [ "$CMD" == "quit" ];then exit 1 fi com $CMD if [ $? == 0 ];then encmd $CMD encmd=$? if [ $encmd -eq 0 ];then #因為在腳本里面不可以執行別名所以,不需要varA=`which ls | grep "^[[:space:]]" | grep -o "/.*"` varA=`which $CMD` echo -e "\t\e[5;31m${CMD}命令\e[0m正在複製……" copy $varA for A in `for i in $(ldd $varA);do echo $i ;done | grep -o "/.*"` ;do copy $A done echo -e "\t\e[5;31m${CMD}命令\e[0m複製結束!" fi fi done

這裡寫圖片描述

這裡寫圖片描述
小編剛接觸linux,水平一般,指令碼中的內容也比較冗雜,該部落格的目的只是為了給大家一個思路,希望能起到拋磚引玉的效果。

相關推薦

複製命令Shell指令碼編寫示例

編寫指令碼/root/bin/copycmd.sh: (1) 提示使用者輸入一個可執行命令名稱 (2) 獲取此命令所依賴到的所有庫檔案列表 (3) 複製命令至某目標目錄(例如/mnt/sysroo

批量複製及執行命令shell指令碼

平時在處理一個或幾個機器執行環境時,一個機器一個機器處理也能接受,但是如果是一批機器,幾十或幾百臺,要是一臺一臺去安裝環境,光是輸入同一的命令,估計你自己都想吐,所有聰明的人會想一些偷懶的辦法,確實可以找到一些省時省力的方法,比如寫一個批量處理shell指令碼,這幾天在處理一批(八九十臺)機器環境,找了一些批

Linux系統——shell指令碼應用示例

傳入一個網段地址,自動找出本網段記憶體活的IP地址。2,將存活的IP地址當作密碼來建立Linux使用者,使用者名稱格式為:你的名字_數字 3,有幾個存活IP地址,就自動建立幾個使用者   4,最後將建立的使用者名稱和密碼寫入到/tmp目錄下的某檔案裡 (1)找存活的ip (2)將ip去

shell指令碼編寫改密功能

#! /bin/bash read -p "請輸入修改的使用者名稱" user num=` cat /etc/passwd | cut -f1 -d':' |grep -w $user -c ` #查詢user是否在/etc/passwd ,並計算個數 #grep -q "$usern

[一天幾個linux命令] shell指令碼之正則表示式

shell指令碼之正則表示式 原文連結:Linux–shell指令碼之正則表示式 概念及特點 概念 正則表示式是對字串操作的一種邏輯公式,就是用事先定義好的一些特定的字元、及這些特定字元的組合,組成一個"規則字串",這個"規則字串"用來表達對字串的一種過濾邏輯。規定一些特殊語

Shell指令碼編寫可能遇到的問題

      在編寫shell指令碼過程中,由於格式和語法問題,可能導致執行指令碼不成功。 梳理一些可能的原因如下: 1. No such file or directory沒有那個檔案或目錄問題分析: 1、將windows 下編寫好的SHELL檔案,傳到linu

10 個實戰及面試常用 Shell 指令碼編寫

注意事項 1)開頭加直譯器:#!/bin/bash 2)語法縮排,使用四個空格;多加註釋說明。 3)命名建議規則:變數名大寫、區域性變數小寫,函式名小寫,名字體現出實際作用。 4)預設變數是全域性的,在函式中變數local指定為區域性變數,避免汙染其他作用域。 5)有兩個命令能幫助我除錯指令碼:set -e

shell指令碼編寫流程!!!

ubuntu終端:ctrl +art + T  cd /home/thomas 到thomas目錄下 一、vi bigdata.sh 開啟vim編輯器 二、i 輸入內容 #!/bin/bash echo  Hadoop Hive Hbase

emmc分割槽指令碼編寫示例

一 sfdisk指令碼例項 1.1 例項指令碼 #!/bin/sh #mmcblk1p01 boot BOOT_SYSTEM_OFFSET=10 ROOT_SYSTEM_SIZE=90 #mmcblk1p2 rootfs M

Shell 程式設計 shell 指令碼編寫

原創轉載自 自海牛部落-青牛,http://hainiubl.com/topics/173 1 Vim 編輯器 1.1 vim 常用命令 1.2 針對程式設計師的vim 配置 配置方式: /etc/vimrc 全域性配置 ~/.vimrc 使用者級配置 ~/.vimin

Linux入門學習筆記(五)--Shell指令碼編寫

Shell指令碼的HelloWorld:     cd /自己的路徑下     vi helloworld.sh 進入之後,預設是命令狀態,按i進入編輯模式     內容:         #! /bin/bash         echo "Hello World!"   

一個很牛的 linux shell指令碼編寫的俄羅斯方塊遊戲例項程式碼,非常牛逼

可以將下面程式碼直接儲存為sh檔案。 #!/bin/bash   # Tetris Game # 10.21.2003 xhchen< [email][email protected][/email]>   #APP declaration

8個實戰及常用Shell指令碼編寫

注意事項: 1).開頭加直譯器:#!/bin/bash 2).語法縮排,使用四個空格,多加註釋說明 3).命名建議規範:變數名大寫,區域性變數小寫,函式名小寫 4).預設變數是全域性的,函式中使用local指定區域性變數 5).除錯指令碼兩個命令:set -e遇

Linux Shell指令碼編寫規範、例子

一、規範 Linux的Shell種類眾多,常見的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell(/usr/bin/ksh)、She

shell指令碼編寫注意

這八個建議,來源於鍵者幾年來編寫 shell 指令碼的一些經驗和教訓。事實上開始寫的時候還不止這幾條,後來思索再三,去掉幾條無關痛癢的,最後剩下八條。毫不誇張地說,每條都是精挑細選的,雖然有幾點算是老生常談了。 1. 指定bash shell 指令碼的第一行,#!之後應該是什麼?如果拿

一個簡單的linux下設定定時執行shell指令碼示例

很多時候我們有希望伺服器定時去執行一個指令碼來觸發一個操作,比如說定時去備份伺服器資料、資料庫資料等 不適合人工經常做的一些操作這裡簡單說下 shell Shell俗稱殼,類似於DOS下的command和後來的cmd.exe。它接收使用者命令,然後呼叫相應的應用程式。作為命

關於python指令碼完整打包釋出(包括外部傳參的批處理指令碼shell指令碼編寫

在python處理簡單問題的過程中常常需要對Python指令碼打包成exe的可執行程式。並且要可移植。而最常用的方法則是用pyinstaller在dos視窗下進行打包。因為常常需要對exe檔案進行傳送外部引數由此路徑會發生錯誤。此時最為簡單的方法則是用文字編輯器開啟,修改編碼方式。詳細過程如

Shell指令碼編寫常用——————持續更新

Linux指令碼 source命令與點命令 單純執行shell指令碼./a.sh,  並不能把指令碼中定義的變數匯入到父shell中, 必須用source的方式執行才可以 $0 $? $#... h

mongodb資料庫備份和利用shell指令碼編寫

1、指令備份 MongoDB提供了備份工具,mongodump.exe,在bin目錄下,其用法如下: mongodump.exe-hlocalhost-ddatabase_name -u use

IC數字前端設計開發18 (用shell指令碼編寫區別兩個資料夾內檔案的不同)

#!/bin/bash mkdir tmp basedir="./tmp" workdir="./" #這是定義兩個目錄,按照你的說法,這兩個目錄下檔名應該都是相同的 dir1="txt_test0" dir2="txt_test1" #這是用來儲存查詢di