運(yùn)維Shell腳本小試牛刀(一)
運(yùn)維Shell腳本小試牛刀(二)
運(yùn)維Shell腳本小試牛刀(三)::$(cd $(dirname $0); pwd)命令詳解
運(yùn)維Shell腳本小試牛刀(四): 多層嵌套if...elif...elif....else fi_蝸牛楊哥的博客-CSDN博客
一: $(cd $(dirname $0);?pwd) 命令詳解
path = $(cd $(dirname $0); pwd)解析:
1、取當(dāng)前運(yùn)行腳本的所在路徑: $0
2、取當(dāng)前腳本所在路徑的父目錄: dirname
3、取返回的父目錄的值: $(dirname $0)
4、cd到返回的父目錄: cd “$(dirname “$0”)”
5、輸出地址: $(cd $(dirname $0); pwd)
6、取輸出的地址,并賦值給path: path = $(cd (dirname $0),pwd)
$0 獲取運(yùn)行腳本文件所在路徑,在命令行種執(zhí)行結(jié)果為 -bash
[root@www ~]# echo "$0"
-bash
二:?Linux中變量#,@,0,1,2,*,$$,$? 普及
Linux中變量#,@,0,1,2,*,$$,$?的含義
$# 是傳給腳本的參數(shù)個(gè)數(shù)
$
0
?是腳本本身的名字
$
1
?是傳遞給該shell腳本的第一個(gè)參數(shù)
$
2
?是傳遞給該shell腳本的第二個(gè)參數(shù)
$@ 是傳給腳本的所有參數(shù)的列表
$* 是以一個(gè)單字符串顯示所有向腳本傳遞的參數(shù),與位置變量不同,參數(shù)可超過
9
個(gè)
$$ 是腳本運(yùn)行的當(dāng)前進(jìn)程ID號
$? 是顯示最后命令的退出狀態(tài),
0
表示沒有錯(cuò)誤,其他表示有錯(cuò)誤
區(qū)別:@@*
- 相同點(diǎn):都是引用所有參數(shù)
- 不同點(diǎn):只有在雙引號中體現(xiàn)出來。假設(shè)在腳本運(yùn)行時(shí)寫了三個(gè)參數(shù)(分別存儲在112?3)則"3)則"*" 等價(jià)于 “112?3"(傳遞了一個(gè)參數(shù));而“3"(傳遞了一個(gè)參數(shù));而“@" 等價(jià)于 "1""1""2" "$3"(傳遞了三個(gè)參數(shù))
?小試牛刀一:?
[root@www tools]# cat commandList.sh
echo "number:$#"
echo "scname:$0"
echo "first :$1"
echo "second:$2"
echo "argume:$@"
echo "show parm list:$*"
echo "show process id:$$"
echo "show precomm stat: $?"
輸出:
[root@www example]# ./commandList.sh 1 20 111 2 5 6 7 3
number:8
scname:./commandList.sh
first :1
second:20
argume:1 20 111 2 5 6 7 3
show parm list:1 20 111 2 5 6 7 3
show process id:3465
show precomm stat: 0
?
小試牛刀二:
[root@www example]# cat commandOutList.sh
#!/bin/sh
num=$#
name=$0
echo "number:$num"
echo "scname:$name"
echo $0
echo $1
echo $2for ((i=0; i<$num; i++))
do
? ? echo "$i"
doneecho "argume:$@"
for key in $@
do
? ? echo $key
done
echo "-----------------"
for key in "$@"
do
? ? echo $key
done
echo "-----------------------------"
for key2 in $*
do?
? ? echo $key2
done
echo "-----------------"
for key2 in "$*"
do?
? ? echo $key2
doneecho "show process id:$$"
echo
echo "show precomm stat: $?"
?
輸出內(nèi)容:
[root@www example]# ./commandOutList.sh?
number:0
scname:./commandOutList.sh
./commandOutList.sh
argume:
-----------------
-----------------------------
-----------------show process id:3514
show precomm stat: 0
?
[root@www tools]#?sudo yum install rsync -y
rsync和scp區(qū)別:用rsync做文件的復(fù)制要比scp的速度快,rsync只對差異文件做更新。scp是把所有文件都復(fù)制過去。?
三: 批量拷貝腳本
創(chuàng)建分發(fā)腳本文件:
xsync? ?腳本內(nèi)容
[root@www tools]# ?cat ~/bin/xsync?
#!/bin/bash
#1. 判斷參數(shù)個(gè)數(shù)
if [ $# -lt 1 ]
then
? ? echo Not Enough Arguement!
? ? exit;
fi
#2. 遍歷集群所有機(jī)器|docker0|docker1|docker2|?
for host in docker0 docker1 docker2
do
? ? echo ==================== ?$host ?====================
? ??
? ? #3. 遍歷所有目錄,挨個(gè)發(fā)送
? ? for file in $@
? ? do
? ? ? ? #4. 判斷文件是否存在
? ? ? ? if [ -e $file ]
? ? ? ? ? ? then
? ? ? ? ? ? ? ? #5. 獲取父目錄
? ? ? ? ? ? ? ? pdir=$(cd -P $(dirname $file); pwd)
? ? ? ? ? ? ? ? #6. 獲取當(dāng)前文件的名稱
? ? ? ? ? ? ? ? fname=$(basename $file)
? ? ? ? ? ? ? ? ssh $host "mkdir -p $pdir"
? ? ? ? ? ? ? ? rsync -av $pdir/$fname $host:$pdir
? ? ? ? ? ? else
? ? ? ? ? ? ? ? echo $file does not exists!
? ? ? ? fi
? ? done
done
?
小試牛刀一:
將jdk分發(fā)到docker1,docker2服務(wù)器上
[root@www bin]# ./xsync ?/usr/local/tools/jdk-8u371-linux-x64.tar.gz ?
==================== docker0 ====================
sending incremental file listsent 66 bytes ?received 12 bytes ?156.00 bytes/sec
total size is 139,219,380 ?speedup is 1,784,863.85
==================== docker1 ====================
sending incremental file list
jdk-8u371-linux-x64.tar.gzsent 139,253,473 bytes ?received 35 bytes ?39,786,716.57 bytes/sec
total size is 139,219,380 ?speedup is 1.00
==================== docker2 ====================
sending incremental file list
jdk-8u371-linux-x64.tar.gzsent 139,253,473 bytes ?received 35 bytes ?39,786,716.57 bytes/sec
total size is 139,219,380 ?speedup is 1.00
小試牛刀二:[root@www bin]# ./xsync /usr/local/zookeeper/
將解壓后的zookeeper文件全拷貝到docker1|docker2機(jī)器:
[root@www bin]# ./xsync /usr/local/zookeeper/
==================== docker0 ====================
sending incremental file listsent 61,605 bytes ?received 227 bytes ?123,664.00 bytes/sec
total size is 390,744,347 ?speedup is 6,319.45
==================== docker1 ====================
sending incremental file listsent 61,613 bytes ?received 235 bytes ?123,696.00 bytes/sec
total size is 390,744,347 ?speedup is 6,317.82
==================== docker2 ====================
sending incremental file list文章來源:http://www.zghlxwxcb.cn/news/detail-683474.htmlsent 61,613 bytes ?received 235 bytes ?123,696.00 bytes/sec
total size is 390,744,347 ?speedup is 6,317.82
?
?文章來源地址http://www.zghlxwxcb.cn/news/detail-683474.html
到了這里,關(guān)于運(yùn)維Shell腳本小試牛刀(三)::$(cd $(dirname $0); pwd)命令詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!