оператор if, использующий sed для установки переменной, не работает - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь получить оператор if для чтения верхней строки текстового файла (tmp.txt), который имеет 0 в последней строке.команды «then» в основном идут в каталог и запускают серию команд для анализа последовательности ДНК, прежде чем вернуться обратно, удалив верхнюю строку tmp.txt и перейдя к следующему каталогу, указанному в tmp.txt.как только он доберется до конца всех перечисленных каталогов, последней строкой будет просто «0» или, возможно, «конец файла».Проблема в том, что это просто не работает, и я не могу понять, почему.Я поменял местами команды «then» и «else», чтобы облегчить тестирование.

#!bin/bash/sh
value=`(sed -n 1p tmp.txt)` 
if ($value -eq 0) 
then
echo "I wish i could eat cheese again" 
else
echo "theres still more barcodes left" 
fi

1 Ответ

0 голосов
/ 24 сентября 2018

Подобные скобки в bash создают подоболочки для запуска вложенных команд. Они вообще не нужны для команды sed, и они не являются тем, что вы ищете для проверки значений вif команда.Вместо использования обратных кавычек предпочтительным способом выполнения команды и сохранения ее значения в настоящее время является $(...) синтаксис.

Для арифметических тестов вы можете использовать двойные парены ((...)) или [синоним test или bash имеет расширенную версию [[...]].Особенно для [ пробел после скобки необходим, поскольку в этом случае вы пытаетесь выполнить команду [.

Собрав все это вместе, мы можем обновить ваш фрагмент следующим образом:

#!/bin/bash
value=$(sed -n 1p tmp.txt)
if [[ $value -eq 0 ]] 
then
    echo "I wish i could eat cheese again" 
else
    echo "theres still more barcodes left" 
fi

(Кроме того, я исправил строку shebang так, чтобы она указала на /bin/bash, вместо исполняемого файла, явно называемого /bin/bash/sh которого, скорее всего, не существует)

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