
지정된 파일에서 사용자가 입력한 문자로 시작하는 모든 단어를 찾는 bash 스크립트를 만들고 싶습니다(스크립트에 지정되거나 이에 대한 사용자 입력도 생성). 나는 Linux의 완전 초보자보다 조금 더 많습니다. 내 코드는 다음과 같습니다.
#! /bin/bash
echo 'Please enter starting letter of Name'
read name
result=$(awk '/$name/ {print}' /home/beka/scripts/names.txt)
echo "$(result)"
결과는 다음과 같습니다.
Please enter starting letter of Name
G
/home/beka/scripts/test.sh: line 6: result: command not found
내가 뭘 잘못하고 있는 거지? awk 예제를 검색하려고 했지만 정확한 해결책을 찾을 수 없습니다. 미리 감사드립니다.
편집된 코드
#! /bin/bash
echo 'Please enter starting letter of Name'
read name
if [[ $name == [A-Z] ]]
then
awk "/$name/{print}" /home/beka/scripts/names.txt
else
echo '0'
fi
EDIT names.txt는 이름 목록입니다.
Michael
Christopher
Jessica
Matthew
Ashley
Jennifer
Joshua
또 다른 편집
#! /bin/bash
echo 'Please enter starting letter (Uppercase) of name'
read name
if [[ $name == [A-Z] ]]
then
echo "---Names starting with $name---"
awk "/$name/{print}" /home/beka/scripts/names.txt
elif [[ $name == [a-z] ]]
then
awk "/$name/{print}" /home/beka/scripts/names.txt
else
echo '---------'
echo 'Names not found'
fi
답변1
echo "$(result)"
result
에서 해당 부품에 따라 명명된 명령을 실행하려고 하므로 $(result)
오류 메시지가 표시됩니다 result: command not found
.
이것을 시도해 보세요(테스트되지 않음):
#!/usr/bin/env bash
result=''
while [[ -z "$result" ]]; do
echo 'Please enter starting letter of Name'
read name
if [[ $name == [A-Z] ]]
then
result=$(awk -v name="$name" 'index($0,name)==1' /home/beka/scripts/names.txt)
else
echo '0'
fi
done
echo "$result"
대소문자를 구분하지 않고 검색하려면 다음을 수행하세요.
awk -v name="$name" 'index(tolower($0),tolower(name))==1' /home/beka/scripts/names.txt
물론 검색 문자로 소문자를 허용하려면 또는 $name == [A-Z]
로 변경해야 합니다 .$name == [a-zA-Z]
$name == [[:alpha:]]