[shell] Полезности при работе с shell

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) Дополнительные материалы

Подводные камни Bash

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *