Суть сценариев оболочки должна выполнить как можно меньше команд. Здесь, awk
обычно команда, которая лучше всего разработана, чтобы разделить строки на поля и сделать арифметику:
awk '{for (i = 1; i<= NF; i++) $i = $i/1024; print}' < your-file
Используя циклы оболочки в оболочках часто знак плохой практики сценариев оболочки.
Вы можете сделать что-то вроде этого (непроверено, будет работать только в Linux):
#!/bin/zsh
TIMEOUT=6000 # hundredths of seconds; in this case, 10 minutes
zmodload zsh/system
zmodload zsh/zselect
for i in /dev/input/*; do
[[ -c "$i" ]] && sysopen -r -o cloexec -u fd "$i"
dev=($dev[@] $fd)
done
while zselect -t $TIMEOUT $dev; do
sleep 5
done
# timeout occurred
shutdown -h now
Но это только технически все еще сценарий оболочки. :)
Он также не будет работать правильно, если после его запуска будут подключены дополнительные устройства ввода (он будет игнорировать ввод на них).