Неожиданный EOF и синтаксическая ошибка

Я закончил тем, что использовал ответ jordanms, но добавил мое собственное скручивание.

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

if   grep -q -i "release 6" /etc/redhat-release ; then
  rhel6only=1
elif grep -q -i "release 5" /etc/redhat-release ; then
  rhel5only=1
else
  echo "Running neither RHEL6.x nor RHEL 5.x !"
fi

Тем путем я мог сделать вещи как:

# JDK
[ $rhel5only ] && module load java/6
[ $rhel6only ] && module load java/7

# Eclipse
module load eclipse

# Python
[ $rhel5only ] && module load python/2
[ $rhel6only ] && module load python/3

и т.д.

9
02.10.2014, 20:13
4 ответа

Option 1:

Поскольку у вас есть наполовину настроенный mongodb-org-server и распакованный, но (не настроенный) mongodb-org , попробуйте выполнить следующую команду:

dpkg --configure mongodb-org-server mongodb-org

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

dpkg --configure --force-depends mongodb-org-server mongodb-org

Option 2:

Поскольку конфигурация пакета, похоже, не будет завершена нормально Тем не менее, следующее довольно трудный способ сделать это, и я предлагаю вам сначала прочитать его и иметь в виду, что я на самом деле не тестировал его.

Сначала получите список файлов, установленных пакетами mongodb-org:

dpkg-query -L mongodb-org mongodb-org-server mongodb-org-mongos mongodb-org-shell mongodb-org-tools | grep "^\/[^\.]" > mongo.files

Затем проверьте содержимое файла mongo.files (чтобы убедиться, что он содержит только пути, которые можно удалить), выполнив следующие действия:

less mongo.files

Затем удалите эти файлы из системы путем ввода:

 rm `cat mongo.files`

Затем необходимо сообщить менеджеру пакетов, что эти пакеты в настоящее время не установлены в системе, изменив вручную /var/lib/dpkg/status . Прежде чем делать что-либо с этим файлом, создайте резервную копию на случай, если что-то пойдет не так (помните, мы делаем операцию над внутренними данными менеджера пакетов...). Файл форматируется в секциях последовательных строк текста, разделенных пустой строкой. Найдите все разделы файла, начинающиеся с пакет: mongodb-org , и удалите их (удалите все строки из строки, начинающейся с «Package», вплоть до пустой строки). По завершении сохраните файл и запустите apt-get update , а затем apt-get install mongodb-org .

Я, конечно, надеюсь, что это ничего не сломает и в конце концов вы получите функционирующую копию MongoDB.

-121--140045-

Эти сообщения являются «отскоками». Обычно это происходит из-за того, что кто-то другой отправляет сообщение одному из ваших пользователей, и когда сообщение не может быть доставлено, почтовый сервер генерирует сообщение об отскоке. Вы можете передать их из обычных сообщений, потому что сообщения с отскоком всегда имеют отправителя конверта < > .

В этом случае, как представляется, исходное сообщение содержало конверт отправителя < предмет @ bookingwidget.co.uk > , и поэтому почтовый сервер пытается доставить информацию о сбое сообщения на этот адрес.

Вам нужно будет просмотреть одно из фактических сообщений, чтобы выяснить, каким было исходное сообщение и почему оно не может быть доставлено.

-121--167138-

Проблема в том, что в операторе case отсутствует тема - переменная, которую следует вычислить. Поэтому, вероятно, требуется следующее:

#!/bin/bash
cat <<EOD
choose one of the following options:
1) display all current users
2) list all files
3) show calendar
4) exit script
EOD

while true; do
    printf "your choice: "
    read
    case $REPLY in
        1) who;;
        2) ls -a;;
        3) cal;;
        4) exit;;
    esac    
done

Здесь case использует переменную по умолчанию $ REPLY , которая читается , когда ей не даны имена переменных (подробнее см. в справке ).

Также обратите внимание на изменения: printf используется для отображения приглашения в каждом раунде (и не добавляет новую строку), cat используется для печати инструкций на нескольких строках, чтобы они не переносились и были проще в чтении.

5
27.01.2020, 20:06

. Давайте попробуем изначально на один случай. Я буду использовать READ -P для чтения пользовательского ввода в перемему opt , а затем оператор Case, как показано ниже.

#!/bin/bash
read -p "choose one of the following options : \
  1) display all current users \
  2) list all files \
  3) show calendar \
  4) exit script" opt
case $opt in
1) who;;
2) ls -a;;
3) cal;;
4) exit;;
esac

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

, так что мы могли бы сделать это с помощью петля, как показано ниже. Я устанавливаю вариабельную opt с исходным значением в качестве 0. Теперь я итерацию в , в то время как , в то время как POLOOP до тех пор, пока Privable opt имеет значение как 0 (Вот почему я сбрасываю opt переменную как 0, в конце корпуса ).

#!/bin/bash
opt=0;
while [ "$opt" == 0 ]
do
read -p "choose one of the following options : \
  1) display all current users \
  2) list all files \
  3) show calendar \
  4) exit script" opt

case $opt in
1) who;;
2) ls -a;;
3) cal;;
4) exit;;
esac
opt=0
done
2
27.01.2020, 20:06

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

while :
do
    echo "choose one of the following options : \
      1) display all current users \
      2) list all files \
      3) show calendar \
      4) exit script"
    read string
    case $string in
        1)
            who
            ;;

Затем несут вопросы и заканчиваются

esac
done
0
27.01.2020, 20:06

Давайте не забывайте Выбрать :

choices=( 
    "display all current users" 
    "list all files" 
    "show calendar" 
    "exit script"
)
PS3="your choice: "
select choice in "${choices[@]}"; do
    case $choice in
        "${choices[0]}") who;;
        "${choices[1]}") ls -a;;
        "${choices[2]}") cal;;
        "${choices[3]}") break;;
    esac
done
6
27.01.2020, 20:06

Теги

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