if 문을 사용하여 2% 값을 비교합니다.

if 문을 사용하여 2% 값을 비교합니다.

우선 저는 이곳에 처음 왔기 때문에 실수가 있었다면 죄송합니다. 이것이 나의 첫 번째 질문입니다.

Linux 기반 제품의 로그 파일을 복사하는 스크립트를 작성 중입니다. 복사 부분은 완료했지만 로그를 복사하기 전에 스크립트에서 /var 파티션 크기를 확인하도록 하고 싶습니다.

아래는 오류를 발생시키는 스크립트의 일부입니다.

/var 파티션 크기가 80% 미만이면 로그를 복사해야 하고, 그렇지 않으면 종료해야 합니다.

size=`df -kh | grep var | awk '{print $5}'` #output is 1%, so it must execute other statements.

echo var partion $size utilized

if (( "$size" <= 79% ))

then

        echo "/var partition is less than 80%"

else

exit

        echo "/var partition is more than 79%"

fi

스크립트 출력

[root@manage home]# sh logcopy.sh 
var partion 1% utilized
logcopy.sh: line 19: ((: 1% <= 79% : syntax error: operand expected (error token is "<= 79% ")

awk 명령 및 df -kh 제거

[root@manage home]# df -kh | grep var | awk '{print $5}'
1%
[root@manage home]# df -kh
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda6             980M  642M  287M  70% /
/dev/sda1              95M   25M   65M  28% /boot
/dev/sda9             6.0G 1004K  5.7G   1% /home
/dev/sda7             4.6G  879M  3.5G  20% /usr/local
/dev/sda8             446G  2.7G  421G   1% /var

답변1

백분율 기호는 두 번째 피연산자가 필요한 모듈로 연산자(예: 8 % 5is )입니다. 다음을 3사용한 (( size <= 79% ))경우 오류는 size비슷 합니다.

입력에서 백분율 기호를 제거해 보겠습니다.

size=$(df -kh | awk '$6 == "/var" {print $5}')
size=${size%"%"}
if (( size < 80 )); then
    echo "/var is less than 80 % full"
fi

여기에 ${size%"%"}접미사 제거 확장이 있습니다 ${var%word}. 첫 번째 것은 %문법의 일부이고 두 번째 것(인용된 것)은 %우리가 제거하려는 것입니다. 여기에 있는 인용문은 ${var%%word}유사성을 위해 가장 짧은 것 대신 가장 긴 일치하는 접미사를 제거합니다. 를 사용할 수도 있지만 ${size%%%}읽기가 더 혼란스러울 것입니다.

답변2

dfdf /var모든 디스크에 대해 실행하는 대신 대상( )을 지정할 수 있습니다 .

GNU/Linux의 경우 출력 형식을 지정할 수 있습니다. 마지막으로 %, tr, sed substitution...을 생략할 수 있습니다 .

df /var --output=pcent | tail -1 |tr -d '%'
55

awk다만 오버 출력을 사용하고 싶다면 with를 사용 하여 이식성을 높이는 df것이 좋습니다 . df -P디스크 경로가 너무 길면 출력을 한 줄로 얻지 못할 수 있습니다. 예를 들면 다음과 같습니다.

df -kh
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                      3.9G  404M  3.3G  11% /
/dev/mapper/VolGroup00-LogVol05
                      3.9G  442M  3.3G  12% /home
/dev/mapper/VolGroup00-LogVol04
                      3.9G  261M  3.5G   7% /var
/dev/mapper/VolGroup00-LogVol03
                      3.9G  137M  3.6G   4% /tmp
/dev/mapper/VolGroup00-LogVol02
                      7.8G  3.6G  3.8G  49% /usr

관련 정보