Синтаксическая ошибка в скрипте SAProuter

Я наткнулся на следующий сценарий:

      #!/bin/sh
### Variables ###
porta="3299";
SECUDIR="/usr/sap/saprouter";
SNC_LIB="/usr/sap/saprouter/libsapcrypto.so";
DNAME="p:CN=server, OU=0001000000, OU=SAProuter, O=SAP, C=DE";
### Variables end ###

### Check if saprouter is already running:
pid1="'netstat -nlp | grep '0.0.0.0:"$porta"'.*saprouter' | sed -n 1p | awk '{print $7}' | cut -f1 -d "/" '";

if [ "$pid1" == "" ]

then # Not running.

  ### check if the port is free:
echo -e "\nChecking port…";
processo="'netstat -nlp | grep 0.0.0.0:"$porta" | sed -n 1p | awk '{print $7}' | cut -f1 -d "/"'";
sleep 2;

  # If port free:
if [ -f $processo ]
then
echo -e "\nStarting SAPRouter on port: " $porta;
sleep 2;
export SECUDIR=$SECUDIR
export SNC_LIB=$SNC_LIB

  /usr/sap/saprouter/./saprouter -r -R "$SECUDIR/saprouttab" -W 60000 -G "$SECUDIR/saprouterlog.txt" -S $porta -K "$DNAME" &

  pid="'netstat -nlp | grep '0.0.0.0:'"$porta"'.*saprouter' | sed -n 1p | awk '{print $7}' | cut -f1 -d "/" '";
echo -e "\n\nSAPRouter is running on PID: "$pid;
echo -e "\n";
exit;
# if the port isnot free.

  else
echo -e '——————————————————-\n';
echo -e ' It is not possible to start SAPRouter\n';
echo -e ' The PID: '$processo' is already using the port: ' $porta;
echo -e '——————————————————-\n';
fi

  ###################
else # Its already running.
echo -e "\nSAPRouter is already running";
pid="'ps -ef | grep saprouter | sed -n 1p | awk '{print $2}' '";
echo -e "\nPID: "$pid;
echo -e "\n";
sleep 2;
fi

Я думаю, что есть несколько ошибок. Я нашел код здесь : есть комментарий, исправляющий некоторые ошибки, но я не думаю, что все ошибки исправлены. Я заметил цитаты , которые я заменил на ". Но я все еще получаю эту ошибку:

run_router.sh: 12: [: 'netstat -nlp | grep '0.0.0.0:3299'.*saprouter' | sed -n 1p | awk '{print }' | cut -f1 -d / ': unexpected operator
-e 
SAPRouter is already running
-e 
PID: 'ps -ef | grep saprouter | sed -n 1p | awk '{print }' '
-e 

Поскольку у меня нет опыта работы со скриптами, я не знаю, какая строка в кавычках не определена, так как в этой строке много строк в кавычках:

pid1="'netstat -nlp | grep '0.0.0.0:"$porta"'.*saprouter' | sed -n 1p | awk '{print $7}' | cut -f1 -d "/" '";

Не могли бы вы помочь мне исправить этот сценарий?

Спасибо.

0
задан 10 August 2019 в 19:03

1 ответ

следующие попытки обратиться к синтаксическим ошибкам конкретно. Могут быть другие проблемы, которые заставляют его быть не в состоянии работать способ, которым Вы ожидаете : например, строка

if [ -f $processo ]

тесты, кажется ли обычный файл exisits, чье имя дано содержанием processo переменная - однако processo, вероятным содержать числовой ID процесса (PID). Возможно, то, что предназначил автор, было

if [ -n "$processo" ]

, чтобы проверить, непуста ли переменная или (более вероятно, учитывая контекст)

if [ -z "$processo" ]

, чтобы проверить, пусто ли это.

<час>

, Когда Вы исправили форматирование HTML загруженного сценарий, похоже, что Вы заменили по крайней мере некоторые умные котировки с «неправильными» персонажами ASCII - в особенности

processo="'netstat -nlp | grep 0.0.0.0:"$porta" | sed -n 1p | awk '{print $7}' | cut -f1 -d "/"'";

, и

  pid="'netstat -nlp | grep '0.0.0.0:'"$porta"'.*saprouter' | sed -n 1p | awk '{print $7}' | cut -f1 -d "/" '";

должен иметь «обратные галочки» (для замены команды) вместо регулярных прямых одинарных кавычек

processo="`netstat -nlp | grep 0.0.0.0:"$porta" | sed -n 1p | awk '{print $7}' | cut -f1 -d "/"`";

  pid="`netstat -nlp | grep '0.0.0.0:'"$porta"'.*saprouter' | sed -n 1p | awk '{print $7}' | cut -f1 -d "/" `";

Еще лучше, изменить их на более современное $(...) конструкция:

processo="$(netstat -nlp | grep 0.0.0.0:"$porta" | sed -n 1p | awk '{print $7}' | cut -f1 -d "/")";

  pid="$(netstat -nlp | grep '0.0.0.0:'"$porta"'.*saprouter' | sed -n 1p | awk '{print $7}' | cut -f1 -d "/" )";
2
ответ дан 23 October 2019 в 06:26

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

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