入力が特定の形式に準拠していることを確認する方法

入力が特定の形式に準拠していることを確認する方法

シェルスクリプトの助けが必要です。以下は、あるサーバーから別のサーバーにファイルを転送するシェルスクリプトです。

#!/bin/bash
echo "Please enter id no : "
read input_variable
echo "You entered: $input_variable"
HOST=xxxx
USER=xx
PASSWORD=xxx
ftp -inv $HOST <<EOF
user $USER $PASSWORD
cd /wpath/to/copy/files/$input_variable/inputs/final/
mput x.csv
bye
EOF

X.csvシェルスクリプトはうまく動作します。リモートサーバーに存在するIDを入力すると、ファイルがコピーされます。しかし、以下にリストされているいくつかの問題があります。

  1. idnoは6文字で構成する必要があります(例M000001:)。
  2. 正しいIDを入力すると、スクリプトはファイルをコピーします。しかし、間違ったIDを入力した場合は、次のようになります。M000050リモートサーバーに存在しない場合でもファイルがコピーされたことを示します。しかし、ファイルをどこにコピーするのかわかりません。
  3. リモートシステムにディレクトリがない場合は、ディレクトリを作成する必要があります/final/。入力したパスがリモートサーバーに表示されます。

ベストアンサー1

  1. ID番号は6文字でなければなりません(例:M000001)。

次の操作を実行できます。

if [[ ${#input_variable} != "6" ]] then
   echo "wrong length"
   exit 1
fi
  1. 正しいIDを入力すると、スクリプトはファイルをコピーします。しかし、間違ったIDを入力した場合は、次のようになります。 M000050 がリモートサーバーに存在しない場合でもファイルがコピーされたことを示します。しかし、ファイルをどこにコピーするのかわかりません。

ファイルを「デフォルト」ftpディレクトリにコピーしてcd失敗し、古いディレクトリに閉じ込められます(コマンドを使用してそのディレクトリへのパスを確認できますpwd)。

  1. /final/ディレクトリがリモートシステムに存在しない場合は、それを作成する必要があります。リモートサーバーの前に表示されるパスを入力してください。
mkdir /wpath/to/copy/files/$input_variable/inputs/final/

これをしなければならない

おすすめ記事