以下を介してデータを取得するbashスクリプトがあります。
$ ./script.sh var1 var2 var3
私が望むのは、テキストファイルの変数がコマンドラインに入力したのと同じ形式になることです。
入力.txt
var1 var2 var3
私は何とかこのtxtをbashスクリプトの内部ではなく、コマンドラインからbashスクリプトに供給したいと思います。
./script.sh input.txt
どうやってこれができますか?
修正する:
これは私のスクリプトです。
#!/bin/bash
DOMAINS=( '.com' '.biz' )
VALUE=$(<input.txt)
INPUT=(`echo "$VALUE"`)
ELEMENTS=${#DOMAINS[@]}
while (( "$#" )); do
for (( i=0;i<$ELEMENTS;i++)); do
whois $1${DOMAINS[${i}]} | grep --perl-regexp --text --null --only-matching --quiet 'Creation Date'
if [ $? -eq 0 ]; then
echo -e "$1${DOMAINS[${i}]}\tregistered\t"
else
echo -e "$1${DOMAINS[${i}]}\tavailable\t"
fi
done
shift
done
ご覧のとおり、私もスクリプトで実装してみましたが、プログラマーではありません。
完全な解決策は、input.txtで使用されているデータを削除することです。したがって、input.txtでvar1を読んだら、そこから削除してください!この問題は解決できますか?
答え1
これを行う方法はいくつかあります。スクリプトが複数のパラメータを使用する必要がない場合は、ループを使用してwhile
ファイルを読みます。また、いくつかの不要なオプションも削除します(grep
使用時に出力はまったく表示されません。その機能を使用しないため、Perl正規表現は必要ありません。使用しないため必要ありません)。バイナリファイルを解析し、簡潔にするために短いオプション名を使用します。--only--matching
--quiet
--text
したがって、スクリプトの動作する(少し改善された)バージョンは次のようになります。
#!/bin/bash
DOMAINS=( '.com' '.biz' )
while read input; do
for (( i=0;i<${#DOMAINS[@]};i++)); do
whois "$input${DOMAINS[$i]}" | grep -q 'Creation Date'
if [ $? -eq 0 ]; then
echo -e "$input${DOMAINS[$i]}\tregistered\t"
else
echo -e "$input${DOMAINS[$i]}\tavailable\t"
fi
done
done < "$1"
以下を含むファイルに対してこのコマンドを実行する場合:
google
foogle
あなたは以下を得ます:
$ foo.sh file
google.com registered
google.biz available
gaagle.com registered
gaagle.biz available