.*
в назначениях переменных будет выполнять расширение имени файла(подстановку)&&
или неудачи ||
вместо if.REPL='something'
PATT='my line of text = '
FILE=conf_file.conf
cat $FILE
echo '========='
grep -q "^$PATT" $FILE && (sed -i "s/^$PATT.*$/$PATT$REPL/" $FILE) || (echo "$PATT$REPL" >> $FILE)
cat $FILE
Поскольку «-24» больше «0» на основе сравнения строк - три символа против одного символа. Для сравнения чисел:
$ [[ -24 -gt 0 ]] && echo "Hi"
$