在bash中检测文件中的现有字符串

在bash中检测文件中的现有字符串,bash,concatenation,Bash,Concatenation,我正在为一个项目创建一个bash安装程序脚本。在其中,我需要修改文件描述符计数。我通过修改文件/etc/security/limits.conf、/etc/pam.d/common session和/etc/pam.d/common session noninteractive来实现这一点 下面是bash安装程序脚本中的代码 echo " * soft nofile 64000 * hard nofile 64000 root soft nofile 64000 root hard

我正在为一个项目创建一个
bash
安装程序脚本。在其中,我需要修改文件描述符计数。我通过修改文件
/etc/security/limits.conf
/etc/pam.d/common session
/etc/pam.d/common session noninteractive
来实现这一点

下面是
bash安装程序脚本中的代码

echo "
*    soft nofile 64000
*    hard nofile 64000
root soft nofile 64000
root hard nofile 64000
" >> /etc/security/limits.conf
echo "session required pam_limits.so" >> /etc/pam.d/common-session
echo "session required pam_limits.so" >> /etc/pam.d/common-session-noninteractive
问题是,如果由于某种原因项目安装失败并通过了此检查点,则重新运行该检查点将随后再次将此字符串添加到文件中。

是否有一种方法可以检测每个文件中是否已经存在字符串,如果存在,则不执行添加


我是一名中级bash用户,但这超出了我的技能范围,我不相信我自己能做到这一点。

您可以使用此实用程序功能搜索给定文件,并仅在文件中找不到字符串时追加:

searchAppend() { grep -qF "$2" "$1" || echo "${3:-$2}" >> "$1"; }
并将其用作:

str="
*    soft nofile 64000
*    hard nofile 64000
root soft nofile 64000
root hard nofile 64000
"
searchAppend /etc/security/limits.conf 'root soft nofile 64000' "$str"
searchAppend /etc/pam.d/common-session 'session required pam_limits.so'
searchAppend /etc/pam.d/common-session-noninteractive 'session required pam_limits.so'
根据
曼巴什

${参数:-word}
使用默认值。如果参数为unset或null,则替换word的展开形式。否则,将替换参数的值


您编写的limits.conf小得多,但现在我只插入一行,而不是全部行sc.f。有关内置bash字符串处理工具的详细概述。;)谢谢@PaulHodges,在我的答案中添加了此链接。nvm我看到函数已更新,很抱歉我没有更新代码