Отличается ли синтаксис if-then-else в Ubuntu от CentOS? [дубликат]

Я пытаюсь запустить этот простой скрипт, который успешно работает в CentOS, но не в Ubuntu. Скрипт запускается успешно, но не может попасть в условие if и сразу перейти к else.

Есть ли синтаксическая ошибка в цикле if? Идея состоит в том, чтобы получить содержимое файла output2.txt в переменной с именем value (эта команда в порядке?) И проверить if subtext 512.00GB включить в текст (в value ) ...

sudo msecli -L > output2.txt
value=`cat output2.txt`
check="512.00GB"
#echo "$value"
if [[ "$value" == *"$check"* ]]; then
  echo "The SSD is 512GB"
sudo msecli -L >> output.txt
sudo nvme delete-ns -n 1 /dev/nvme0
sudo nvme delete-ns -n 1 /dev/nvme1
sleep 1
sudo msecli -N -q 100 -n /dev/nvme0 -r
sleep 1
sudo msecli -N -q 100 -n /dev/nvme1 -r
sleep 2
sudo reboot
else
sudo msecli -L >> output.txt
echo "***** The SSD is READY!!! *****"
fi

Мы получаем ошибку в строке 5 [[, которая кажется, что команда if не работает.

Я использовал следующий пример, который я нашел в Интернете для поиска подтекста в тексте:

#example
#STR='GNU/Linux is an operating system'
#SUB='Linux'
#if [[ "$STR" == *"$SUB"* ]]; then
#  echo "It's there."
#fi
2
задан 20 April 2021 в 13:27

1 ответ

Если ваш скрипт не начинается со строки shebang типа

#!/bin/bash

, он может быть запущен с помощью /bin/sh (подробности см. в "Какой интерпретатор оболочки запускает скрипт без shebang?").

Ubuntu использует dash для /bin/sh и dash не поддерживает специфический для Бэша синтаксис, как [[...]], так что вы получаете ошибку.

CentOS может использовать Bash для /bin/sh, так что это работает.

Добавьте

#!/bin/bash

в качестве первой строки вашего скрипта, чтобы убедиться, что он запущен Бэшем.

9
ответ дан 23 April 2021 в 23:20

Другие вопросы по тегам:

Похожие вопросы: