bash脚本if语句不显示true

时间:2013-08-28 16:22:20

标签: linux bash

我想在运行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。

3 个答案:

答案 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"* ]];