2017-06-15 9 views
0

ドメインのようなユーザー入力を受け取り、Linuxコマンド:host -t ns [user input]を実行する最初のBashスクリプトを作成しようとしています。BashホストDNSスクリプト

#!/bin/bash 

read -p "Please enter a domain:" domain 

if domain=grep -e /^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}$/; 
     do host -t ns $domain; dns 
fi 

echo $dns ;done 

E:私は入れませんエラーがある:予期しないトークン近く

構文エラー `「

答えて

0

を行うあなたはthenを必要とする私のコードは私のために動作しません。しかし、 、do - doはfor文ではなく、for文です。また、domain変数を使用している方法も間違っています。これを行うための正しい方法は次のとおりです。

if grep -qE '^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}$' <<< "$domain"; then 
    dns=$(host -t ns "$domain") 
fi 
  • grep -q - 出力を生成しません。試合とそうでない場合は1(間違った引数が与えられている場合2)
  • -Eは、単一引用符で囲む必要がありますが
  • 正規表現を使用している拡張正規表現(ERE)のためではなく、/.../
  • があるときだけ0で終了
  • <<<ここに文字列
  • dns=$(...)ある
+1

は私だけ何<<<手段を意味していない、交尾ありがとうコマンド置換のですか?左からこの文字列がすべてドメイン変数にあることを意味しますか?もう一つの質問ですが、もし私が複数の出力を得たら、それぞれを別の変数に入れるにはどうしたらいいですか?私は3つのDNSアドレスを持っていると仮定して、それぞれが別の変数になるようにします。 – Benny

+0

「Bash here string」を読んで、その動作を理解してください。 2番目の部分については、配列が必要です。タグwikiを見てください - たくさんの例があります。 – codeforester