루트 파일 시스템에서 Linux 파일 시스템 디스크 사용량을 확인하고 시스템이 6%를 초과하면 경고 메시지를 표시하는 간단한 스크립트를 Bash에 작성했습니다.
명령이 터미널에서 실행되고 있지만 명령문을 시도하면 if
16행에서 이 오류가 발생합니다.
[: 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 -c1
awk
=
절단(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%"