IFS дает неверный вывод - PullRequest
0 голосов
/ 06 июня 2018

У меня есть файл номера порта map.ini:

50051=1
50052=1
50053=1
50054=1
50055=1
50056=1

и скрипт sample.sh, содержимое которого:

#!/bin/bash
file=map.ini

while IFS='=' read -r port varPortStatus
do
        if [[ $varPortStatus -eq "1" ]]; then
                printf "Available port is %s" $port
                printf "Status is %d." $varPortStatus.
                return 0
        fi
done < "$file"
echo "No port is available"

Ожидаемый вывод, который мне нужен:

Available port is 50051
Status is 1

Я могу сделать это с помощью команд sed или cut.Но мне нужно разобраться с IFS здесь.Я получаю вывод:

")syntax error: invalid arithmetic operator (error token is "
")syntax error: invalid arithmetic operator (error token is "
")syntax error: invalid arithmetic operator (error token is "
")syntax error: invalid arithmetic operator (error token is "
")syntax error: invalid arithmetic operator (error token is "
")syntax error: invalid arithmetic operator (error token is "
No port is available

Скажите, пожалуйста, где я делаю не так?

1 Ответ

0 голосов
/ 06 июня 2018

из выходных данных может показаться, что может быть строка dos, заканчивающаяся \ r в map.ini или sample.sh, попробуйте dos2unix map.ini или cat -ve map.ini для проверки.

, есливходной файл не может быть изменен \r символ может быть удален в bash

while IFS='=' read -r port varPortStatus
do
    varPortStatus=${varPortStatus%$'\r'}
    if [[ $varPortStatus -eq "1" ]]; then
            printf "Available port is %s\n" $port
            printf "Status is %d.\n" $varPortStatus
    fi
done < "$file"

Примечание также исправляет \n добавлено в формат, . удалено после $varPortStatus и return действительно только вфункция или исходный скрипт.

...