我希望搜索一个字符串mongo
,而不是以#
文件中的注释开头。
homedir=`ls -d ~`
echo "$homedir"
if [[ `cat $homedir/2_need_softwares.txt | grep -v '^#' | grep -iq mongo` ]]; then
echo "Installing mongodb"
else
echo "skipping mongo"
fi
输出:
/root
skipping mongo
我上线了centos 9
$ uname -a
Linux DKERP 5.14.0-134.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Jul 21 12:57:06 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
正如您所看到的,该if
语句失败,因此else
被执行。
但是当我手动运行 if 条件时它显示成功
$ cat /root/2_need_softwares.txt | grep -v '^#' | grep -iq mongo
$ echo $?
0
$ grep mongo /root/2_need_softwares.txt
mongo
您能建议我的if
情况有什么问题吗?
我也尝试了以下方法:
1. if [[ $(cat $homedir/2_need_softwares.txt | grep -v '^#' | grep -iq mongo) ]]; then
2. if [[ $("cat $homedir/2_need_softwares.txt | grep -v '^#' | grep -iq mongo") ]]; then
这是为了bash
并且POSIX
是优选的。
答案1
问题是您正在测试命令序列的输出而不是状态。
试试这个
#!/bin/sh
if grep -v '^#' "$HOME/2_need_softwares.txt" | grep -iq mongo
then
echo "Installing mongodb"
else
echo "skipping mongo"
fi