Код отступа внутри блока или циклов if
может помочь отследить подобные проблемы.Каждому if
требуется fi
для завершения блока.Отступы вашего кода:
#!/bin/bash
cat test.txt
echo "Write del if you want delete or write save if you want save"
read s1
echo "Which symbol"
read s2
if [ $s1 = "del" ]
then
sed -i "/^$s2/d"
cat test.txt
if [ $s1 = "save" ]
then
echo "saved"
else
echo "Error"
fi cat test.txt
Вы видите, что начальный блок не закрыт своим собственным fi
.Также у вас есть чудак cat
, который висит на одной линии с вашим fi
.Это не должно быть там.Вместо этого что-то вроде:
#!/bin/bash
cat test.txt
echo "Write del if you want delete or write save if you want save"
read s1
echo "Which symbol"
read s2
if [ $s1 = "del" ]
then
sed -i "/^$s2/d"
cat test.txt
if [ $s1 = "save" ]
then
echo "saved"
else
echo "Error"
fi
cat test.txt
fi
Нет гарантии, что вы будете делать то, что хотите, но это синтаксически правильно.
Я бы ВЫСОКО предложить сбросить это в shellcheck.net, чтобы он мог указать вам правильное направление.В частности, отсутствие в ваших тестах двойных кавычек, которые могли бы вызвать странное поведение.
На основании комментария @ Аарона вы, вероятно, ищете что-то вроде следующего:
#!/bin/bash
cat test.txt
echo "Write del if you want delete or write save if you want save"
read s1
echo "Which symbol"
read s2
if [ "$s1" = "del" ]; then
sed -i "/^$s2/d" test.txt
elif [ "$s1" = "save" ]; then
echo "saved"
else
echo "Error"
fi
cat test.txt