複製命令的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