Собственно сам скрипт:#!/bin/bash
#Internal variables
sClient="/usr/local/bin/mysql"
sshClient="/usr/bin/ssh"
workFile="/usr/local/sbin/scripts/fwstate.data"
trafficLog=/var/log/traffic/`date -I`.log
rsaHostKey="/etc/ssh/ssh_host_rsa_key"#Here we get a remainders of user bills and put them into a log
#Then we restore balance limit, unset block flag and turn on internet for choosen user
while read userIp userStatus
do
getTraffic="$sClient UTM -B -e \"select ip, bill from users where ip='$userIp'\" --password=\"xxxxxxx\" | sed -e "/ip/d" >> $trafficLog"
eval $getTrafficresetBill="$sClient UTM -B -e \"update users set bill=200 where ip='$userIp'\" --password=\"xxxxxxx\""
eval $resetBillresetBlock="$sClient UTM -B -e \"update users set block='0' where ip='$userIp'\" --password=\"xxxxxxx\""
eval $resetBlockresetFw="$sClient UTM -B -e \"update users set fw_on='1' where ip='$userIp'\" --password=\"cegthcbcntvf\""
eval $resetFwdone < "$workFile"
$sshClient -i $rsaHostKey root@xxx.xxx.xxx.xxx \"/usr/local/sbin/scripts/fwresetall\"
Что делает скрипт понятно...
Непонятно что сие значит while read userIp userStatus?
Что есть userIp userStatus?
И зачем вообще нужен здесь цикл?
read читает stdin и ставит то, что получила в переменные.
скрипт вызывается, и останавливается на while пока не прочитает Ip и status
>#!/bin/bashКстати! man bash же... Да, не каждый долетит до середины. Да каждый, кто долетел _каждый_ раз находит в нём что-то новое. И всего знать не может никто (это гипотеза %) ).
>while read userIp userStatus
>do
> getTraffic="
> eval $getTrafficПары команд (= и eval) в цикле "собирают" несколько командных строк и выполняют их, соответственно.
>done < "$workFile"
>Непонятно что сие значит while read userIp userStatus?""while read ...; do ...; done <file"" значит читать построчно текстовый "file" и выполнять тело цикла для каждой строки.
Более подробно:
...done <file - открывает ("передаёт на STDIN") на чтение файл, для команды while и её _потомков_...while read ...; do - пока команда read возвращает статус 0 ("успешное выполение") -- повторять выполнение цикла
...read userIp userStatus -- читать след.строку в переменные user* со STDIN (и кодом выхода сообщать об успешности чтения (строка прочитана или конец файла, например)
>Что есть userIp userStatus?
Имена переменных, в которые read читает "текст"
>И зачем вообще нужен здесь цикл?
Судя по названиям переменных %), выполняются какие-то команды для каждого из пользователей в списке. Какой-то сбор статистики (считалка трафика?..) по пользователям, наверное.