Я пытаюсь запустить bash-скрипт с условием if/else, но по какой-то причине мой оператор else не выполняется.
В остальном скрипт работает отлично. Я мог бы попытаться сделать это по-другому, но я пытаюсь понять, почему это else не работает.
n=1
for ((i=1;i<=GEN;i++))
do
if [ `cat sires${i} | wc -l` -ge 0 ] || [ `cat dams${i} | wc -l` -ge 0 ]; then
cat sires${i} dams${i} > parent${i}
awk 'NR==FNR {a[$1]=$0;next} {if ($1 in a) print a[$1]; else print $0}' ped parent${i} >> ped_plus
cat ped_plus | awk '$2!=0 {print $2,0,0}' | awk '!a[$1]++' > tmp_sire
cat ped_plus | awk '$3!=0 {print $3,0,0}' | awk '!a[$1]++' > tmp_dam
((n2=n+i))
awk 'NR==FNR {a[$1];next} !($1 in a) {print $0}' ped_plus tmp_sire > sires${n2}
awk 'NR==FNR {a[$1];next} !($1 in a) {print $0}' ped_plus tmp_dam > dams${n2}
else
echo "Your file looks good."
i=99
fi
done
Он должен напечатать сообщение Your file looks good., но этого не происходит.
Есть идеи?
когда wc -l вернет значение меньше нуля?
вы можете использовать break вместо i=99
Ищу родителей (в пед) по списку лиц (родителей). Когда все они уже есть в файле ped_plus, sires${n2} и dams${n2} должны быть пустыми и тогда wc -l будет равно нулю.
Я буду использовать break вместо i=99. Спасибо.
@GreenCloakGuy - Да, я считаю, что он не принимает заявление else, но я не знаю, почему.
ge = больше или равно, gt = больше. Ваш тест всегда верен, потому что вы тестируете >=0...
Ой. Это правда. Прямо на моем лице, и я не мог видеть это. Спасибо вам, ребята!





Используйте -gt, а не -ge, если вы хотите проверить больше 0.
Или посмотрите на man test, вы найдете вариант -s:
if [ -s sires${i} ] || [ -s dams${i} ]; then
Вы подтвердили, что это не просто каждый раз брать ветку
ifвместоelse?