在我的Config文件中增加我的服务器端口

时间:2015-08-07 22:58:57

标签: linux bash scripting

我想制作一个Bash脚本,如果我运行我的脚本,每次都会增加我的Config文件中的服务器端口选项+1。我的配置文件看起来像这样。

server-port=1000
server-online=true
level-name=Hapos
type=XZC

作为一个例子,它需要如何工作

# ./script.sh
we will now change the port
# cat config.txt
1001
-----------------
# ./script.sh
we will now change the port
# cat config.txt
1002
-----------------
# ./script.sh
we will now change the port
# cat config.txt
1003

1 个答案:

答案 0 :(得分:2)

使用awk

递增

让我们从这个配置文件开始:

$ cat config.txt 
server-port=1000
server-online=true
level-name=Hapos
type=XZC

我们可以使用awk增加端口:

$ awk -F= -v OFS== '$1 == "server-port"{$2++} 1' config.txt 
server-port=1001
server-online=true
level-name=Hapos
type=XZC

代码的工作原理如下:

  • -F=将输入的字段分隔符设置为=

  • -v OFS==将输出中的字段分隔符设置为=

  • $1 == "server-port"{$2++}测试第一个字段是否为server-port。如果是,则递增第二个字段。

  • 1是awk用于打印线的神秘简写。

使用现代(> = 4.1.0)GNU awk

进行就地更改
$ awk -i inplace -F= -v OFS== '$1 == "server-port"{$2++} 1' config.txt 
$ cat config.txt 
server-port=1001
server-online=true
level-name=Hapos
type=XZC
$ awk -i inplace -F= -v OFS== '$1 == "server-port"{$2++} 1' config.txt 
$ cat config.txt 
server-port=1002
server-online=true
level-name=Hapos
type=XZC

与其他awks就地更改

$ awk -F= -v OFS== '$1 == "server-port"{$2++} 1' config.txt >tmp$$ && mv tmp$$ config.txt
$ cat config.txt 
server-port=1003
server-online=true
level-name=Hapos
type=XZC

替代输入文件

假设我们的文件有一个破折号,上面的符号有一个等号:

$ cat config.txt
server-port-1000
server-online=true
level-name-Hapos
type=XZC

使用GNU awk,我们可以使用以下命令增加端口号:

awk -i inplace -F- -v OFS=- '/^server-port-/{$NF++} 1' config.txt 

这会生成新文件:

$ cat config.txt
server-port-1001
server-online=true
level-name-Hapos
type=XZC

使用awk而不是最新的GNU awk:

$ awk -F- -v OFS=- '/^server-port-/{$NF++} 1' config.txt >tmp$$ && mv tmp$$ config.txt
$ cat config.txt
server-port-1002
server-online=true
level-name-Hapos
type=XZC

关于非GNU解决方案的安全性和临时文件的说明

使用非GNU awk进行就地更新需要创建一个临时文件。将临时文件放在/tmp中是很常见的,但这存在安全风险:其他用户可以写入此目录,从而使竞争条件成为可能。使用诸如mktemp之类的实用程序可以最大限度地减少这种危险,这种实用程序会产生难以猜测的文件名。更好的解决方案是将tmp文件放在只有用户具有写访问权限的目录中。这可以是主目录。

在上面,tmp文件与config.txt文件放在同一目录中。这个目录很可能是安全的,因为它是config.txt所在的位置。如果不是,则应采取措施。

有关此问题的详细信息,请参阅Greg's FAQ 062