단일 int 값에 0을 포함하는 숫자 검색

단일 int 값에 0을 포함하는 숫자 검색

0내 스크립트에서는 <=9라는 숫자를 가져와야 합니다 . 사용자가 숫자를 입력하면 그 숫자에 5를 더하고 결과가 9보다 작으면 07,08,09 등의 2자리 숫자를 얻으려면 0을 인쇄해야 합니다.

이에 대한 함수를 작성했지만 스크립트는 계속해서 동일한 숫자 "0?"을 반환합니다.

내 스크립트:

echo "Hora: "

read hora

Hora=$((hora+05))

Change () {
if [ $Hora -le 9 ]; then sed -e 's/^/0'$Hora'/'; return $Hora; fi
}

Change

echo -e "$Hora"

산출:

~$ bash test.sh
Hora:
4

09

09

09

09

09

답변1

스크립트에 많은 문제가 있지만 가장 큰 문제는 sed명령에 입력을 제공하지 않는다는 것입니다. 방금 실행하면 sed 's/foo/bar/'입력 sed이 예상됩니다.표준 입력그리고 클릭할 때마다 계속해서 실행됩니다 Enter. 사용자로부터 어떤 입력도 받지 않고 개행 문자(를 클릭하면 Enter빈 줄이 전송되며 이는 단 한 \n문자임)를 받기 때문에 해당 입력에 스크립트를 적용합니다. 여기에서 줄의 시작 부분에 a를 추가하라고 지시하면 0$Hora그것이 수행됩니다.

코드에 다른 문제가 있습니다. 한편으로 return()는 전역 변수를 다루기 때문에 아무 것도 할 필요가 없습니다. 실제로 sed여기에서는 그럴 필요조차 없으며 단순히 셸 자체에 연결할 수 있습니다. 다음은 스크립트의 작업 버전입니다.

## It is good practice to have the functions at the beginning
## of your script.
Change () {
        if [ $Hora -le 9 ]; then
                Hora="0$Hora"
        fi
}

echo "Hora: "
read hora

Hora=$((hora+05))

Change

printf ":$Hora"

표시된 간단한 경우에는 함수를 사용하는 것이 의미가 없습니다. 함수는 종종 스크립트의 여러 지점에서 작업을 여러 번 반복하는 데 사용됩니다. 0숫자가 10보다 작을 때 a를 인쇄하기 만 하면 되는 경우 printf다음을 단독으로 사용할 수 있습니다.

printf "Hora: "
read Hora
printf '%0.2d' "$Hora"

마지막으로 사용자가 유효한 입력을 제공하는지 확인하기 위해 몇 가지 테스트를 추가하는 것을 고려할 수도 있습니다. 바라보다Bash에서 변수가 숫자인지 테스트하는 방법은 무엇입니까?

관련 정보