web-dev-qa-db-ja.com

.shを実行して複数のコマンドを実行する

シェルスクリプトを介して複数のコマンドを実行する方法について興味がありました。

たとえば、試してみるために、.desktopを.shに接続して、すべての更新コードを実行するため、入力する必要はありません。複数ではなく、.shを介して単一のコマンドを実行する方法を知っています。

とにかく?

9
Brendon

本当にシンプル-コマンドを分離する必要があります。たとえば、これ:

#!/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

注:

upgradeコマンドで使用できるオプション(-y)があり、パッケージをアップグレードする前にプロンプ​​トを表示しません。パッケージをアップグレードする前に、apt-getが何をしているかを確認することをお勧めします。このようなオプションの詳細については、man apt-getを実行してください。

これはまた、更新対象を確認して実行できるため、ターミナルを使用してスクリプトを実行する方が理想的であることも意味します。 GUIで更新を実行する方法が必要な場合は、ソフトウェアセンターを使用してください。

9
Wilf

@Wilfによる優れた回答にいくつかのポイントを追加するだけで、

何らかの理由で必要な場合、paralellでコマンドを実行できます。たとえば、OpenBoxのautostartスクリプトは次のようになります。

#!/bin/bash

nitrogen --restore &
tint2 &
tilda

これにより、nitrogenを使用して背景画像が設定され、パネルtint2が開始され、Quake3スタイルのドロップダウンコンソールtildaが同時に開始されます。これは、次のプログラムを起動する前にプログラムを終了する必要がない場合に便利です。 apt-get updateおよびapt-get upgradeの場合ではありません!

各行の終わりにある&記号に注意してください。これにより、シェルはそのプロセスをバックグラウンドにフォークし、実行を継続します。 &&は基本的にand記号であり、command_1 && command_2はexecutecommand_1を実行し、成功して終了した場合にのみcommand_2を実行しますが、 command_1 & command_2は、最初の直後に2番目を開始します。


また、コマンドをスタックして、次のようにシリアルに実行することもできます。

#!/bin/bash

apt-get update
apt-get upgrade

これは、apt-get upgrade終了の後にapt-get updateを実行しますが、結果に関係ありません。そのため、たとえば、更新がネットワークエラーで終了した場合でも、アップグレードは実行されます。

;記号apt-get update ; apt-get upgradeを使用して、これを1行で行うこともできます。繰り返しますが、このソリューションは、これらの特定のコマンドに対して最適ではないですが、他の状況では便利になる場合があります。


最後に、&&を含む行を次のように改行することもできます。

command_1 &&
command_2

これはcommand_1 && command_2と同じです。

4
kraxor