CLIでテキストファイルのコマンドをbashスクリプトに解析する方法

CLIでテキストファイルのコマンドをbashスクリプトに解析する方法

以下を介してデータを取得する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   

おすすめ記事