Le tableau suivant représente le nombre de disques sur chaque machine Linux
Chaque baie unique comprend le nombre de disques sur une machine Linux .
echo ${ARRAY_DISK_Quantity[*]}
4 4 4 4 2 4 4 4
quelle est la manière simple d'identifier que toutes les valeurs du tableau sont égales?
Bon état:
4 4 4 4 4 4 4 4
Mauvais état:
4 4 4 4 4 4 2 4
Mauvais état:
6 6 6 6 6 6 6 6 6 6 2 6 2
bash
shell-script
awk
array
Yael
la source
la source
Réponses:
bash
+ Solution GNUsort
+ GNUgrep
:Explication en anglais: si le tri unique des éléments du tableau résulte en un seul élément, imprimez "ok". Sinon, imprimez "mauvais".
Le tableau est imprimé avec des octets NUL séparant chaque élément, canalisé en tri GNU (en s'appuyant sur les options
-z
aka--zero-terminated
et-u
aka--unique
), puis engrep
(en utilisant les options-z
aka--null-data
et-c
aka--count
) pour compter les lignes de sortie.Contrairement à ma version précédente, je ne peux pas l'utiliser
wc
ici car cela nécessite des lignes d'entrée terminées par un retour à la ligne ... et l'utilisation desed
outr
pour convertir les NUL en retour à la ligne après l'sort
échec du but d'utiliser les séparateurs NUL.grep -c
fait un substitut raisonnable.Voici la même chose réécrite en fonction:
la source
sort -u
cela ne renvoie pas d'éléments uniques mais un de chaque ensemble d'éléments qui trient les mêmes. Par exemple, il dirait "ok" surARRAY_DISK_Quantity=(① ②)
un système GNU où les locales décident généralement que ces 2 caractères sont triés de la même manière. Vous voudriez l'LC_ALL=C sort -u
unicité d'octet à octet.Avec
zsh
:Où se
(u)
trouve un indicateur d'extension de paramètre pour développer des valeurs uniques . Nous obtenons donc un nombre de valeurs uniques dans le tableau.Remplacez
== 1
par si<= 1
vous voulez considérer qu'un tableau vide est OK.Avec
ksh93
, vous pouvez trier le tableau et vérifier que le premier élément est le même que le dernier:Avec ksh88 ou pdksh / mksh:
Avec
bash
, vous auriez probablement besoin d'une boucle:(fonctionnerait avec tous les shells de type Bourne avec le support des tableaux (ksh, zsh, bash, yash)).
Notez qu'il renvoie OK pour un tableau vide. Ajoutez un
[ "$#" -gt 0 ] || return
au début de la fonction si vous ne le souhaitez pas.la source
bash
?typeset
indiqueObsolete. See `help declare'.
Y a-t-il une raison pour laquelle vous l'utilisez à la place delocal
oudeclare
?typeset
est celui qui fonctionne dans les 4 coques. C'est également l' original de ksh au début des années 80 (bash a principalement copié ksh88 en ce qui concerne le paramètre et la déclaration du type de portée variable, mais a décidé de renommertypeset
declare
et de créertypeset
un alias à déclarer).bash
+awk
soltion:Cas de test n ° 1:
Cas de test n ° 2:
la source
J'ai une autre solution bash uniquement qui devrait également fonctionner avec des chaînes:
Manifestation:
la source
Avec bash et GNU grep:
la source
Voici POSIX Awk:
la source
bash seule solution ( en supposant
a
estARRAY_DISK_Quantity
)la source
if [ "$ttt" -ne "$i" ]; then res=1; break; fi;
Utilisez une boucle for pour comparer chaque élément du tableau au suivant. Terminez la boucle une itération de moins que la longueur du tableau pour éviter de comparer le dernier élément à rien à la fin.
la source