私の.txt
ファイルには次の内容が含まれています。
The Law and Lawyers of Pickwick, by Frank Lockwood 21214
Frankenstein, by Mary Wollstonecraft 20
最初の文字列は本のタイトル、2番目の文字列は著者、最後の文字列は本の番号です。誰かが著者名を使って検索したら、行全体を印刷したいと思います。 grepを使ってみました。
#!/bin/bash
BOOKFILE="/home/sk/GUTINDEX.ALL"
author=$1
if [[ -z "$author" ]]; then
echo -n "Author name : "
read author
fi
grep $author $BOOKFILE
これを実行して検索するとフランク・ロックウッドこれらの2行を印刷します。しかし、入力文字列全体(名前と姓)が一致した場合は、その行を印刷したいと思います。
答え1
次のように変更する必要があります。
#!/bin/bash
BOOKFILE="/home/sk/GUTINDEX.ALL"
author=$@
if [[ -z "$author" ]]; then
read -rp "Author name: " author
fi
grep "$author" "$BOOKFILE"
次のように実行すると:
$ ./script Frank Lockwood
位置パラメータ1をにFrank
、パラメータ2をに設定していますLockwood
。パラメーター2はスクリプトでは使用されません。 $@
すべての位置パラメータを表す配列です。
read
また、変数をスペースを含む文字列に設定することを許可すると、author
grep行は引用符なしで失敗しますauthor
。