以下の配列は、各Linuxシステムのディスク数を示します。
各単一アレイディスクの番号を含めるLinuxマシン。
echo ${ARRAY_DISK_Quantity[*]}
4 4 4 4 2 4 4 4
すべての配列値が同じであることを確認する簡単な方法は何ですか?
良い状態で:
4 4 4 4 4 4 4 4
悪い気分:
4 4 4 4 4 4 2 4
悪い気分:
6 6 6 6 6 6 6 6 6 6 2 6 2
ベストアンサー1
bash
+GNU sort
+GNUgrep
ソリューション:
if [ "${#array[@]}" -gt 0 ] && [ $(printf "%s\000" "${array[@]}" |
LC_ALL=C sort -z -u |
grep -z -c .) -eq 1 ] ; then
echo ok
else
echo bad
fi
英語の説明:配列要素を一意に並べ替えると、要素が1つだけ生成された場合は「ok」を印刷します。それ以外の場合は「bad」を印刷します。
配列は各要素を区切るNULバイトで印刷され、GNUソート(-z
aka--zero-terminated
と-u
aka--unique
オプションによって異なります)でパイプされ、次にパイプ(akaとakagrep
オプションを使用)で接続され、出力行数を計算します。-z
--null-data
-c
--count
wc
以前のバージョンとは異なり、入力行は改行で終わる必要があるため、ここでは使用できません。そして、NULを改行で使用または変換すると、sed
NUL区切り文字を使用する目的が無効になります。合理的に置き換えてください。tr
sort
grep -c
以下は、関数で書き換えたのと同じ内容です。
function count_unique() {
local LC_ALL=C
if [ "$#" -eq 0 ] ; then
echo 0
else
echo "$(printf "%s\000" "$@" |
sort --zero-terminated --unique |
grep --null-data --count .)"
fi
}
ARRAY_DISK_Quantity=(4 4 4 4 2 4 4 4)
if [ "$(count_unique "${ARRAY_DISK_Quantity[@]}")" -eq 1 ] ; then
echo "ok"
else
echo "bad"
fi