2017-04-06 12 views
1

ユーザ入力をトラップする際にエラーが発生しようとしています。エラートラップユーザ入力 - Bashスクリプトループ

- ファイル名を入力する必要があります。

- 一部のユーザーが完全なURLを入力していて、残りのスクリプトを強制終了します。そう

  • ユーザーは、httpを入力した場合://私はスクリプトがエラーメッセージを与え、彼らは単にファイル名を入力しますたいです。

- これは、ユーザーがURLを入力するたびに繰り返す必要があります。

  • ファイル名を入力すると残りのスクリプトが実行されます。

これは私がこれまで持っていたものです。ユーザーがURLを入力した場合、それは動作します一度、彼は間違って入力した場合、単純に取り除かないなぜあなたは、その後、ユーザーは完全なURLを入力したことを検出することができた場合は二回、それはスクリプト

#!/bin/bash 
read -p "Enter File : " string 

if [[ $string -ne *”http://“* ]]; 
then 
s3cmd get s3://backup/domain.com/$string 



elif [[ $string -ne *"http://"* ]]; 
echo “You entered the full URL, enter on the file name“ 
read -p "Enter File : " string 

then 

s3cmd get s3://backup/domain.com/$string 

else 
    echo "rest of script" 
fi 

答えて

0

の残りの部分を実行しますプレフィックスを付けてユーザーに迷惑をかけないようにします。

http_prefix="http://" 
if 
    [[ $string =~ ^$http_prefix(.*) ]] 
then 
    string=${BASH_REMATCH[1]} 
fi 

=~オペレータは、Bashダブルバックテストで動作します。これは拡張正規表現に一致し、対応するサブ式(かっこ内のもの)はBASH_REMATCH配列に置かれ、最初の部分式はインデックス1になります。一致が失敗すると、テストはゼロ以外の値を返し、その場合、文字列はそのままです。

これはURLが有効であることを保証するものではなく、「http://」で始まらないことを保証していますので、これは実稼働可能なコードよりもおもしろい例です。

関連する問題