수업 과제가 마감되어 있는데 "경외감"에 대한 내용을 찾을 수 없나요?
과제를 수행하려면 "3개의 질문 후에 Linux는 훌륭하기 때문입니다!"를 에코하는 "awe"라는 함수가 포함된 스크립트를 작성해야 합니다.
저는 이 모든 것에 대해 매우 익숙하지 않으며 정말로 도움을 받고 싶습니다. 노력했지만, awk
제가 본 영상을 보면 그가 원하는 것은 그게 아니었습니다. 감사해요.
답변1
Bash 쉘을 사용하여 응답하십시오.
과제를 수행하려면 "3개의 질문 후에 Linux는 훌륭하기 때문입니다!"를 에코하는 "awe"라는 함수가 포함된 스크립트를 작성해야 합니다.
과제에는 함수를 생성하라는 내용이 나와 있으니 함수가 무엇인지 살펴보겠습니다.배쉬 매뉴얼우리에게 말해주세요기능:
셸 함수는 그룹의 단일 이름을 사용하여 나중에 실행할 수 있도록 명령을 그룹화하는 방법입니다. 이는 "일반" 명령처럼 실행됩니다. 쉘 함수의 이름을 단순 명령 이름으로 사용하는 경우에는 해당 함수 이름과 연관된 명령 목록이 실행됩니다. 셸 기능은 현재 셸의 컨텍스트에서 실행되며 이를 해석하기 위한 새 프로세스가 생성되지 않습니다.
함수를 선언하려면 다음 구문을 사용하십시오.
name () compound-command [ redirections ]
또는
function name [()] compound-command [ redirections ]
이것은 다음과 같은 쉘 함수를 정의합니다.이름. 예약어는
function
선택사항입니다.function
예약어가 제공되는 경우 괄호는 선택 사항입니다. 이것몸이 함수의 기능은 복합 명령입니다복합 명령(바라보다복합 명령). 명령은 일반적으로목록{ 및 } 사이에 포함되지만 위에 나열된 복합 명령 중 하나일 수 있습니다. 단, 한 가지 예외는function
예약어가 사용되고 괄호가 제공되지 않는 경우 중괄호가 필요합니다.복합 명령언제든지이름명령의 이름으로 지정됩니다.
간단히 말해서, 함수는 사용자가 제공한 특정 이름(예: 함수 이름)으로 묶인 명령 집합입니다.
이 할당은 함수의 이름을 지정하는 방법( awe
)과 함수가 수행해야 하는 작업("Because Linux is Awesome!" 출력)을 알려줍니다. 메시지를 출력하려면 내장 셸이 출력 명령을 제공하므로 .Bash를 사용할 수 있습니다 echo
.echo
stdout
(편안). 이 정보를 사용하여 함수를 작성할 수 있습니다.
awe(){
echo "Because Linux is Awesome!"
}
과제의 다음 단계는 세 가지 질문을 받은 후 과제를 수행하는 것입니다. 이를 수행하려면 read
여러 옵션 플래그를 허용하는 명령을 사용할 수 있습니다 . 그게 뭔지 보자배쉬 매뉴얼우리에게 말해주세요~에 대한read
:
read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name …]
표준 입력 또는 파일 설명자에서 한 줄 읽기FD
-u
위에서 설명한 대로 단어로 구분되어 options 에 대한 인수로 제공됩니다.분사, 첫 번째 단어가 첫 번째 단어에 할당됩니다.이름, 두 번째 단어에서 두 번째 단어로이름, 등. 이름보다 단어가 많은 경우 나머지 단어와 중간 구분 기호는 마지막 단어에 할당됩니다.이름. 입력 스트림에서 이름보다 적은 단어를 읽는 경우 나머지 이름에는 null 값이 할당됩니다. 변수 값의 문자는IFS
쉘이 확장을 위해 사용하는 것과 동일한 규칙을 사용하여 행을 단어로 분할하는 데 사용됩니다(위에 설명됨).분사). 백슬래시 문자 "\
"를 사용하면 다음 문자 읽기 및 줄 연속의 특별한 의미를 제거할 수 있습니다. 이름이 제공되지 않으면 읽은 행이 변수에 할당됩니다REPLY
.
read
여러 옵션을 수락합니다. 이 경우 사용자에게 질문하고 의견을 얻으려는 것이므로 두 가지가 가장 관련성이 높습니다. 옵션은 다음과 같습니다:
-r
→ 이 옵션을 지정하면 백슬래시가 이스케이프 문자로 작동하지 않습니다. 백슬래시는 줄의 일부로 간주됩니다. 특히 백슬래시-개행 쌍은 줄 연속으로 사용할 수 없습니다.-p prompt
→ 보여주다빠르게, 입력을 읽으려고 시도하기 전에 후행 줄 바꿈 없이. 프롬프트는 입력이 터미널에서 오는 경우에만 표시됩니다.
잊어버리기 가장 쉬운 상황은 아니지만 이스케이프 문자로 작동 -r
하지 않도록 거의 항상 포함하고 싶을 것입니다 . 사용자에게 프롬프트를 표시합니다. 하나의 옵션 뒤에 두 개의 옵션을 넣을 수 있으므로 다음과 같이 작성할 수 있습니다.\
-p
-
read -rp "Question? " variable
사용자의 입력은 이미 에 저장되어 있습니다 variable
. 아니요, 해당 입력을 사용하여 사용자에게 다시 출력하는 문장에 포함하려고 합니다. variable
포함된 값을 확장하려면 $
앞에 . 이는 큰따옴표 내에서도 마찬가지입니다.
echo "This is a reply to the user and it contains $variable!"
일반적으로 이 과제를 해결하는 데 필요한 전부입니다. 내 예제 스크립트에서는 if
마지막 질문에 대한 대답이 "예"인지 "아니요"인지 결정하는 조건을 사용하기 위해 몇 가지 변경 사항을 추가했습니다 . 그럼 다시 볼까요매뉴얼에서 if
조건 에 관해 알려주는 내용:
이 명령의 구문은 다음
if
과 같습니다.if test-commands; then consequent-commands; [elif more-test-commands; then more-consequents;] [else alternate-consequents;] fi
이것테스트 명령목록이 실행되고 반환 상태가 0이면후속 명령목록이 실행됩니다. 만약에테스트 명령0이 아닌 상태를 반환합니다. 각
elif
목록의 종료 상태가 0이면 해당 목록이 실행됩니다.더 많은 결과실행되고 명령이 완료됩니다. ' '가 존재하고 마지막 또는 절의 마지막 명령이 0이 아닌 종료 상태를 갖는 경우else alternate-consequents
if
elif
대체 결과처형되다. 반환 상태는 실행된 마지막 명령의 종료 상태이거나, true로 테스트되는 조건이 없으면 0입니다.
test-command
아래 예에서 제가 사용하고 있는 것은 [
조건이 참인지 거짓인지 테스트하는 내장 셸입니다. 사용 시 [
마지막 매개변수를 전달해야 합니다 ]
. =
변수가 문자열과 같은지 테스트합니다.
샘플 스크립트는 다음과 같습니다.
#!/bin/bash
# function 'awe' to output "Because Linux is Awesome!"
awe(){
echo "Because Linux is Awesome!"
}
# asking three questions
read -rp "Enter your name!: " name
echo "Well, hello then $name!"
read -rp "How old are you?: " age
echo "Being $age makes you nearly as old as I am"
read -rp "Do you like Linux?: " likes_linux
# acting on if the last input is yes or something else in which case we assume no
if [ "$likes_linux" = "yes" ];then
awe
else
echo "Why don't you like Linux?"
fi