Запуск .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.

Це також означає, що більш ідеально використовувати термінал для запуску сценарію, оскільки ви можете перевірити, що він оновлює, а потім запустити його. Якщо ви хочете, щоб графічний інтерфейс запускав оновлення, використовуйте програмний центр як такий, для чого він призначений.


5

Просто додати кілька балів до чудової відповіді від @Wilf,

ви можете запускати команди в паралелі, якщо ви хочете з будь-якої причини, наприклад, 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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.