首页 > 解决方案 > 在 bash 脚本中更改文件的最佳方法

问题描述

我有一个包含变量和值的文件

目标:打开文件并用输入id替换所有id

[FILE]
var1 = 2
id = 3
var3 = 5
id = 12
var4 = 5

而且我无法将 id 值替换为新值。

这是我的代码,任何帮助或其他东西都会有所帮助。谢谢

#!/bin/bash
filename=$1
uuid=$2

input="./$filename"

# awk -v find="id " -v field="5" -v newval="abcd" 'BEGIN {FS=OFS="="} {if ($1 == find) $field=newval; print $1}' $input

while IFS= read -r line
do
    awk -v find="id " -v field="5" -v newval="abcd" 'BEGIN {FS=OFS="="} {if ($1 == find) $field=newval;}' $input
    echo $line

done < "$input"

预期产出

execute
./myscript.sh file.cnf 77 

expected output:
    [FILE]
var1 = 2
id = 77
var3 = 5
id = 77
var4 = 5

标签: bash

解决方案


没有把握。Bash 脚本非常敏感。我猜你的触摸是导致这个问题的原因有几个。

首先,每当您触摸文件名时,它不应包含操作数或前缀 unliss 它是 shell 脚本的一部分,而 $filename 是 shell 或内联块引号。Touch 通常用于二进制文件或高优先级数据对象。

其次,我会尝试更改输入并调整为 $done ,而不是使用 esac 回显 $line 回显整个脚本,或者使用 end if 而不是 do while 循环。


推荐阅读