я отправляю новый вопрос в bugfix для моего кода.
if [ -f /etc/centos-release ]; then OS="CentOs" VERFULL=$(sed 's/^.*release //;s/ (Fin.*$//' /etc/centos-release) VER=${VERFULL:0:1} # return 6 or 7 elif [ -f /etc/lsb-release ]; then OS=$(grep DISTRIB_ID /etc/lsb-release | sed 's/^.*=//') VER=$(grep DISTRIB_RELEASE /etc/lsb-release | sed 's/^.*=//') elif [ -f /etc/os-release ]; then OS=$(grep -w ID /etc/os-release | sed 's/^.*=//') VER=$(grep VERSION_ID /etc/os-release | sed 's/^.*"\(.*\)"/\1/') else OS=$(uname -s) VER=$(uname -r) fi
Здесь elif [ -f /etc/lsb-release ]; then
elif [ -f /etc/lsb-release ]; then
код показывает ошибку.
Если shell сообщает об этой ошибке в 5-й строке сценария, который вы опубликовали, должна быть какая-то невидимая ошибка с оператором then
в первой строке.
Вы можете просмотреть свой скрипт с помощью команды cat -A
чтобы увидеть, есть ли в строке случайные символы ALT или другие непечатаемые символы. cat -A
будет отображать символы cat -A
строки как $
в конце каждой строки, управляющие символы с префиксом ^
и непечатаемые символы с 8-м битом, установленным с префиксом M-
. Например, символы табуляции будут отображаться как ^I
Вывод cat -A
может выглядеть немного неопрятно, но это отличный способ убедиться, что нет непечатных символов там, где их не должно быть.
Этот fragment сценария отлично работает для меня. Как отмечает @telecoM, скорее всего, некоторые странные символы в вашем скрипте.
$ cat -A x1 #!/bin/bash$ if [ -f /etc/centos-release ]; then$ OS="CentOs"$ VERFULL=$(sed 's/^.*release //;s/ (Fin.*$//' /etc/centos-release)$ VER=${VERFULL:0:1} # return 6 or 7$ elif [ -f /etc/lsb-release ]; then$ OS=$(grep DISTRIB_ID /etc/lsb-release | sed 's/^.*=//')$ VER=$(grep DISTRIB_RELEASE /etc/lsb-release | sed 's/^.*=//')$ elif [ -f /etc/os-release ]; then$ OS=$(grep -w ID /etc/os-release | sed 's/^.*=//')$ VER=$(grep VERSION_ID /etc/os-release | sed 's/^.*"\(.*\)"/\1/')$ else$ OS=$(uname -s)$ VER=$(uname -r)$ fi$ $ ./x1 $