디스크 사용량을 확인하는 다음 스크립트가 있습니다
#!/bin/bash
# set alert level 90% is default
ALERT=10
OIFS=$IFS
IFS=','
storage=$(df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }')
for output in $storage ;
do
echo "---------------@@@@@@@@@ output started @@@@@@@@@@@@@@@@-----------"
echo $output
echo "---------------@@@@@@@@@ output end @@@@@@@@@@@@@@@@-----------"
usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1 )
echo "---------------###### useo started ######-----------"
echo $usep
echo "---------------###### usep end ######-----------"
if [ $usep -ge $ALERT ]; then
echo "Running out of space \"$partition ($usep%)\" on $(hostname) as on $(date)"
fi
done
하지만 이 코드를 실행하면 if 조건문에서 정수 표현식 예상 오류가 발생하고 이것이 이 스크립트의 출력입니다.
97% /dev/sda1
1% udev
0% none
2% none
---------------@@@@@@@@@ output end @@@@@@@@@@@@@@@@-----------
---------------###### useo started ######-----------
97
1
0
2
---------------###### usep end ######-----------
./fordiskfor.sh: line 24: [: 97
1
0
2: integer expression expected
답변1
문제는 거기에 있습니다:
if [ $usep -ge $ALERT ]; then
...
fi
$usep
여러 줄의 숫자가 포함되어 있습니다. 모든 항목을 반복하려면 해당 부분 대신 다음과 같은 것을 사용하십시오.
for $space in $usep;
do
if [ $space -ge $ALERT ]; then
echo "Running out of space..."
fi
done
답변2
변수에 저장된 값은 $storage
여러 행으로 구성됩니다. 그러므로 $output
줄도 여러 개 있을 것이므로 $usep
.
$usep
for
에 설명된 대로 다른 루프를 사용하여 저장된 모든 값을 하나씩 추출하고 비교할 수 있습니다.이것답변. 또는 while
다음과 같은 문을 사용할 수 있습니다 .
echo $storage | while read output
do
...
...
if [ $usep -ge $ALERT ]; then
echo "Running out of space \"$partition ($usep%)\" on $(hostname) as on $(date)"
fi
done