在运维人员编写shell脚本中,有时会需要将一些内容直接放在到一个文件,比如在一个shell脚本中配置一些内容再生成一个shell脚本,此时可以使用到cat命令和重定向符号“<<”以及EOF的使用。但是,在shell脚本中使用重定向符号生成shell脚本时,会遇到一些问题,比如,内容中含有特殊符号"#","`","$"时,(如果以“#”开头,则需要加转义符“\”)重定向会忽略这些特殊符号,而导致生成的shell脚本无法运行,此时只需要在这些特殊符号前加转义符号“\”即可,如下是一个自动安装nginx的脚本:
#!/bin/sh#the script is install nginx#echo "add user mars"#groupadd xiaoyao && useradd -g xiaoyao xiaoyao && sed -i 's/\#PermitRootLogin yes/PermitRootLogin no/g' /etc/ssh/sshd_config && service sshd restart && passwd xiaoyaoecho "configure sysctl"mv /etc/sysctl.conf /etc/sysctl.conf.bakcat >>/etc/sysctl.conf<>/etc/ld.so.conf.d/libevent.confldconfig -pv | grep libeventgroupadd nginxuseradd -r -g nginx -s /sbin/nologin -M nginxcd /data/toolstar -zxvf nginx-1.8.0.tar.gz -C /usr/local/src/cd /usr/local/src/nginx-1.8.0/ ./configure \--conf-path=/etc/nginx/nginx.conf \--error-log-path=/var/log/nginx/error.log \--http-log-path=/var/log/nginx/access.log \--pid-path=/var/run/nginx.pid \--lock-path=/var/lock/nginx.lock \--user=nginx \--group=nginx \--with-http_ssl_module \--with-http_flv_module \--with-http_stub_status_module \--with-http_gzip_static_module \--http-client-body-temp-path=/var/tmp/nginx/client/ \--http-proxy-temp-path=/var/tmp/nginx/proxy/ \--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \--with-pcre=/usr/local/src/pcre-8.37ln -s /var/log/nginx/error.log /etc/nginx/error.logln -s /var/log/nginx/access.log /etc/nginx/access.logln -s /var/run/nginx.pid /etc/nginx/nginx.pidln -s /var/lock/nginx.lock /etc/nginx/nginx.lockmake && make installcd /usr/local/nginxmkdir -pv /var/tmp/nginx/clientmkdir -pv /var/tmp/nginx/proxymkdir -pv /var/tmp/nginx/fcgiecho "PATH=$PATH:/usr/local/nginx/sbin" >>/etc/profilesource /etc/profilecat >>/etc/init.d/nginx<
通过以上操作,我们就很方便的在shell脚本中实现生成文件或者脚本了。
还有请注意,如“\”转义符不能同时有两个以上,否则也会无法写入。