지정된 파일에서 사용자가 입력한 문자로 시작하는 모든 단어를 찾는 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 name.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
Court of the part 라는 명령을 실행하려고 시도하고 있으므로 $(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:]]