-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfunctions.sh
148 lines (135 loc) · 4.05 KB
/
functions.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#!/bin/bash
source variables.sh
### функция логирования
logf() {
( echo -e "=====\n"$LOG_DATE"\n"$1"\n=====\n" >> $LOG_FILE ) 2>/dev/null
}
### функция проверки существования файла
exist_file() {
if [ ! -f "$1" ]
then
logf "необходимый файл $1 отсутствует"
touch "$1" > /dev/null 2>&1
exit 1
fi
}
### функция проверки пустой ли файл
empty_file() {
if [ ! -s "$1" ]
then
logf "файл $1 пустой"
exit 1
fi
}
### функция проверки чтения файла
read_file() {
if [ ! -r "$1" ]
then
logf "файл $1 не читается"
exit 1
fi
}
### проверяем сущуствуют ли конфигурационные файлы
check_exist_file() {
exist_file $SENDER && \
exist_file "device.list" && \
exist_file "z_server.list" && \
# exist_file "z_hostname" && \
exist_file "z_touch.list"
}
### проверяем пустые ли конфигурационные файлы
check_empty_file() {
empty_file "device.list" && \
empty_file "z_server.list" # && \
# empty_file "z_hostname" #&& \
# empty_file "z_touch.file"
}
### проверяем можем ли прочитать данные из файлов
check_read_file() {
read_file "device.list" && \
read_file "z_server.list" && \
# read_file "z_hostname" && \
read_file "z_touch.list"
}
### функция создания файла , тихая , ошибки в девнул
check_touch() {
touch $1/$2 > /dev/null 2>&1 && rm $1/$2 > /dev/null 2>&1
}
### функция отправки в zabbix
z_sender() {
for SRV in ${ZSERVERS[@]}
do
$SENDER -z $SRV -s $ZHOSTNAME -k "$1" -o "$2" # для отладки использовать ключ -vv
# echo "-z $SRV -s $ZHOSTNAME -k "$1" -o "$2"" # "$GRP""
done
}
### ZHOSTNAME
z_hostname() {
case "$HNAME" in
### читаем из файла
0 )
if exist_file "z_hostname" && empty_file "z_hostname" && read_file "z_hostname"
then
ZHOSTNAME=$( head -n1 z_hostname | sed -e 's/^[ \t]*//;s/[ \t]*$//' )
else
logf "HNAME указан '0' но чтото пошлое не так"
exit 1
fi
;;
### берем из заббикс агента
1 )
if exist_file "$ZA_FILE" && read_file "$ZA_FILE"
then
### -i grep специально не ставил , убираем (на всякий случай) в начале и в конце пробелы табуляцию
ZHOSTNAME=$( cat $ZA_FILE | grep "Hostname=" | grep -v "^#" | awk -F "=" '{print $2}' | sed -e 's/^[ \t]*//;s/[ \t]*$//' )
if [ "$ZHOSTNAME" = "" ]
then
logf "имя хоста пустое в файле $ZA_FILE"
exit 1
fi
else
logf "чтото пошло не так с чтением имени хоста из конфига заббикс агента\nнадеюсь, до выполнения этого кода не дойдет выполнение >_< =D"
fi
;;
### hostname
2 )
ZHOSTNAME=`hostname`
if [ "$ZHOSTNAME" = "" ]
then
logf "имя хоста пустое в файле /etc/hostname"
exit 1
fi
;;
### какая то хрень
* )
logf "недопустимое значение переменной HNAME"
exit 1
;;
esac
}
### validIP
validIP() {
if exist_file "z_server.list" && empty_file "z_server.list" && read_file "z_server.list"
then
for SRV in ${ZSERVERS[@]}
do
readarray -td "." ZS <<< $SRV
if ! [[ $SRV =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ && ${ZS[0]} -le 255 && ${ZS[1]} -le 255 && ${ZS[2]} -le 255 && ${ZS[3]} -le 255 ]]
then
logf "ip $SRV неправильный"
exit 1
# else
# echo "ip $SRV правильный"
fi
done
fi
}
groot() {
if [[ $EUID -ne 0 ]]
then
`touch -a "I_am_Groot"`
#logf "i am Groot, и, возможно, не смогу сделать touch file во всех каталогах"
else
`rm -f ./"I_am_Groot"`
fi
}