с кода ниже я получаю следующие ошибки:Bash Script - Invalid арифметический оператор
#!/bin/bash
sourceFile="file1.log"
targetFile="/etc/network/interfaces"
numLines=$(wc -l ${sourceFile})
if ((counter >= "$numLines" || ! -f "${sourceFile}")); then
echo "invaild file"
exit 0
fi
while [ "$counter" -le "$numLines" ]; do
sed -i "${2} s/.*/wireless-key s: $(sed -n "${counter}"p <<< "${sourceFile}")/" "${targetFile}"
counter=$((counter + 1))
done
с указанным кодом я получаю следующие ошибки:
> ./2test.sh: line 5: ((: counter >= 12 file1.log || ! -f file1.log : syntax error: invalid arithmetic operator (error token is ".log || !
> -f file1.log ") ./2test.sh: line 9: [: : integer expression expected
'wc -l $ {sourceFile}' prints '12 file1.log', так что это значение' $ numLines'. 'numLines =" $ (wc -l <"$ {sourceFile}") "' должен дать вам только номер (кавычки бесплатны на этой неделе, наслаждайтесь). – Biffen
Кажется, что 'echo 'недействительный файл'> & 2; выход 1' будет более уместным. Ошибки должны быть напечатаны на stderr, и сценарий должен возвращать ненулевое значение, если оно не выполняется. –
Также '! -f "$ {sourceFile}" 'недопустимый код в' (()) ', возможно, попробуйте в квадратных скобках i.e' ((counter> = "$ numLines")) || [[! -f "$ {sourceFile}"]] ' – 123