Запуск .sh для выполнения нескольких команд

9

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

Например, просто чтобы попробовать, я хотел бы иметь возможность подключить .desktop к .sh, который будет запускать все коды обновления, поэтому мне не нужно его печатать. Я знаю, как выполнить одну команду через .sh, а не несколько.

Тем не мение?

Брендон
источник

Ответы:

10

На самом деле все просто - вам нужно разделить команды. Например это:

#!/bin/bash
sudo apt-get update
sudo apt-get upgrade

обновит списки пакетов, а затем пакеты. Другая возможность заключается в следующем (возможно, лучше, так как && разрешит выполнение upgradeкоманды только при updateуспешном выходе) :

#!/bin/bash
sudo apt-get update && sudo apt-get upgrade

Это должно запустить команды для обновления списка пакетов, а затем сами пакеты. Это должно быть сохранено в текстовом файле (например, updatescriptв домашнем каталоге). Затем вы можете сделать его исполняемым, выполнив:

 chmod +x ./updatescript

или щелкнув правой кнопкой мыши по файлу и сделав его исполняемым в его свойствах:

и запустите его с этим в терминале:

 ./updatescript

Ноты):

-yДоступна опция ( ), которую можно использовать с upgradeкомандой, поэтому она не запрашивает перед обновлением пакетов. Хорошей идеей будет проверить, что apt-getпроисходит перед обновлением пакетов, так как он может / сделает что-то глупое или что-то, что вы не хотите делать. Больше информации о таких опциях можно найти, запустив man apt-get.

Это также означает, что для запуска сценария лучше использовать терминал, поскольку вы можете проверить, что он обновляет, а затем запустить его. Если вы хотите использовать GUI для запуска обновлений, используйте софт-центр, для которого он предназначен.

Уилф
источник
5

Просто чтобы добавить несколько баллов к отличному ответу @Wilf,

вы можете запускать команды в paralell, если хотите по какой-либо причине, например, autostartскрипт для OpenBox может выглядеть так:

#!/bin/bash

nitrogen --restore &
tint2 &
tilda

Это позволит установить фоновое изображение nitrogen, запустить панель tint2и запустить выпадающую консоль в стиле Quake3 tildaодновременно. Это полезно, если вам не нужна программа для завершения до запуска следующей. Не тот случай, apt-get updateи apt-get upgradeхотя!

Обратите внимание на &знак в конце каждой строки. Это заставит оболочку перевести этот процесс в фоновый режим и продолжить выполнение. Обратите внимание на то, что он отличается от того &&, что в основном является andзнаком, command_1 && command_2будет выполняться command_1и, если он завершится с успехом, только затем запустится command_2, а command_1 & command_2второй сразу после первого запустится.


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

#!/bin/bash

apt-get update
apt-get upgrade

Это будет работать apt-get upgradeпосле того, как apt-get updateбудет закончено , но независимо от результата. Таким образом, даже если, например, обновление завершится с сетевой ошибкой, обновление все равно будет запущено.

Вы также можете сделать это в одной строке, используя ;знак: apt-get update ; apt-get upgrade. Опять же, это решение не является оптимальным для этих конкретных команд, но оно может пригодиться в других ситуациях.


В заключение, вы также можете разбить строки, содержащие &&как таковые:

command_1 &&
command_2

Это будет так же, как command_1 && command_2.

kraxor
источник