SSHを使ってリモートサーバーのファイル数が0であることを確認したいと思います。
以下のコードはファイルのみを確認します(.dmpで終わるファイルが存在します)。
if ssh v0021x91 ls /apps/oracle/home/DB_1201/*.dmp
then
echo "Files still exist after cleanup"
exit -9991
else
echo "Files cleaned up"
fi
以下の "then" 部分は、実際のエラーが "ls: could access /apps/oracle/home/DB_1201/*.dmp: No such file or Directory" の場合 $?=0 として実行されます。
if [ `ssh v0021x91 ls /apps/oracle/home/DB_1201/*.dmp | wc -l` -eq 0 ]
then
echo "[INFO ] Dumps Files Cleaned Up on Remote Host"
else
echo "[ERROR ] issue in Remote Host"
exit -9992
fi
"ls /apps/oracle/home/DB_1201/*.dmp |wc -l" 0 または N 番号を出力する必要があります。ディレクトリが存在しない場合(該当するファイルやディレクトリはありません)
ファイル数0または28を返すか、ディレクトリが見つかりませんエラーをキャッチする必要があります。
SCPを実行し、後でステータスを確認する正しい方法を教えてください。
ローカルサーバーの最後のコマンド状態を取得している間にいくつかのエラーが発生しても、以下は常に0を返します。
scp -rp /apps/oracle/home/DB_1201/*.dmp oracle@v0021x91:/apps/oracle/home/DB_1201/
if [ $? != 0 ]
then
echo -e "[ERROR ] Can't copy files from Source to Remote"
exit -9995
fi
if scp -rp /apps/oracle/home/DB_1201/*dmp oracle@v0021x91:/apps/oracle/home/DB_1201/
then
echo -e "[INFO ] SCP Success"
else
echo -e "[ERROR ] Can't copy files from Source to Remote"
exit -9995
fi
ありがとう、ベラ
ベストアンサー1
if [ `ssh v0021x91 ls /apps/oracle/home/DB_1201/*.dmp | wc -l` -eq 0 ]
評価順序はワイルドカードが評価されることです。今後コマンドが
ssh
実行されます。/apps/oracle/home/DB_1202/*.dmp
1つ以上のファイルに一致するものがある場合地元のホストはこれらのファイルの名前に置き換えられます。それ以外の場合は、アスタリスクが保持され、リテラルとしてリモート側に渡されます。その後、リモートシェルは
ls
コマンドを実行する前にパターンを評価し、1つ以上の一致するファイルに展開するか、文字通りアスタリスクのままにします。一致するファイルが存在しない場合、ファイルが見つかりません
ls
エラーが発生します/apps/oracle/home/DB_1201/*.dmp
(ファイル名の最初の文字にリテラルアスタリスクが表示されます)。副作用としてファイルは出力されず、wc -l
予想される正しい結果としてゼロが表示されます。結局のところ、テストは0個のファイルと作成されたエラーとを一致させます。標準エラー、またはゼロ以外の数のファイル。
現代的なコーディングの観点からに
[ `command` ]
変更することを検討してください[ "$(command)" ]
。bash
[[ "$(command)" ]]
exit -9991
終了コードは、0(成功、正常)または1〜127の範囲になければなりません。大きいまたは負の数を使用することは間違っており、誤解を招く可能性があります。
if [ $? != 0 ]
数値に文字列比較を使用しています。実際には大丈夫かもしれませんが、代わりに
[ $? -ne 0 ]
orを使用する必要があります[ $? -gt 0 ]
。if scp -rp /apps/oracle/home/DB_1201/*dmp oracle @ v0021x91:/apps/oracle/home/DB_1201/*dmp
- ターゲットコンポーネントのスペースはどうなりますか?
- 実際に使用しない限り、ターゲットにワイルドカード文字を指定しないでください。本物何をしているのかを知る
ほぼ確実に
oracle@v0021x91:/apps/oracle/home/dB_1202/
if ssh v0021x91 ls /apps/oracle/home/DB_1201/*.dmp
#1と同様に一致するファイルがない場合は、エラーメッセージが表示されます
*.dmp
。リモートシステムのパスに一致するファイルが1つ以上ある場合は、エラーメッセージが表示され、予期しない問題が発生します。地元のマシン。
ローカルシステムでのワイルドカード拡張を防ぐには、に渡すコマンドを引用してくださいssh
。したがって、#5の場合などをif ssh v0021x91 'ls /apps/oracle/home/DB_1201/*.dmp'
作成する必要があります。