Как мне написать сценарий оболочки для установки списка приложений?

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

Редактировать:Он все еще спрашивает меня Do you want to continue [Y/n]?. Есть ли способ получить ввод скрипта y или для того, чтобы он не запрашивал ввод?

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

#!/bin/shapt-get update  # To get the latest package listsapt-get install <package name> -y#etc.

Просто сохраните это как что-то вроде install_my_apps.sh , измените свойства файла, чтобы сделать его исполняемым, и запустите его из командной строки от имени root.

(Редактировать: То -y говорит apt-get не для того, чтобы подсказывать вам, а просто продолжайте установку)

Что ж, согласно вашему вопросу, самым простым сценарием будет:

#!/bin/shLIST_OF_APPS="a b c d e"aptitude updateaptitude install -y $LIST_OF_APPS

Однако вы также можете ввести aptitude update && aptitude install -y a b c d e. Так что, возможно, в вашем вопросе здесь не хватает самого важного момента. Если есть какие-то дополнительные требования, было бы неплохо объяснить их.

Просто создайте список приложений в файле example.list и запустите

cat example.list | xargs sudo apt-get -y install

Я бы выбрал следующий сценарий: vim install

#!/bin/bashapt-get update  # To get the latest package listsapt-get install $1 -y

Затем я должен сделать приведенный выше скрипт исполняемым chmod +x install. Затем, чтобы использовать его, я мог бы ввести: ./install <package_name>. Пример: ./install clang

#!/bin/bashset -eu -o pipefail # fail on error and report it, debug all linessudo -n truetest $? -eq 0 || exit 1 "you should have sudo privilege to run this script"echo installing the must-have pre-requisiteswhile read -r p ; do sudo apt-get install -y $p ; done < <(cat << "EOF"    perl    zip unzip    exuberant-ctags    mutt    libxml-atom-perl    postgresql-9.6    libdbd-pgsql    curl    wget    libwww-curl-perlEOF)echo installing the nice-to-have pre-requisitesecho you have 5 seconds to proceed ...echo orecho hit Ctrl+C to quitecho -e "\n"sleep 6sudo apt-get install -y tig

Объяснение:

  • set -eu -o pipefail команда:

    Командные элементы Объяснение
    set Измените способ работы среды оболочки
    -u Если переменная не существует, сообщите об ошибке и остановитесь (например, несвязанная переменная).
    -e Завершается всякий раз, когда возникает ошибка (например, команда не найдена)
    -o pipefail Если подкоманда завершается с ошибкой, вся команда конвейера завершается с ошибкой, завершая сценарий (например, команда не найдена)

    Если этот скрипт обнаружит какие-либо ошибки, он завершится с ошибкой и завершится.

    Ссылка: https://www.tutorialdocs.com/article/set-command-in-bash.html

  • sudo -n true команда:

    Командные элементы Объяснение
    sudo Запуск от имени суперпользователя
    -n Неинтерактивный. Предотвращает sudo от запроса пароля. Если таковой требуется, sudo отображает сообщение об ошибке и завершает работу
    true Встроенная команда, которая возвращает статус успешного (нулевого) выхода

    Запускайте от имени суперпользователя и не запрашивайте пароль. Статус выхода как успешного.

    Ссылка: https://linux.die.net/man/8/sudo, https://linux.die.net/abs-guide/internal.html

  • test $? -eq 0 || exit 1 "you should have sudo privilege to run this script" команда:

    Командные элементы Объяснение
    test Принимает выражение в качестве аргумента, оценивает его как '0' (true) или "1" (false) и возвращает результат в переменную bash $?
    $? Переменная, используемая для определения возвращаемого значения в качестве статуса завершения последней выполненной команды
    -eq равняется
    0 Значение result равно true
    || Логическое "ИЛИ" - это логический оператор. Он может выполнять команды или функции оболочки на основе статуса завершения другой команды
    exit Завершает оболочку со статусом N. Если N не указано, он использует код выхода последней выполненной команды
    1 Значение result равно false и используется здесь в качестве аргумента команды exit для использования в качестве кода выхода
    "you should have sudo privilege to run this script" Если код выхода равен false, выведите это сообщение на терминал

    Проверьте код выхода последней переменной и посмотрите, равен ли он "0". Если нет, завершите работу с ошибкой и выведите данное сообщение на терминал.

    Ссылка: https://linuxhint.com/bash-test-command/, http://tldp.org/LDP/abs/html/exit-status.html#EXSREF, https://bash.cyberciti.biz/guide/Logical_OR, https://linuxize.com/post/bash-exit/

  • echo installing the must-have pre-requisites команда:

    Командные элементы Объяснение
    echo Встроенная команда, используемая для вывода информации или сообщений на терминал
    installing the must-have pre-requisites Сообщение для печати на терминале

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

    Ссылка: https://linuxhint.com/bash_echo/

  • while read -r p ; команда:

    Командные элементы Объяснение
    while Создайте цикл while, т.е. выполняйте заданный набор команд до бесконечности до тех пор, пока заданное условие не будет оценено как true
    read Считайте строку из стандартного ввода и сохраняйте ее в переменной
    -r Опция, переданная в read команда, которая избегает обратной косой черты, не интерпретируется
    p Произвольная переменная для read для сохранения захваченных входных данных. Здесь он представляет каждый пакет, который будет установлен
    ; Оператор управления И. Переходите к следующей команде и выполняйте ее независимо от статуса завершения предыдущей команды (выполняйте, даже если предыдущая команда завершилась неудачно)

    Считывайте данный файл построчно вечно или до получения значения "false", затем переходите к следующей команде.

    Ссылка: https://linuxize.com/post/bash-while-loop/, http://linuxcommand.org/lc3_man_pages/readh.html,https://linuxhint.com/while_read_line_bash/,https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_04_09

  • do sudo apt-get install -y $p ; команда:

    Командные элементы Объяснение
    do Зарезервированное слово, используемое для обозначения последовательности следующих команд. т.е. начать
    apt-get Инструмент, используемый менеджером пакетов Debian APT (Advanced Package Tool)
    install Команда, используемая для установки пакетов
    -y Длинная форма - это --yes. предполагайте "да" во всех запросах.
    $p Используется для вызова произвольной переменной p от read и используйте его в качестве стандартного ввода

    Установите список пакетов от имени суперпользователя без запроса подтверждения установки.

    Ссылка: https://itsfoss.com/apt-get-linux-guide/

  • done < <(cat << "EOF" <list of packages> EOF) команда:

    Командные элементы Объяснение
    done Зарезервированное слово, используемое для разграничения последовательности команд, которые предшествуют. например, stop
    < Перенаправление на стандартный ввод
    cat Соединять. используется для просмотра, создания и добавления файлов
    << Перенаправление, которое считывает входные данные из текущего источника до тех пор, пока не встретит разделитель, а затем использует эти строки в качестве стандартного ввода для команды
    EOF Конец разделителя файлов
    cat << EOF-EOF Это позволит прочитать, а затем распечатать все, что заключено в EOF блок
    <(list) Получите выходные данные списка; круглые скобки указывают, что список будет выполняться в среде подоболочки

    Прочитайте список пакетов и соберите их в качестве стандартных входных данных. Перенаправить его на read команда, которая фиксирует его как p переменную, а затем отправляет ее в $p переменная, которая позволяет ей выполняться с помощью install команду, и когда она достигнет EOF разделитель, перенаправьте вывод на done эффективное прекращение while read петля.

    Ссылка: https://linuxhint.com/cat-command-bash/, https://linuxhint.com/what-is-cat-eof-bash-script/

Следующие четыре echo сообщения не требуют пояснений:

  • echo installing the nice-to-have pre-requisites
  • echo you have 5 seconds to proceed ...
  • echo or
  • echo hit Ctrl+C to quit

однако следующий - нет.

  • echo -e "\n" команда:

    Командные элементы Объяснение
    -e Включить функцию символов обратной косой черты
    \n Экранированная последовательность обратной косой черты для новой строки

    Эта команда создает новую строку.

  • sleep 6 команда:

    Командные элементы Объяснение
    sleep Задержка выполнения сценария bash, как правило, на N секунд, если не используется опция для указания более длительных периодов времени

    Задержите выполнение следующей команды на 6 секунд.

    Ссылка: https://linuxhandbook.com/bash-sleep/

  • sudo apt-get install -y tig команда:

    Установите tig пакет с Debian apt-get инструмент во время выполнения установки от имени суперпользователя и не запрашивать подтверждение.

Общие ссылки:

Я написал для этого сценарий. Проверка GitHub - dinukasal/install: Install any package on linux with high level commands eg. "lamp", "mean", "jdk", "opencv" вы также можете добавлять пакеты