정수를 반복할 때

정수를 반복할 때

저는 Linux를 처음 접했고 정말 흥미진진한 온라인 강좌를 수강하고 있습니다. 선생님께서 강의와 설명을 너무 빨리 해주셔서 테이프를 되감아도 따라갈 수가 없어요. 여기 계신 많은 분들에게 이것이 간단할 수도 있다는 것을 알지만, 제가 해야 할 일은...

  1. 스크립트 이름을 while.sh로 지정합니다.
  2. 사용자에게 양의 정수를 입력하도록 요청합니다. 사용자가 양의 정수를 입력한다고 가정할 수 있습니다(입력 유효성 검사가 필요하지 않음).
  3. 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) 명령( [운좋게 readprintf대부분의 인터프리터에 내장되어 있음 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라는 파일이 생성됩니다. 답변이 도움이 되셨다면 채택 부탁드립니다 :)

관련 정보