우선 저는 이곳에 처음 왔기 때문에 실수가 있었다면 죄송합니다. 이것이 나의 첫 번째 질문입니다.
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 % 5
is )입니다. 다음을 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
df
df /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