まず、私は次のようなファイルを作成しました。電話含む:
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)は変数に保存されます。cut
telephone
$number
テスト
次のスクリプトを使用して、スクリプトが機能してファイルのデータを使用しているかどうかをテストできますtelephone
。
$ while read -r i ;do
echo "-----"
echo "Test \"$i\""
./cmd.bash <<<$i
echo "-----"
done < <(cut -d';' -f1 telephone)
上記のコマンドはファイルの内容を読み取り、telephone
セミコロンで分割し、;
フィールド1(以降の名前)から各値を取得し、一度に1つずつ繰り返します。その後、各名前はcmd.bash
STDIN(別名)を介してスクリプトに渡されます。<<<$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.
-----