Created
December 16, 2011 02:48
-
-
Save i97506051502/1484198 to your computer and use it in GitHub Desktop.
copy file (or directory) to server(s)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
######################################################################## | |
# | |
# Name: | |
# copyagent.sh | |
# | |
# Description: | |
# copy file (or directory) to server(s) | |
# | |
# Last Modified: | |
# 2011/12/15 | |
# | |
# Authored by Go Sato (ZOOM DESIGN Inc.) | |
# | |
######################################################################## | |
# 関数定義 | |
# ---------------------------------------------------------------------- | |
function showUsage() { | |
echo "使用方法は以下のとおりです." | |
echo "./copy.sh -h コピー先の IP アドレス -f コピーするファイル名のフルパス ユーザー名" | |
echo "./copy.sh -h コピー先の IP アドレス -d コピーするディレクトリ名のフルパス ユーザー名" | |
echo "./copy.sh -l コピー先の IP アドレスのリストファイル -f コピーするファイル名のフルパス ユーザー名" | |
echo "./copy.sh -l コピー先の IP アドレスのリストファイル -d コピーするディレクトリ名のフルパス ユーザー名" | |
echo "! - IP アドレスのリストファイルは copyr.sh と同じディレクトリに配置してください。" | |
exit 1 | |
} | |
function copyErrorCheck() { | |
if [ $? -eq 0 ]; then | |
echo 'コピーに成功しました.' | |
exit 0 | |
elif [ $? -eq 1 ]; then | |
echo 'コピーに失敗しました.' | |
exit 1 | |
fi | |
} | |
# 引数の個数チェック | |
# ---------------------------------------------------------------------- | |
if [ $# -lt 5 ]; then | |
echo "引数が不足しています." | |
showUsage | |
elif [ $# -ge 6 ]; then | |
echo "引数が多過ぎます." | |
showUsage | |
else | |
# 変数の設定 | |
# ---------------------------------------------------------------------- | |
targetOption=$1 | |
TARAGET=$2 | |
# IP アドレスのリストの存在確認 カレントに ipAddressList.txt があるかチェック | |
# ---------------------------------------------------------------------- | |
CurrentDir=`pwd` | |
if [ ! -e $CurrentDir/ipAddressList.txt ]; then | |
echo "カレントディレクトリに ipAddressList.txt がありません." | |
exit 1 | |
else | |
# 第二引数が IP アドレスであるかどうかのチェック(不十分!) | |
# ---------------------------------------------------------------------- | |
# IP アドレスかどうかを正規表現でチェックする Perl スクリプトを実行 | |
#if [ $1 == '-h' ]; then | |
case $1 in | |
'-h' ) | |
/usr/bin/perl ~/checkIfIpAddress.pl $2 | |
if [ $? -eq 1 ]; then | |
echo "第二引数が IP アドレスではありません." | |
exit 1 | |
fi | |
break ;; | |
'-l' ) | |
break ;; | |
esac | |
objectOption=$3 | |
OBJECT=$4 | |
USER=$5 | |
# ユーザーの存在確認 | |
# ---------------------------------------------------------------------- | |
echo "以下のユーザーにてコピーします." | |
id $5 | |
if [ $? -eq 1 ]; then | |
echo $5 は、存在しないユーザーです. | |
exit 1 | |
else | |
# SSH のポート番号 | |
sshPortNum=12222 | |
# ファイル(or ディレクトリ)指定オプションの整合性チェック(整合性チェックエラー、異常終了) | |
# ---------------------------------------------------------------------- | |
if [ $objectOption = "-f" ] && [ -d $OBJECT ]; then | |
echo "オプション, またはコピーするファイル/ディレクトリの指定が誤っています." | |
showUsage | |
elif [ $objectOption = "-d" ] && [ -f $OBJECT ]; then | |
echo "オプション, またはコピーするファイル/ディレクトリの指定が誤っています." | |
showUsage | |
# ファイル(or ディレクトリ)指定オプションの整合性チェック(整合性チェッククリア、コピー開始) | |
# ---------------------------------------------------------------------- | |
# [o] オプション = -f / オブジェクト = ファイルのとき | |
elif [ $objectOption = "-f" ] && [ -f $OBJECT ]; then | |
# コピー対象が1台のホスト | |
if [ $targetOption = "-h" ]; then | |
echo "以下のファイルをコピーします." | |
scp -P $sshPortNum $4 $USER@$2:$4 | |
copyErrorCheck | |
# コピー対象が複数台のホスト | |
elif [ $1 = "-l" ] && [ $2 = "ipAddressList.txt" ]; then | |
while read ipAddress; do | |
echo "以下のファイルをコピーします." | |
scp -P $sshPortNum $4 $USER@$ipAddress:$4 | |
done < $2 | |
copyErrorCheck | |
else | |
echo "オプション, またはコピーするファイル/ディレクトリの指定が誤っています." | |
fi | |
# [o] オプション = -d / オブジェクト = ディレクトリのとき | |
elif [ $objectOption = "-d" ] && [ -d $OBJECT ]; then | |
# コピー対象が1台のホスト | |
if [ $targetOption = "-h" ]; then | |
echo "以下のファイルをコピーします." | |
scp -P $sshPortNum -r $4 $USER@$2:$4 | |
copyErrorCheck | |
# コピー対象が複数台のホスト | |
elif [ $1 = "-l" ] && [ $2 = "ipAddressList.txt" ]; then | |
while read ipAddress; do | |
echo "以下のファイルをコピーします." | |
scp -P $sshPortNum -r $4 $USER@$ipAddress:$4 | |
done < $2 | |
copyErrorCheck | |
else | |
echo "オプション, またはコピーするファイル/ディレクトリの指定が誤っています." | |
fi | |
# [x] オプションとオブジェクトの整合性が取れていないとき | |
else | |
echo "オプション, またはコピーするファイル/ディレクトリの指定が誤っています." | |
fi | |
fi | |
fi | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment