3

我正在尝试在运行 resize2fs 之前将一个快速脚本放在一起检查文件系统。

#!/bin/bash
var2=$(dumpe2fs -h /dev/mapper/mylv | grep "Filesystem state:")
var1=test
echo $var1
echo $var2

if [ "$var2" = "Filesystem state: clean" ];
then
        echo "clean"
else
        echo "dirty"
fi

我的结果

Server1:~ # ./filesystest.sh
dumpe2fs 1.38 (30-Jun-2005)
test
Filesystem state: clean
dirty

看起来即使 var2 实际上是“文件系统状态:干净”,它仍然显示为假。

4

3 回答 3

2

您可能在var2.

而不是说:

if [ "$var2" = "Filesystem state: clean" ];

说:

if [[ "$var2" =~ "Filesystem state: clean" ]];

编辑:事实上,你的整个脚本可以写成:

dumpe2fs -h /dev/mapper/mylv | grep -q "Filesystem state: clean" && echo "clean" || echo "dirty"
于 2013-08-28T16:26:09.303 回答
1

看到 dumpe2fs 的不同输出,我认为您应该像这样检查它:

shopt -s extglob
if [[ $var2 == 'Filesystem state:'*([[:blank:]])'clean' ]]

或使用正则表达式:

if [[ $var2 =~ 'Filesystem state:'[[:blank:]]*'clean' ]]

此外,您可以使用以下命令直接应用命令:

if dumpe2fs -h /dev/mapper/mylv 2>&1 | grep -q "Filesystem state:[[:blank:]]*clean"
then

如果要获取文件系统的状态,可以这样做:

state=$(exec dumpe2fs -h /dev/mapper/mylv 2>&1 | sed -ne '/Filesystem state:/s/.*state:\s*//p')
于 2013-08-28T16:51:45.390 回答
0

而不是这个检查:

if [ "$var2" = "Filesystem state: clean" ];

试试这个检查:

if [[ "$var2" = *"Filesystem state: clean"* ]];
于 2013-08-28T16:27:40.713 回答