如何检查命令是否匹配输出

时间:2018-03-18 09:15:44

标签: linux bash shell if-statement

我有一个BASH脚本,它将使用GRUB创建可启动的USB驱动器。

目前的问题是即使没有插入USB驱动器,脚本也会继续。这将导致用户在没有任何安全措施的情况下继续,特别是如果用户不熟悉命令行。

我想要一个命令来检查输出是sdb,sdc,sdd,sde还是sdf。如果输出与sdb,sdc,sdd,sde或sdf匹配,则脚本将继续。如果输出都不匹配sdb,sdc,sdd,sde或sdf,则脚本将退出。下面的当前命令不起作用。我没有发布所有代码,因为我认为只有这一点很重要。

带引号的命令是检查输出的命令

"if [[ $(lsblk | grep -w "sdb\|sdc\|sdd\|sde\|sdf") ]]; then
    echo "No USB drive found. Please insert one."
fi"

echo -e "--------------------------------" | lolcat
echo
lsblk | grep -w "sdb\|sdc\|sdd\|sde\|sdf" | lolcat
echo
echo -e "--------------------------------" | lolcat
echo

echo -e "Which pendrive listed above do you want to install MMI on?" | lolcat

echo

echo -e "Input example:" | lolcat
echo -e "(sdx) without brackets" | lolcat
read -p ":" INSTALLATION_DRIVE

echo

if [ -z "${INSTALLATION_DRIVE}" ]
then
    echo -e "Invalid input, quitting..."
    exit 1
fi

对不起lolcat!只是想让剧本变得丰富多彩!

1 个答案:

答案 0 :(得分:2)

您没有提供完整答案的足够详细信息,但if条件错误。您可能想要做的是

if ! lsblk | egrep -qw "sdb|sdc|sdd|sde|sdf"; then
    echo "No USB drive found. Please insert one."
fi

请注意是否存在!-q选项,以及缺少[[ ]]$() ...