Какая система X Window установлена ​​на моем сервере, которая будет работать с Xming

Не хватает пробелов.

  • if[ "$1" -eq "Сервер" ];
  • elif[ "$1" -eq "По умолчанию" ]; затем

Это должен быть пробел после ключевых слов if и elif.

  • for((i=1; i

Это (отсутствует пробел после для) не является строго ошибкой, но должно быть исправлено для согласованности с остальной частью кода.

Вы также используете -eq для сравнения строк. Чтобы сравнить строки, используйте = (-eq сравнивает целые числа):

if [ $choice = "Yes" ]; then

Я также не уверен, что вы хотели бы, чтобы это делало:

user_input routers[@] router_number R 

Вы можете захотеть

routers=( $(user_input "$router_number" R) )

или что-то подобное (и измените свою функцию user_input так, чтобы она соответствовала этому).

Расширения переменных также следует заключать в двойные кавычки. См. «Последствия для безопасности, если вы забыли заключить переменную в кавычки в оболочках bash/POSIX», чтобы узнать, почему.

Вставьте свой сценарий в ShellCheck, чтобы получить более полный список возможных проблем: https://www.shellcheck.net/

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

Еще один совет, позволяющий избежать длинных if-then-elif битов, заключается в использовании case ... esac:

case "$1" in
    Router)
        echo 'How many routers?'
        read router_number
        # etc.
        ;;
    Switch)
        # stuff for switches
        ;;
    Host)
        # stuff for hosts
        ;;
    *)
        echo 'Something is wrong' >&1
        exit 1
        ;;
esac

Это также позволяет легко сопоставлять шаблоны. R*) в «метке case» будет соответствовать Router и любой другой строке, начинающейся с R. R*|H*) будет соответствовать любой строке, начинающейся с R или H и т. д.

1
02.01.2016, 16:37
0 ответов

Теги

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