「TeamSpeak3」クライアントの最新バージョンをインストールし、すべてを構成するためにスクリプトに「関数」を入れようとしています。
私の問題は、バージョン番号の部分をテストする関数を作成する方法がわからないことです。数字。数字。数字。数字数字の範囲は 0 ~ 99 です。
たとえば、URLの値を含む変数を取得します。
URL=http://dl.4players.de/ts/releases/$version/TeamSpeak3-Client-linux_$arch-$version.run
ここで $Version 変数の最新バージョンは 3.0.16 です。最新のウェブサイトのアドレスは次のとおりです。
http://dl.4players.de/ts/releases/3.0.16/TeamSpeak3-Client-linux_x86-3.0.16.run
しかし、将来このスクリプトを使用するときは、URLの番号を確認して自動的に最新バージョンを決定したいと思います。
「アーチ」の場合、次のコードがあります。
# Determining the system arch
arch=$(uname -m)
case "$arch" in
x86) arch="x86" ;;
i?86) arch="x86" ;;
amd64) arch="amd64" ;;
x86_64) arch="x86_64" ;;
* ) echo "Your Arch '$arch' -> Its not supported." ;;
esac
たぶん、配列やそれに似たものかもしれません。このアイデアを実装するのに役立つ人はいますか?
ベストアンサー1
これが純粋なシェルスクリプトを使用してはならない理由です。代わりに何かを使用する方が良いミッションのためuscan(perlスクリプト)のように直接実行するのではなく、次のようにします。
$ uscan --watchfile teamspeak --package TeamSpeak3 --no-download --verbose --upstream-version 3.0.16
-- In test, processing watchfile line:
http://dl.4players.de/ts/releases/([\d\.]+)/TeamSpeak3-Client-linux_amd64-([\d\.]+).run
-- Found the following matching hrefs:
TeamSpeak3-Client-linux_amd64-3.0.16.run (3.0.16)
Newest version on remote site is 3.0.16, local version is 3.0.16
=> Package is up to date
Teampeakファイルの内容は次のとおりです。
version=2
http://dl.4players.de/ts/releases/([\d\.]+)/TeamSpeak3-Client-linux_amd64-([\d\.]+).run
上記の例では、最新バージョンのバージョンを手動で設定しました。必要に応じて、--version
パラメータをサポートするTeamSpeakのバージョンを置き換えることができます。つまり:
$ uscan --watchfile teamspeak --package TeamSpeak3 --no-download --verbose --upstream-version $(teamspeak --version)
数値を出力する必要があります。最新の実行ファイルを自動的にダウンロードすることもできます--no-download
。オプションを削除するだけです。これの利点は、非常に柔軟で、新しいバージョンがリリースされたときに何も修正する必要がなく、バージョンが破損することを心配する必要がないことです。
ユースケースの唯一の実際の制限は、uscanがスキーマ設定をサポートしていないことです。ただし、別のファイル(teampeak-i386など)を作成して次のようにURLを調整すると、この制限を簡単に克服できます。
version=2
http://dl.4players.de/ts/releases/([\d\.]+)/TeamSpeak3-Client-linux_x86-([\d\.]+).run