生活随笔
收集整理的這篇文章主要介紹了
轻松实现远程批量拷贝文件脚本(女学生作品)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
????下面是來自老男孩培訓初級第14期第六節課的批量分發管理服務器課程的女學生的作品(詳細注釋)
在大多數男同學還在迷糊的時候,該女同學已經完整的讀懂并注釋了全部的腳本,老男孩非常感慨,大家都有此努力的學習態度何愁運維不牛呢?
腳本內容及注釋如下:
[binzai@ssh-server scripts]$ cat fenfa_host.sh #→實現把腳本當前目錄下的文件拷貝到所有服務器的任意目錄
#!/bin/sh
. /etc/init.d/functions
file="$1" #→傳參文件
remote_dir="$2" #→遠程服務器目錄
if [ $# -ne 2 ];then #→如果傳的參數不等于2個,那么就打印如下報錯信息。
#→ $#:獲取當前shell命令行中的參數的總個數
#→ -ne:不等于
echo "usage:$0 argv1 argv2"
#→$0:首個參數(fenfa_host.sh)
echo "must have two argvs."
exit
fi
for ip in $(cat /home/binzai/scripts/all_iplist.txt)
#→$():在腳本里引用全局變量
do
scp -P22 -r -p $file binzai@$ip:~ >/dev/null 2>&1 &&\
#→將hosts文件傳到binzai家目錄下,如果沒有傳遞過去,將丟棄到/dev/null
ssh -p 22 -t binzai@$ip sudo rsync -avz -P $file $remote_dir >/dev/null 2>&1
#→通過ssh通道執行sudo命令將hosts文件拷貝到/etc目錄下
if [ $? -eq 0 ];then #→如果上次執行結果返回值等于0,則執行OK。如果不等于0,則執行NO
#→$?:上次執行結果的返回值
#→-eq:等于
action "$ip is successful." /bin/true
else
action "$ip is failure." /bin/false
fi
done
?補充shell變量知識:$0?獲取當前執行的shell腳本的文件名,包括路徑$n?獲取當前執行的shell腳本的第n個參數值,n=1..9,當n為0時表示腳本的文件名,如果n大于9用大括號括起來?{10}$*?獲取當前shell的所有參數,將所有的命令行參數視為單個字符串,相當于“$1$2$3”…….注意與$
#的區別$
#?獲取當前shell命令行中參數的總個數$@?這個程序的所有參數”$1”?“$2”?“$3”?“……”?,這是將參數傳遞給其他程序的最佳方式,因為他會保留所有內嵌在每個參數里的任何空白。$??是上次執行結果的返回值0是正確,非0是錯誤$()是引用全局命令(在腳本里面引用命令)
執行效果:
老男孩老師補充:
1)以上為基礎的腳本,沒什么難度,主要是感慨下學生的努力態度。
2)本腳本需要借助SSH?KEY或者補充expect實現。
同期其他同學作品
http://oldboy.blog.51cto.com/2561410/1206238
批量分發管理三種解決方案案例視頻分享(老男孩主講)
http://oldboy.blog.51cto.com/2561410/824931
?
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的轻松实现远程批量拷贝文件脚本(女学生作品)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。