ファイルからユーザー名を検索し、ユーザーの電話番号を出力します。

ファイルからユーザー名を検索し、ユーザーの電話番号を出力します。

まず、私は次のようなファイルを作成しました。電話含む:

Jan;032569874    
Annemie;014588529    
Hans;015253694    
Stefaan;011802367

今私がすべきことは、ユーザーが名前を入力し、出力が次のようになるスクリプトを作成することです。

The phone number of Jan is 032569874

私はたくさん試してみましたが、期待どおりに動作するものはありません。私はこれが非常に簡単な質問であることを知っていますが、そうすることはできません。

まあ、あなたは、これらの答えは明らかにより高いレベルから来ています。これが私が得るものです:

#!/bin/bash
#Solution script2

IFS=";"

echo "Whose phone number do you want to know?"
read name
read name number <$1
echo "The phone number of $name is $number."

ベストアンサー1

以下は、大まかに修正されたスクリプトバージョンです。

$ more cmd.bash 
#!/bin/bash

echo "Whose phone number do you want to know?"
read name
number=$(grep "$name" telephone | cut -d';' -f2)
echo ''
echo "The phone number of $name is $number."

仕組みは次のとおりです。

$ ./cmd.bash 
Whose phone number do you want to know?
Hans

The phone number of Hans is 015253694.

どのように動作しますか?

コマンドだけで名前を取得し、read name変数に入力した内容を保存します$name。次に、ファイル全体をgrepし、ファイルの結果行をtelephoneセミコロンを区切り文字として使用して2つのフィールドに分割します。電話番号(フィールド2)は変数に保存されます。cuttelephone$number

テスト

次のスクリプトを使用して、スクリプトが機能してファイルのデータを使用しているかどうかをテストできますtelephone

$ while read -r i ;do 
    echo "-----"
    echo "Test \"$i\""
    ./cmd.bash <<<$i
    echo "-----"
  done < <(cut -d';' -f1 telephone)

上記のコマンドはファイルの内容を読み取り、telephoneセミコロンで分割し、;フィールド1(以降の名前)から各値を取得し、一度に1つずつ繰り返します。その後、各名前はcmd.bashSTDIN(別名)を介してスクリプトに渡されます。<<<$i。これは、各名前に対するユーザー入力をシミュレートします。

$ while read -r i ;do echo "-----"; echo "Test \"$i\""; \
    ./cmd.bash <<<$i; echo "-----"; done < <(cut -d';' -f1 telephone)
-----
Test "Jan"
Whose phone number do you want to know?

The phone number of Jan is 032569874.
-----
-----
Test "Annemie"
Whose phone number do you want to know?

The phone number of Annemie is 014588529.
-----
-----
Test "Hans"
Whose phone number do you want to know?

The phone number of Hans is 015253694.
-----
-----
Test "Stefaan"
Whose phone number do you want to know?

The phone number of Stefaan is 011802367.
-----

おすすめ記事