Bash 오류: 누락 [: `]'이(가) 누락되었습니다

Bash 오류: 누락 [: `]'이(가) 누락되었습니다

루트 파일 시스템에서 Linux 파일 시스템 디스크 사용량을 확인하고 시스템이 6%를 초과하면 경고 메시지를 표시하는 간단한 스크립트를 Bash에 작성했습니다.

명령이 터미널에서 실행되고 있지만 명령문을 시도하면 if16행에서 이 오류가 발생합니다. [: missing]''

  1 #!/bin/bash
  2 
  3
  4  
  5 clear
  6 #checking for usage on the system and saving in a file usage1
  7 df -h / >usage1
  8
  9 #display current use to the screen
 10 clear
 11 echo
 12 awk '$5>6' usage1
 13
 14 #Creating variable to use in the awk if statemant
 15 usage2= "awk '{print $5}'/home/peters/usage1 | tail -n1 |cut -c1"
 16 #Building statemant
 17 if ($usage2>6)
 18 print "Warning file system greater than 6% !!"
 19
 20 exit 0

답변1

17번째 줄은 다음과 같아야 합니다.

if [ $usage2 -gt 6 ]

[앞뒤에 공백을 추가 해야 합니다 ]. 또한 숫자를 비교할 때는 익숙한 기호 대신 -eq, -ne, -gt, -lt, -ge및 를 사용해야 합니다 .-le

답변2

당신이 원하는 ( 주위에 공백 없이 =)

usage2=$(awk '{print $5}' /home/peters/usage1 | tail -n1 |cut -c1)

... 명령 의 출력을 usage2변수에 넣습니다. 중괄호 명령과 입력 파일 이름 사이에는 공백이 필요합니다(단, 주위에는 공백이 없어야 합니다). BTW, 당신은 간단히 사용할 수 있습니다awk|cut -c1awk=절단(1)cut -f5(... 대신 awk '{print $5}') 으로 다섯 번째 필드를 가져옵니다 .

그런데 당신은 아무것도 필요하지 않습니다 usage1. 아마도 인코딩 만하면 될 것입니다.

usage2=$(df | cut -f5| tail -n1 | cut -c2)

그러나 나는 이것을 테스트하지 않았습니다.

그럼 당신은 사용해야합니다

if [ "$usage2" -gt 6 ] ; then
   echo "Warning file system greater than 6% !!" > /dev/stderr
fi

도착하다테스트(1)- 일반적으로 쉘 내장이며 빈 변수 값을 처리합니다. 이는 오류 메시지이므로 다음으로 이동해야 합니다.표준 에러, 아니요표준 출력. 그리고 당신은 사용하고 싶지 않지만 printf( echo왜냐하면인쇄(1)특별 대우 %). 아마도 당신은 원할 것입니다로거(1)...

하지만 당신의 방법은 (여기서 물어보세요, 어쩌면두 배) 취약합니다(두 번 묻는 것은 무례합니다!). 쉘에 대해 더 많이 알아야합니다. 읽다고급 bash 스크립팅 가이드, 시간을 낭비하지 않을 것입니다. 또한 쉘 스크립트를 작성하려면 좋은 편집기를 사용하십시오. 일부 편집기( emacs)에는 꽤 좋은 쉘 모드가 있습니다. 구문 색상 표시가 도움이 됩니다! ...

#!/bin/bash -vx그런데 디버깅 단계 중에 스크립트를 일시적으로 시작하면 도움이 될 수 있습니다. 명령을 제거하면 clear필요하지 않습니다 ...

마지막으로, 사용을 고려해 보셨나요?디스크 할당량?

답변3

다음과 같은 if 문을 작성해 보세요.

if [ condition ]; then
      Stuff here
fi

답변4

[[ -n $(df -h / | awk 'int($5)>6{print $5}') ]] && echo "Warning file system greater than 6%"

관련 정보