változók láthatósága - bash
Kedves Fórumozók!
A következő shell scriptet faragom éppen, de nem akar úgy működni, ahogy azt én szeretném:
OK=0
WARNING=1
CRITICAL=2
UNKNOWN=3
append() {
if [ -z "$1" ]; then
echo "$2"
else
echo "$1; $2"
fi
}
FS_USAGE=$( df -k | /usr/xpg4/bin/grep -E "swap|^/dev" | awk '{print $6,$5;}' )
FS_PAIRS=$( echo "$FS_USAGE" | tr -d % )
WARNINGS=""
CRITICALS=""
echo "$FS_PAIRS" | while read FS US; do
echo "$FS:$US"
if [ "$US" -gt 5 ]; then
echo "FIRED!"
CRITICALS=$( append "$CRITICALS" "$FS: $US%!!!" )
echo "$CRITICALS"
else
if [ "$US" -gt 85 ]; then
WARNINGS=$( append "$WARNINGS" "$FS: $US%" )
fi
fi
done
echo "/${CRITICALS}/"
echo "/${WARNINGS}/"
echo "/$CRITICALS/"
echo "/$WARNINGS/"
if [ "$CRITICALS" ]; then
echo "CRITICAL: $CRITICALS"
exit $CRITICAL
fi
if [ "$WARNINGS" ]; then
echo "WARNING: $WARNINGS"
exit $WARNING
fi
echo "OK"
exit $OK
A kimenet pedig:
/:3
/boot:10
FIRED!
/boot: 10%!!!
/var:11
FIRED!
/boot: 10%!!!; /var: 11%!!!
//
//
//
//
OK
A problémám pedig konkrétan az, hogy a CRITICALS, és WARNINGS változóba szeretném gyűjteni az adott felhasználási küszöbnél magasabb telítettségű FS-eket, és a ciklus vége után a szkript mintha "elfelejtené" a változó tartalmát. Ez valószínűleg azért lehet, mert egy azonos nevű lokális változót hoz létre a script, és a blokk vége után az értéke elveszik.
De itt nem függvényről, vagy szubrutinról van szó, és a változót direkt létrehoztam még a ciklus előtt. Amúgy is egy blokkon belül alapból nem kellene lokális változót létrehoznia, csak akkor, ha előtte a local kulcsszót használom. Nemde? Hogy van ez?
- Tovább (változók láthatósága - bash)
- 9081 megtekintés