1)Построчное считываение.
#!/bin/sh
while read myline
do
echo $myline
done < inputfile
2)Инкремент переменной.
count=`expr $count + 1`
3) Перенаправление вывода:
Вот несколько вариантов:
#(exim -bv -v -d+all user@domain.ua 2>&1) > /tmp/test
#exim -bv -v -d+all user@domain.ua >/tmp/test2 2>&1
4) Используем and, or в операторе if
В данном примере используются условия “$count_inet” > 7 и одновременно “$count_gw” > 7. Для этого используем -a. Если нужно сделать условие or тогда ставим параметр -o
if [ "$count_inet" -gt 7 -a "$count_gw" -gt 7 ]
then
echo "Ping Ok"
else
echo "Ping down"
fi
5) Цикл while
#!/bin/sh
count="0"
while [ $count -lt "55" ]
do
count=`expr $count + 1`
route add -host `nslookup fs${count}.ex.ua | grep Address: | grep -v '#53' | awk '{print $2}'` 1.1.1.1
done
6) Перенаправление в blackhole
> /dev/null 2>&1
Если у вас используется pipe, или несколько команд и нужно перенаправить вывод результата, тогда применяем круглые скобки:
Пример1
(command1 | command2) > /dev/null 2>&1
Пример2
(command1 ; command2 | command3) > /dev/null 2>&1
7) awk или cut?
Для “вырезания” полей можно применять как awk, так и cut. Для маленьких файлов, разница не видна, но для файлов в пару сот МБ или даже Гб, скорость ощутима в пользу cut.
8 ) Построчное считывание из вывода команды
Нужно обработать вывод команды ps -efc | grep nginx, причём построчно.
out=`ps -efc | grep nginx` while IFS= read -r myline do out_array=(`${ECHO} $myline | ${AWK} '{print $3,$4,$8}' | ${TR} -d "M"`) virtual_memory=`expr $virtual_memory + ${out_array[0]}` physical_memory=`expr $physical_memory + ${out_array[1]}` cpu_time=`expr $cpu_time + ${out_array[2]}` done <<< "$out"
9) Дополнительные материалы