작성
·
432
0
하다보니까 문자열 비교는 바이트 비교라서 제가 작성한것도 틀렸네요.. 아무튼 답변 기다리겠습니다.
답변 3
0
안녕하세요 현준님:)
로드에버리지를 확인하고 무언가 작업을 하는 경우는 흔히 있는 케이스입니다. uptime에서 awk로 잘라서 가져오게되면 ,가 포함되기 때문에 한 번 더 처리를 해 줘야 합니다. 작성하신 코드대로 LOAD=$(uptime|awk '{print $10}') 이렇게 가져올 경우, echo "${LOAD}"로 LOAD에 들어간 값을 살펴보면 0.00, 이렇게 콤마를 포함한 값이 들어갑니다. 원하는 결과가 안나온 이유는 콤마가 들어간 값과 숫자를 비교하려고 했기 때문입니다. uptime|awk '{print $10}'|awk -F, '{print $1}' 로 콤마를 제외한 값을 가져오거나 awk '{print $1}' /proc/loadavg 로 5분평균 값을 바로 가져오는 방법도 있습니다. 참고로 로드에버리지는 실수범위를 가지고 있고 bash에서는 정수형을 비교하기 때문에 integer expression expected 라는 에러가 발생할 수 있는데 두 가지 패턴으로 해결할 수 있습니다. 1. 정수값만 가져와서 비교 --> LOAD=$(awk '{print $1}' /proc/loadavg|bc) 2. bc를 사용하여 소수점 아래를 버린 후 정수타입으로 비교 --> LOAD=$(awk -F. '{print $1}' /proc/loadavg) 어느쪽을 사용하셔도 결과는 같습니다.
0
답변 감사드립니다. 그럼 LOAD를 변수로 선언할 때 CPU load5 average를 uptime 명령어에서 가져오면 문자열로 가져오게 되는데 숫자로 가져오는 방법은 없을까요?
CPU load5 average가 특정 값보다 크거나 같은 경우 특정 명령어를 실행하도록 해보고 싶은데 방법이 없나 궁금합니다.
0
파이썬을 다룰 줄 아는 분이신가봐요.
배시쉘은 변수를 타입으로 구분하지 않기 때문에 타입변환도 하지 않습니다.
그렇기 때문에 숫자 이외에는 전부 문자열로 인식한다고 생각하시면 될 것 같습니다.
그리고 문자열에서는 크거나같음을 사용하지 않는 것으로 알고 있습니다.
같다(=), 다르다(!=), 왼쪽의아스키값이작다(<), 왼쪽의아스키값이크다(>) 등으로 판별합니다.