我想在运行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实际上是“Filesystem state:clean”,它仍然显示为false。
答案 0 :(得分: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"
答案 1 :(得分: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')
答案 2 :(得分:0)
而不是这个检查:
if [ "$var2" = "Filesystem state: clean" ];
试试这个检查:
if [[ "$var2" = *"Filesystem state: clean"* ]];