Как я могу использовать строковую переменную в массиве, не разбивая ее? - PullRequest
0 голосов
/ 18 июня 2019

Я создаю инструмент для поиска в системе безопасности.Мой скрипт обнаружения принтера получает строки в другом файле .txt, например «Версия прошивки принтера», и использует инструмент grep, чтобы проверить, существует ли он на целевом хост-сайте.Но мой скрипт разделяет эти строки и использует их как различные переменные, такие как Printer, Firmware, Version .Как я могу получить эти строки, не разбивая их?

   found=(`cat temp.txt`) # <- This line for target
   httarr=(`cat httpport.txt`)
   printer_array=(`cd ..; cat keywords/printerwords.txt`)
   for lo in ${httarr[*]}
   do
     ifacelook=`curl -sSL http://$found:$lo`
     for pr in ${printer_array[*]}
     do
        echo $pr # <-This line is to see incoming variables
        echo $found | grep -o '${pr}' &>/dev/null
        if [ $? -eq 0 ];then
          echo -en "$cyan>$green|${red}printer$green|$cyan>$default This device is a printer check: http://$found:$lo \n"
        fi
     done
   done

Incoming variables:
Printer
Firmware
Version
.
.
.
Variables I want:
Printer Firmware Version
.
.
.

1 Ответ

2 голосов
/ 18 июня 2019

Ваше разделение слов происходит с:

found=(`cat temp.txt`) # <- This line for target
httarr=(`cat httpport.txt`)

(оба включают UUOc (ненужное использование cat))

Вместо использования:

mapfile -t found < temp.txt
mapfile -t httarr < httpport.txt

mapfile (синоним readarray) будет считывать каждую строку файла из stdin в индексированные массивы.

Не рекомендуется, но вы также можете установить IFS(Внутренний разделитель полей), чтобы переходить только на новые строки с:

set -o noglob                 ## disable globbing to protect from * in line
oldifs="$IFS"                 ## save current IFS
IFS=$'\n'                     ## set IFS to newline only
found=( $(< temp.txt) )       ## fill arrays
httarr=( $(< httpport.txt) )
IFS="$oldifs"                 ## restore original IFS
set +o noglob                 ## restore globbing  (thanks to Charles)

Посмотрите вещи и дайте мне знать, если у вас есть дополнительные вопросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...