質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

1回答

4380閲覧

シェルスクリプトの質問

asagaya

総合スコア42

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2021/04/27 03:29

編集2021/04/27 04:13

CentOS7で以下のようにバックアップサーバー(192.168.1.50)のフォルダ(D:\samba-backup)にバックアップファイル(bk-日付.tar)があるかどうかを調べるシェルスクリプトを書いたのですがうまくいきません。

if expect -c " set timeout 5 spawn ssh administrator@192.168.1.50:"d\\samba-backup" expect \"password\" send \"パスワード\n\" expect eof exit "|grep "bk-$(日付).tar" then echo "backup = O" else echo "backup = X" fi

D:\samba-backupにSSHで接続して、grepで"bk-$(日付).tar" があれば"backup = O"、なければ "backup = X"と表示されるようにしようと思いました。
set -xで調べると

  • grep bk-20210426.tar

send: spawn id exp6 not open
while executing

と出ます。bk-20210426.tarというファイルはD:\samba-backupに存在します。
192.168.1.50にはsshで接続できます。
どこを直せば"backup = O"と正しく表示されるようになるのか教えてください。よろしくお願いいたします。

追記【実行結果】
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

itagagaki

2021/04/27 03:34

grep "bk-$(日付).tar" の意図を追記してください。 なお、少なくとも、grepには引数が2つ必要です。 (grepを使う目的も間違っているような気がします)
asagaya

2021/04/27 03:47

D:\samba-backupにSSHで接続して、grepで"bk-$(日付).tar" があれば"backup = O"、なければ "backup = X"と表示されるようにしようと思いました。
itagagaki

2021/04/27 04:04

grepはファイルが存在するかどうかを調べるためのコマンドではありません。 まずそこが間違っていると思いますので見直してください。 それから、質問は編集できますので、ここで言われたことに対しては、質問を編集してください。
otn

2021/04/27 04:28

> grepには引数が2つ必要です。 一つで良いですよ。引数が一つの場合は標準入力を見ます。
itagagaki

2021/04/27 04:41

>一つで良いですよ。引数が一つの場合は標準入力を見ます。 ああ、確かにそれはそうですね
guest

回答1

0

ベストアンサー

sshコマンドの意味を理解しましょう。

相手がWindowsのようなので、ファイルリストを得るのにcmd /c dirを使います。
もしUnix/Linuxならlsです。

Bash

1if expect -c " 2set timeout 5 3spawn ssh administrator@192.168.1.50 cmd /c dir /b d:\\samba-backup 4expect \"password\" 5send \"パスワード\n\" 6expect eof 7exit 8"|grep "bk-$(日付).tar" 9then echo "backup = O" 10else echo "backup = X" 11fi

##訂正
過去の質問だと、scpでこっちで実行されるのでd:\samba-backupで良かったんですが、
今度は、sshで向こうで実行するコマンドの一部なのでd:\\samba-backupとさらにクォートしてください。 上記は訂正済みです。

投稿2021/04/27 04:27

編集2021/04/27 09:18
otn

総合スコア85901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

asagaya

2021/04/27 04:52

ありがとうございます。とても助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問