我是 bash 脚本的初学者。我想创建一个 bash 脚本,以自动方式在我的 linux 机器上安装和配置东西。
假设我想编辑
/etc/yum.repos.d/epel.repo
通过 bash 脚本
我想做的是如下
- 打开文件 /etc/yum.repos.d/epel.repo
- 找到 [epel] 部分
- 在 epel 部分的行 enabled=1 之后添加一行 priority=10
对于第一部分,我添加了
yum install nano
nano /etc/yum.repos.d/epel.repo
我的问题是如何使用 nano 使用 bash 脚本来完成第二部分和第三部分(如果可能,如果不可能,请用 sed 告诉我)
同样在某些时候我将不得不修改文件中的变量例如
- 启用 = 0 启用 = 1
- 测试 =“1”到测试 =“0”
- 在一行中添加文本。功能=到功能=“文本1”,“文本2”
- 向文件中添加一些文本并保存(使用 nano)
我知道它要求很高,但我需要为一个在服务器管理方面一窍不通的朋友创建这个。不幸的是,我没有时间从头开始学习 bash 脚本,因为我的考试临近了。我将使用您的示例来编写脚本。
伙计们感谢所有回复我已经成功完成了大部分 bash 脚本
但是我还有另一个问题 假设我想使用 sed 修改 nginx.conf 我们将处理 worker_processes
现在我想使用 sed 执行以下操作 1.在该 conf中 找到第一次出现worker_processes
并将文本替换为worker_processes 4;
此处特别说明:这只是一个例子。可能会发生 conf 包含 worker_processes 1;. 这是困难的部分。我想要一个 sed 命令来找到单词worker_processes的第一个 wHOLE 匹配案例,删除找到该单词的文本行并粘贴 到那里,然后保存文件。这是我在编辑文件时最可靠的方法(没有破坏任何 conf 的风险worker_processes 4;
最后一个建议我使用 sed -i 's/enabled=0/enabled=1/g' /etc/yum.repos.d/remi.repo 在 remi 的 [remi] 部分下将 enabled =0 更改为 enabled=1 .repo 。但是我有一种感觉,它可能会修改该文件中的所有 enabled=0 ,这将破坏服务器。任何人都可以提出更好的代码。
另一个我不确定的东西:P 我想编辑一个文件,它有这个作为 Text Testing = "0"(是的它有引号,我需要保留它)它应该从 Testing = "0" 修改为 Testing = " 1"(带引号)
我还需要在文件末尾添加一些带引号的文本,例如“Thanks Quanta”(带引号)对于 php,你放一个带回声引号的 \,不知道 bash 是怎么做的
另一件事
我需要修改 conf 中的一行,但我不记得要替换的整个文本是什么
喜欢它的 listen = something; ,我想修改为listen = /tmp/php5-fpm.sock;
对 up quanta 赞不绝口
感谢你们的支持
如果需要,请指定就地编辑选项 ( )(首先使用扩展名
-i
进行备份):.bak
在这里为你:
正如 ptman 所说,Augeas可以让您免于使用
sed
/awk
:会将
epel
存储库的优先级设置为 10。如果priority
键已经存在,它将设置它的值,否则它将priority
在该部分的最后一个条目之后添加一个条目。您可能想要修改的其他值也是如此。
如果要修改多个值,甚至可以
augtool
用作解释器:如果你想将它保留在你的 bash 脚本中,你可以将命令通过管道传输到
augtool
:请参阅
man augtool
更多选项。使用 Augeas vs
sed
/有几个优点awk
:yum.repo
语法)的解析器。如果您的正则表达式错误,您将不会冒破坏文件语法的风险;yum.repo
部分,因此您知道您正在编辑正确的部分;您可能还想查看Augeas,用于以编程方式修改配置文件的工具。它与Puppet (一种配置管理系统)结合使用非常强大,但也可以单独使用。