记录技术收获,分享个人心得

人生如负重远行,不可急于求成

linux输入重定向存在多行包含表达式的处理

最近在写一个linux服务器的安全加固脚本,其中参考了教程:https://help.aliyun.com/knowledge_detail/49809.html 中的部分内容,在文档最下部有

记录所有用户的登录和操作日志

通过脚本代码实现记录所有用户的登录操作日志,防止出现安全事件后无据可查。

操作步骤

  1. 运行 [root@xxx /]# vim /etc/profile打开配置文件。
  2. 在配置文件中输入以下内容:
  3.  history
     USER=`whoami`
     USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
     if [ "$USER_IP" = "" ]; then
     USER_IP=`hostname`
     fi
     if [ ! -d /var/log/history ]; then
     mkdir /var/log/history
     chmod 777 /var/log/history
     fi
     if [ ! -d /var/log/history/${LOGNAME} ]; then
     mkdir /var/log/history/${LOGNAME}
     chmod 300 /var/log/history/${LOGNAME}
     fi
     export HISTSIZE=4096
     DT=`date +"%Y%m%d_%H:%M:%S"`
     export HISTFILE="/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT"
     chmod 600 /var/log/history/${LOGNAME}/*history* 2>/dev/null

我想在自己的shell脚本中将这段内容直接导出到/etc/profile中。但是其中部分语句包含了表达式,且是多行的,这时候我使用输入重定向来实现。计划先将这段脚本输入到一个文本中,再将文本内容追加到/etc/profile最底部。

在实际操作中,最初我是如下写的:

《linux输入重定向存在多行包含表达式的处理》

这样在执行后发现虽然多行是成功插入了,但是里面的表达式直接就被执行出来了,还有变量也直接获取值了

《linux输入重定向存在多行包含表达式的处理》

这与我的初衷不符合,于是找了很多方法,最后发现很简单,其实用转义字符即可实现,在运算符前面加转义字符即可,这里反引号“显然就不如$(),$()只需要加一个转义符\$(),“却需要两个\` \`

不得不称赞一波subline text,其实它早就将需要转义的表达式符号标注出来了,转义后的效果也一目了然。

《linux输入重定向存在多行包含表达式的处理》 

以这个再执行一次,查看文件中内容已经正确了。

《linux输入重定向存在多行包含表达式的处理》


点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注

hi~

你好,欢迎来到我的博客,欢迎留言。

快速搜索:







Generic selectors

Exact matches only


Search in title


Search in content



Search in posts


Search in pages

欢迎关注我:

微博
steam
网易云音乐
QQ
500px

常用命令:

http://www.gaoshan.me/cmd