저는 Linux를 처음 접했고 정말 흥미진진한 온라인 강좌를 수강하고 있습니다. 선생님께서 강의와 설명을 너무 빨리 해주셔서 테이프를 되감아도 따라갈 수가 없어요. 여기 계신 많은 분들에게 이것이 간단할 수도 있다는 것을 알지만, 제가 해야 할 일은...
- 스크립트 이름을 while.sh로 지정합니다.
- 사용자에게 양의 정수를 입력하도록 요청합니다. 사용자가 양의 정수를 입력한다고 가정할 수 있습니다(입력 유효성 검사가 필요하지 않음).
- while 루프를 사용하여 0부터 입력 정수까지의 모든 정수를 인쇄합니다. 각 정수는 한 줄에 단독으로 인쇄되어야 하며 다른 어떤 것도 인쇄되어서는 안 됩니다.
이렇게 하려면 어떻게 해야 합니까?
답변1
파일 이름이 으로 지정될 예정이므로 구문을 while.sh
사용하고 싶을 것입니다 sh
.
다음을 수행해야 합니다.
- 입력된 명령을 읽어보세요. 대부분의 텍스트 유틸리티는 이 작업을 수행할 수 있습니다(기본적으로 수행하는 작업). 변수에 대한 입력을 읽는 내장 명령
sh
도 있습니다 .read
- 출력 및 프롬프트를 작성하는 명령입니다. 이에 대한 많은 명령이 있습니다. 이
printf
명령은 이를 수행할 수 있으며 대부분의 인터프리터에 내장되어 있지만sh
여기서는 여러 가지를 출력하고 싶기 때문에 루프에서 이 작업을 여러 번 수행할 수 있는 명령을 사용하는 것이 좋습니다. - 정수 연산을 수행하는 방법입니다. 이에 대한 몇 가지 명령이 있습니다.
sh
언어에는 기능도 내장되어 있습니다.
공교롭게도 이 awk
명령은 위의 모든 작업을 수행하며 구문을 갖습니다 while()
.
#! /bin/sh -
awk '
BEGIN {printf "Please enter a positive integer number: "}
{while(i <= $0) print i++; exit}'
여기서는 실제로 그럴 필요가 없으며 sh
다음과 같이 작성할 수 있습니다.
#! /usr/bin/awk -f
BEGIN {printf "Please enter a positive integer number: "}
{while(i <= $0) print i++; exit}
bc
은 거의 3개의 명령이 모두 포함된 또 다른 명령입니다. GNU 구현에서는 이를 확장으로 지원하지만 사용자 입력을 읽는 기능이 부족합니다.
#! /usr/bin/bc -q
"Please enter a prositive integer number: "
n = read()
i = 0
while (i <= n) i++
quit
쉘의 while
구성을 사용하고 루프에서 여러 명령을 호출할 수도 있지만 이는 다음과 같습니다.종종 나쁜 습관으로 간주됩니다., 덜 효율적이고 코드가 다소 보기 흉합니다(사용자 입력의 유효성을 검사하려면 awk
셸의 내부 기능(구조)보다 case
더 나은 기능을 제공할 수 있습니다).
#! /bin/sh -
printf 'Please enter a positive integer number: ' || exit
IFS= read -r number || [ -n "$number" ] || exit
i=0; while [ "$i" -le "$number" ]; do
printf '%s\n' "$i" || exit
i=$((i + 1))
done
또한 sh
최대 3 + 2 × (숫자+ 2) 명령( [
운좋게 read
도 printf
대부분의 인터프리터에 내장되어 있음 sh
)! 이상을 사용하는 단일 명령 호출과 awk
비교하십시오 bc
.
또한 일부 시스템에는 seq
한 줄에 하나씩 일련의 숫자를 출력하도록 특별히 설계된 명령이 있습니다(예: seq 0 "$number"
). 셸 스크립트(모든 명령줄 해석기 앞에 나오는 셸)는 작업에 대한 올바른 명령을 호출하여 시작됩니다. 이것은 프로그래밍과 아무 관련이 없으므로 선생님이 쉘 while
루프를 사용하라고 요청하는 것이 이상하다고 생각합니다.
답변2
를 사용하려면 vi while.sh
다음 스크립트를 사용하여 새 파일을 만듭니다.
#!/bin/bash
COUNTER=0
echo "Enter a integer positive number: "
read NUMBER
echo "Numbers from 0 to $NUMBER: "
while [ $NUMBER -ge $COUNTER ]; do
echo $COUNTER
((COUNTER++))
done
그런 다음 를 사용하여 chmod +x while.sh
실행 권한을 부여합니다 . 호출 스크립트를 사용하여 ./while.sh
정수를 입력하고 Enter를 누르십시오(검증 없음). 다음을 반환합니다.
user@Notebook:/tmp$ ./while.sh
Enter a integer positive number:
5
Numbers from 0 to 5:
0
1
2
3
4
5
man
더 나은 이해를 위해서는 while, read, bash 변수 및 비교에 대한 문서를 읽는 것이 중요합니다. 이를 수행하는 방법에는 여러 가지가 있습니다. 이것은 가장 간단한 것입니다.
[편집] @user218863님, 스토어 등록정보에 대한 귀하의 의견에 답하여 다음을 시도해보세요.
#!/bin/bash -
echo "Enter items separated by a space:"
IFS= read -r LIST
IFS=' ' # split on space only
set -o noglob # disable glob
for item in $LIST; do
printf '%s\n' "$item" || break
done >> shopping_list
echo "List:"
cat shopping_list
이렇게 하면 입력된 각 단어와 cat
루프 파일이 포함된 shopping_list라는 파일이 생성됩니다. 답변이 도움이 되셨다면 채택 부탁드립니다 :)