使用 awk 将文本附加到 /etc/group 中的行尾

使用 awk 将文本附加到 /etc/group 中的行尾

我正在编写一个脚本来自动执行某些任务,我需要将用户添加到 /etc/group 中的组。我正在尝试使用此命令:

sudo bash -c "awk '{if (/^moli/) {$0=$0"$uservar,"}; print' /etc/group > /etc/group"

我遇到的问题是

awk: cmd. line:1: {if (/^moli/) {-bash=-bashtestuser1,}; print
awk: cmd. line:1:                     ^ syntax error
awk: cmd. line:1: {if (/^moli/) {-bash=-bashtestuser1,}; print
awk: cmd. line:1:                                             ^ unexpected newline or end of string

如果我将其更改' '为,""我会得到:-bash: syntax error near unexpected token '('

答案1

您的小代码中存在很多问题:

  • 双引号内的单引号不会阻止变量替换。
    因此,$0扩展为/bin/bash。请参阅这里

  • 实际上,您的命令失败了,您真的很幸运!如果成功,它会清空您的/etc/group文件,您将会遇到严重问题。
    在您发出命令的那一刻command > file,它file会被打开并清空以进行写入,您command将看到一个空文件。

    最好使用> file.temp && mv file.temp fileawk -i inplace ...

  • 不要直接在代码中添加bash变量 ,而是使用选项并在内部使用。awkawk -v var=$varvarawk


那么该怎么办 ?

您不需要这种重复引用地狱,您可以简单地使用:

sudo awk -i inplace '...' file

或者

awk '...' file | sudo tee file.temp && sudo mv file.temp file

或者更适合你的情况sed

sudo sed -i '...' file

然而,您/etc/group根本不应该手动更改。

添加用户usermod(按照建议)这里):

sudo usermod -a -G groupName userName

相关内容