Centos
儘管手動執行時條件為真,如果條件始終為假
我希望搜尋一個字元串
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
是首選的。
問題是您正在測試命令序列的輸出而不是狀態。
試試這個
#!/bin/sh if grep -v '^#' "$HOME/2_need_softwares.txt" | grep -iq mongo then echo "Installing mongodb" else echo "skipping mongo" fi