使用以下代码我不断收到以下错误:
#!/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
答案 0 :(得分:2)
将我的评论转化为答案。
具有显式文件名的 wc
在输出中包含该文件名,因此:
wc -l ${sourceFile}
打印:
12 file1.log
然后是$numLines
的价值。
线索在错误消息中:它包含扩展的表达式:
> ./2test.sh: line 5: ((: counter >= 12 file1.log || ! -f file1.log : syntax error[…]
^^^^^^^^^^^^
您可以通过将文件的内容重定向到wc
来避免获取该文件名:
numLines="$(wc -l < "${sourceFile}")"
(添加引号是因为它是一个好习惯。(不,在这种情况下,他们并非严格必要。)(是的, qoutes是正确的,即使SO的语法荧光笔似乎也不太了解它们。)
脚本中还有其他问题(在评论中提到),但一次只有一个问题。不过,我会借此机会推荐ShellCheck。