SFTP接続後のローカルシェルの条件の場合

SFTP接続後のローカルシェルの条件の場合

ファイルサイズが0の場合、ローカルシェルで次のスクリプトを使用してファイルをあるディレクトリから別のディレクトリに移動しました。

if [[ ! -s /directory1/subdirectory1/file1.txt ]]
then
    mv /directory1/subdirectory1/file1.txt /directory2/subdirectory2;
fi;

今、私は同じスクリプトを使って追加したいと思います。カスタマーサーバーへのSFTP接続を確立したら、ローカルシェルで同じコマンドを実行します。

!if [[ ! -s /directory1/subdirectory1/file1.txt ]]
then
    mv /directory1/subdirectory1/file1.txt /directory2/subdirectory2/; fi;

次のエラーによりスクリプトが失敗します。/QOpenSys/usr/bin/bsh: 行 1 の構文エラー: 予期しない 'fi'。 SFTP経由で接続を確立した後、ローカルシェルコマンドを含むスクリプトを正常に実行しましたが、成功しませんでした。私たちはiSeries V7.2を実行しています。助けてくれてありがとう。

答え1

何を達成したいですか?

Bashスクリプトの場合!出力リターンを反転します。実行中のCLIの例を表示するには、次の手順を実行します。

ls ; echo $?

0を返す必要があります

! ls ; echo $?

1を返します。フォルダがいっぱいになったら、返品の一番下を注意深く見てください。実行方法によって0または1が得られます。

あなたの場合! !if, not !if のような if (空白なし) の横には if が fi に反転し、bash は fi がコマンドではないと言います。試してみる間にスペースを入れてください!もしそうなら、何が起こるのか見てください。何が起こるのか分からない。私が言ったように、あなたが望む結果を説明すると、他の人が答えを得るのに役立ちます。

答え2

  1. シェルエスケープを使用するには、通常、シェルコマンド全体を1行に入力する必要があります。入ろうとする

    !if [[ ! -s /directory1/subdirectory1/file1.txt ]]; then mv /directory1/subdirectory1/file1.txt /directory2/subdirectory2; fi
    

    (最後にはセミコロンは必要ありません。)

  2. 同じコマンドを複数回実行したい場合は、そのコマンドを(ローカル)シェルスクリプトに入れて生活を簡素化できます。その後、次のように入力して実行できます。

    !my_conditional_mv
    

    (または何と呼ぶか​​どうか)。

関連情報