간단한 계산(셸 스크립트에서)을 수행하기 위해 2 유닉스 시간의 차이를 알아내려고 하는데 작동하지 않는 것 같습니다.
두 개의 변수를 설정했습니다. 하나는 호출되고 $d
다른 하나는 호출됩니다 $c
.
이것은 현재 변수를 설정하는 데 사용하는 구문입니다.
c= echo $a | awk -F : '{print ($1 * 32140800) + ($2 * 2678400) + ($3 * 86400) + ($4 * 3600) + ($5 * 60) }'
echo $c
d= echo $a | awk -F : '{print ($1 * 32140800) + ($2 * 2678400) + ($3 * 86400) + ($4 * 3600) + ($5 * 60) }'
echo $d
(변수 a와 b는 다른 스크립트로부터 타임스탬프를 받습니다.)
$c
출력을 빼려고 하는데 $d
사용하는 모든 방법이 작동하지 않는 것 같습니다.
나는 다음을 시도했습니다: 1)
duration=$(echo "$d - $c")
echo $duration
2)
duration=$((d-c))
echo $duration
답변1
c= echo $a | awk -F : '{print ($1 * 32140800) + ($2 * 2678400) + ($3 * 86400) + ($4 * 3600) + ($5 * 60) }'
여기에 명령 대체가 없습니다. 이는 환경에서 null 값을 설정하는 echo | awk
동안 파이프라인을 실행합니다 .c
echo
아래에서 명령 대체를 사용했는데, duration=$(echo "$d - $c")
여기에서도 이것이 필요합니다. 즉
c=$(echo "$a" | awk ...)
(기호 주위에는 공백이 없다는 점에 유의하십시오. =
이것이 일반 할당과 명령을 구분하는 것입니다.쉘 스크립트에서 변수 할당의 공백)
또한 awk 스크립트의 숫자를 보면 31일의 달과 그에 상응하는 372일의 연도가 있는 것으로 나타나며 이는 원하는 것일 수도 있고 아닐 수도 있습니다. 입력에 초도 있으면 awk 스크립트는 초를 사용하지 않습니다. ( + $6
끝에 a 가 있어야 합니까?) $a
또한 두 명령 모두에서 $a
및 가 아닙니다 $b
.
duration=$(echo "$d - $c")
duration
이는 주어진 내용만 인쇄하고 산술을 수행하지 않기 때문에 문자열( 5678 - 1234
합계의 실제 값 포함) 로만 설정됩니다 .d
c
echo
duration=$((d-c))
이렇게 하면 뺄셈이 가능해집니다.
답변2
어떤 쉘을 사용하셨나요? 산술은 old school에서는 구현되지 않지만 /bin/sh
bash에서는 잘 작동합니다.
~$ a=10000000
~$ b=200
~$ echo $((a-b))
9999800