hh:mm:ssを比較するためにSolarisボックスに設定されているIF

hh:mm:ssを比較するためにSolarisボックスに設定されているIF

hh:mm:ss型変数を比較する次のスクリプトを作成しました。

#!/bin/sh

lag=00:00:00
MAX_LAG=00:05:00

echo $lag
echo $MAX_LAG

if [ "$lag" \< "$MAX_LAG" ]
##if [ "$lag" -lt "$MAX_LAG" ]
##if [ "$lag" -lt "$MAX_LAG" ]
then
   echo "No LAG found."
else
   echo "LAG more than $MAX_LAG was found."
fi

Linuxボックスで実行すると、スクリプトは正しい出力を提供します。

[test@sandboxtest02 ~]$ ./testhh.sh
00:00:00
00:05:00
No LAG found.

ただし、Solaris ボックスで同じスクリプトを実行すると、スクリプトでエラーが発生します。

% sh test.sh
00:00:00
00:05:00
test.sh: test: unknown operator <

Solarisボックスで何を変更すべきかを提案してもらえますか?

ベストアンサー1

<標準演算子ではないtest/[..](下記の引用を参照)。 Bash、Dash、busyboxなどではサポートされているようですが、Zshではサポートされていないようです(Kshの他のバージョンについてはわかりません)。 Bash、ksh、Zshもサポートされています(エスケープは不要)。これらのいずれかをサポートするシェルを見つけて使用する必要があります。[[ str1 < str2 ]]<

(知っているSolaris 10 以前には POSIX 以前のバージョンもありました。/bin/sh、これはいかなる意味でも標準ではないので重要ではありません。 )

新しく発明されたまたはKornShellからのいくつかの追加の基本コマンドは、条件付きコマンドの一部として最初の提案に登場しました([[]]):s1>s2、s1<s2、...次に渡されません。テスト条件付きコマンドがまだ含まれていないため、シェルから削除されたときのユーティリティテスト歴史的実装に組み込まれたユーティリティシェン便利です。

おすすめ記事