그레핑 부하 평균

그레핑 부하 평균

모든 로드 평균을 수집하여 배열에 넣으려고 합니다. 정확한 방법은 무엇이어야 하며, 다음 요구 사항을 염두에 두십시오.

배열을 정의합니다.

LA= ("one" "five" "fifteen")
LA= (`(uptime | grep -o '[0-9]\+\.[0-9]\+*')`)

그러나 uptime | grep -o '[0-9]\+\.[0-9]\+*'명령은 다음과 같은 출력을 제공합니다.

3.08
3.49
3.61

요구 사항: 1. 평균이 공백으로 구분되고 배열 구문에 맞도록 개행 문자가 없어야 합니다.

소수점 이전의 값만 출력 또는 배열 변수로 전송됩니다.

답변1

배열을 채울 때 줄 바꿈은 문제가 되지 않습니다. bash이 문맥에서는 또 다른 단어 구분 기호일 뿐입니다 .

명령에 두 가지 오류가 있습니다 LA= ((uptime | grep -o '[0-9]\+\.[0-9]\+*')).

  1. 뒤에 공간이 있습니다 =. 이는 유효한 구문이지만 예상한 효과는 없습니다.

    줄의 나머지 부분에 값을 할당하는 대신 $LA값을 $LA빈 문자열로 설정한 다음 줄의 나머지 부분을 실행합니다.

    이것은 유용한 기능입니다일시적으로내보낸 값 재정의환경특정 명령을 실행하기 전의 변수입니다. 명령이 종료되면 변수의 원래 값이 복원됩니다. 예를 들어

    $ VISUAL=/usr/bin/joe sensible-editor myfile.txt
    ....
    (exit joe)
    $ echo $VISUAL
    /usr/bin/vi
    
  2. $두 번째 앞에 a 가 누락되어 있습니다 (. 아니요 $, 귀하의 주문은 그렇지 않습니다명령 대체, 이는 가짜 피연산자와 연산자를 사용한 쉘 산술입니다.

이 시도:

$ LA=($(uptime | grep -Eo '[0-9]+\.[0-9]+'))
$ typeset -p LA
declare -a LA=([0]="0.97" [1]="1.23" [2]="1.39")

관련 정보