Мне нужно отправить несколько строк с ожиданием в систему через telnet, и я получил следующие примерные строки:
$ cat SERVERTEMPPASSWORDLIST.txt
SID=21|21|asldf8j2sRa2255||2840400|
SID=21|27|ala"sd8fjs2A"$||2840400|alsd8fj2s%"aa
SID=21|27|alsd"8fujs!"sl9a2e4|asdf2$sa5$23|2840400|asdfs2asl92
SID=21|21|holysshit||2840400|
Скрипт должен сделать это:
$ cat test.sh
#!/usr/bin/env bash
(
grep -E "SID=${sid}" SERVERTEMPPASSWORDLIST.txt | while read line; do
TCID=$(echo ${line} | cut -d '|' -f 2)
TSPW="$(echo ${line} | cut -d '|' -f 3)"
TCPW="$(echo ${line} | cut -d '|' -f 4)"
DURATION="$(echo ${line} | cut -d '|' -f 5)"
DESC="$(echo ${line} | cut -d '|' -f 6)"
if [[ "${TCPW}" != "" ]]; then
cat <<- ADDENTRY
expect "error id=0 msg=ok"
send "addentry pw=${TSPW} desc=${DESC} duration=${DURATION} tcid=${TCID} tcpw=${TCPW}\r"
ADDENTRY
else
cat <<- ADDENTRY
expect "error id=0 msg=ok"
send "addentry pw=${TSPW} desc=${DESC} duration=${DURATION} tcid=${TCID}\r"
ADDENTRY
fi
done
) | expect > RESULT.txt
Что касается некоторых специальных символов, таких как «и $», он не выводит сообщение об ошибке, в котором есть дополнительные символы после закрывающей кавычки, или, например, он не может найти переменную «sa5».
$ ./test.sh
extra characters after close-quote
while executing
"send "addentry pw=ala"s"
Некоторый текст, который мне нужно отправить с ожиданием, уже экранирован, потому что пробелы нужно отправлять как '\ s' вместо ''. Например, вы бы отправили
Hello World!
as
Hello\sWorld!
Важно, чтобы не было двойных выходов.