Це:
if [ `scselect | grep "*.*Automatic"` ]; then
Значить: запустіть команду scselect і перейдіть за *. * Automatic, що є невірним регулярним виразом. Зірочка - це модифікатор попереднього атома ("річ") у виразі, тому це не може бути першим.
Якщо ви хочете відповідати дійсній зірочці, вам доведеться уникати її за допомогою нахилу.
Spiff запропонував це, але для використаних подвійних лапок, які не передадуть зворотну косу рису, вам доведеться використовувати одиничні лапки або подвійну косу рису. Плутати ще? :)
Отже, це дало б:
if [ `scselect | grep '\*.*Automatic'` ]; then
Що означає, запустіть команду scselect, знайдіть рядок, що відповідає *. * Автоматично та виведіть його, а потім використовуйте це як аргументи команди 'test' (також відомий як '[').
Команда тесту не приймає рядок виводу з scselect як аргумент.
Що ви насправді маєте на увазі - це взагалі не використовувати команду тестування:
if scselect | grep '\*.*Automatic'; then
Але, як згадував Spiff, чомусь scselect відправляє свій результат на stderr not stdout.
Отже, тепер ви закінчите:
if scselect 2>&1 | grep '\*.*Automatic'; then
Що чудово працює, але все ж надсилає той рядок, який греп дає нам STDOUT, чого ми, мабуть, не хочемо у своєму виведенні, тому давайте виправити це:
if scselect 2>&1 | grep '\*.*Automatic' >/dev/null 2>&1; then
І ... туди ти.