gpt4 book ai didi

linux - Bash 脚本 - 无效的算术运算符

转载 作者:太空宇宙 更新时间:2023-11-04 09:20:38 25 4
gpt4 key购买 nike

使用下面的代码我不断收到以下错误:

#!/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 具有明确的文件名,在输出中包含该文件名,因此:

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}")"

(添加引号是因为这是一个好习惯。(不,在这种情况下它们不是严格必需的。)(是的,引号是正确的,即使如果 SO 的语法高亮器似乎不太理解它们。)

脚本中还有其他问题(在评论中提到),但一次一个问题。我会趁机推荐ShellCheck , 不过。

关于linux - Bash 脚本 - 无效的算术运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42327799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com