2009-05-18 3 views
4

우분투에서 아주 간단한 bash 스크립트를 실행하고 있지만 문제가 생겼습니다. 필요하다면 전체 스크립트를 게시 할 것이지만 문제를 좁혀 냈습니다. 는 기본적으로, 나는 몇 가지 코드 15 초마다 실행하려면, 그래서이 시작 시간 : 08 초 때Bash 스크립트, 잘못된 번호 : 08

time=`date +%S` 

time2=$((time%15)) 

if [ $time2 -eq 0 ] 

then 

등, 등, 등 ....

문제는 온다. 사용하는 경우 08. 그에 추가 :

대신 불법 번호 오류의
time2=$(($time%15)) 

, 그것은 산술 식으로 종료 할 것입니다 : 스크립트는 불법 숫자로 종료 EOF 기대 "08퍼센트 15"

저는 08이 숫자로 해석되지 않는다고 생각합니다. 또는 그것이 8 진수라고 생각하는 것처럼 기본적인 문제가 있습니다. 어떤 도움이 필요합니까? 당신은 "모든 십오초"보다는 분에 일을 실행에만 관심이 있기 때문에

+2

08은 대부분의 C 스타일의 언어와 시스템에서 8 진수로 해석 될 가능성이 큽니다. – OregonGhost

+0

@OregonGhost : 실제로. 그리고 더 구체적으로, 08은 8 진수의 유효한 숫자가 아니므로 오류 메시지입니다. 비교해 보면 16 진수로 계산하고 0x0F에서 0x0G로 이동하는 것과 같습니다. 즉, 할 수 없습니다 ;-) –

답변

4

최단 용액 :

time2=$((${time#0} % 15)) 

${var#glob}는 "glob$var가 존재하는 경우 처음부터 제거"를 의미한다.

+0

감사합니다. 정확히 내가 찾고 있던 것이 었습니다. –

1

정확히 당신은 시대의 시작부터 당신에게 (초)을 줄 것이다 date +%s (소문자s)를 사용할 수 있습니다. 이것은 선도 0을 갖지 않으므로 스크립트가 올바르게 실행되어야합니다.

그러나 더 넓은 맥락에서 코드에 대해 궁금해 할 것입니다. 어떤 이유로 시스템이 매우 느리게 실행되는 경우 스크립트가 두 번째 14로 실행되고 두 번째로 16이 실행될 수 없음을 의미 할 수 있습니다.

스크립트가 수행하는 작업을 수행 한 후 파일을 마지막으로 수정 한 날짜가 15 초 이상 지나면 작업을 수행 할 필요가 있습니다.

+0

무슨 뜻인지 알 수 있습니다. 몇 초가 건너 뛰거나 무시됩니다. 이 스크립트의 목적은 초 단위로 테스트하는 것이 었습니다. 매 15 분마다 이것을 사용할 것이기 때문입니다. 하지만이 스크립트가 계속 실행되는 것을 원하지 않기 때문에 아마도 답을 확인해야 할 것입니다. –

1

마치 8 진수로 해석됩니다.

는 패드하지 않습니다, date +%S | sed -e 's/^0//'

+0

그 또한 일했다. –

4

대신

date +%-S 

그것은 - 주어 말한다 다음 플래그를 사용하여 시도하십시오. 그것은 8 진수 정수로 그것을 해석, 자료에 문제가 있습니다. 당신이 뭔가를 15 초마다 수행하려는 경우

어쨌든, 난 쉽게이 하나가 참조 할 수 :

while ((1)); do 
    echo do something now... 
    sleep 15s 
done 
+0

감사합니다. 향후 작업을 위해 고려해 보겠습니다. –

+0

왜 현재 스크립트에도 사용하지 않으시겠습니까? 그것은 우아한 방식으로 문제를 없애고 (단 하나의 숯을 추가 함), 이후에 제로를 버리는 대신 원하는 것을 직접 말합니다. –

+0

오, 하겠지만, 즉시하지는 않습니다. 몇 분만에 코드를 사용하게 될 것입니다. –

3

포스 배쉬 상관없이, 진수 숫자를 해석하지 얼마나 많은 패딩 제로 :

time2=$((10#$time % 15)) 
2

네가 맞아, 그것을 8 진수로 해석했다.본 쉘 쉘 않는 산술 Substition에서 선도적 0 어떤 번호 :이 '# -forcing'일에 대한 모든 세부 사항을 볼 수있는 '기본 #'에 대한 맨 페이지에서

#~ $ echo $((010)) 
8 
#~ $ echo $((0100)) 
64 
#~ $ echo $((10#0100)) 
100 
#~ $ echo $((40#lolwut)) 
2213236429 

보세요. 당신이 원한다면 꽤 우스꽝스러워 질 수 있습니다.

+0

내가 thx, btw, '40 # ': 34581로 되돌릴 수있는 방법이 무엇인지 찾고 있습니까? :) –

+1

나는 이것이 당신이 원하는 것을한다고 생각한다 : https://github.com/jrrs/sh/blob/master/lib/math/tobasen jrrs @ iorek : ~ $ ksh -c '. github/sh/lib/math/tobasen; 토바 센 -b 40 34581 ' 권자 – jrrs