shell通常用来自动化处理软件的安装和配置,shell操做软件的配置,通常就用sed命令来处理。java
sed编译器能够逐行处理文件,并将结果发送到屏幕。咱们能够用来修改文件。这就让咱们很方便的在shell脚本中修改文件,特别是一些配置命令
sed在处理文本文件的时候,会在内存上建立一个模式空间,而后把这个文件的每一行调入空间使用响应的命令处理,处理完在输出,接着处理下一行。通常的修改,都在模式空间中执行,若是咱们不使用 -i,则配置文件不会变坏node
a、命令 mysql
sed [选项][定址命令][inputfile]
b、 其中option linux
-e:进行多项编辑,即对输入行应用多条sed命令时使用 -n:取消默认的输出,和`/p`用来输出修改的内容 -f:指定sed脚本的文件名,这里将sed写在一个文件中,而后操做 -i:直接修改文件的内容,不会输出到屏幕
c、定址命令正则表达式
a\ :新增,在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行 c\ :取代。取代定位行之间的内容 i\ :插入,在当前行以前插入文本。多行时除最后一行外,每行末尾需用"\"续行 d :删除行 s :行内取代,能够直接进行替换的工做。一般这个 s 的动做能够搭配正则表达式。例如 1,20s/old/new/g,将1-20行的old替换为new ps: 1.定址的做用,就是选取文件中须要修改的位置,这个位置能够是行标,也能够是正则匹配的行内字符串 2.上面添加"\",会在匹配的每一行都进行操做。 3.a和i的区别是,a将字符串放在下行,i将字符串放在上一行
c、地址选择redis
行号、正则 n n为一行号,好比1 n,m 表示行号范围从n到m,如2,5表示从第2行到第5行 /pattern/ 查询包含模式的行,如/disk/或/[a-z]/ /pattern/pattern/ 查询包含两个模式的行,如/disk/disks/ /pattern/,x 在给定行号上查询包含模式的行,如/disk/,3 n,/pattern/ 经过行号和模式查询匹配行,如 3,/disk/ n,m! 查询不包含指定行号n和m的行 特殊正则 ^ :锚定行的开始 如:/^sed/匹配全部以sed开头的行。 $ :锚定行的结束 如:/sed$/匹配全部以sed结尾的行。 . :匹配一个非换行符的字符 如:/s.d/匹配s后接一个任意字符,而后是d。 * :匹配零或多个字符 如:/*sed/匹配全部模板是一个或多个空格后紧跟sed的行。 [] :匹配一个指定范围内的字符,如/[Ss]ed/匹配sed和Sed。 [^] :匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。 /(../) :保存匹配的字符,如s//(love/)able//1rs,loveable被替换成lovers。 & :保存搜索字符用来替换其余字符,如s/love/**&**/,love这成**love**。 /< :锚定单词的开始,如:// /> :锚定单词的结束,如/love/>/匹配包含以love结尾的单词的行。 x/{m/} :重复字符x,m次,如:/0/{5/}/匹配包含5个o的行。 x/{m,/} :重复字符x,至少m次,如:/o/{5,/}/匹配至少有5个o的行。 x/{m,n/} :重复字符x,至少m次,很少于n次,如:/o/{5,10/}/匹配5--10个o的行
#!/bin/bash #1.remove openjdk if exists echo "---->begin to intall jdk " echo "---->first:remove openjdk " for i in $(rpm -qa | grep jdk | grep -v grep) do echo "Deleting rpm -> "$i rpm -e --nodeps $i done if [[ ! -z `rpm -qa | grep jdk | grep -v grep ` ]] then echo "-->Failed to remove the defult jdk" exit else echo "-->tar jdk to /usr/local/18091" tar -zxvf ./jdk-8u91-linux-x64.gz echo "-->mv jdk to /usr/local" TARGET=`ls | grep jdk1` mv ${TARGET} /usr/local/jdk18091 if [[ -z ` ls /usr/local/jdk18091 ` ]] then echo "-->jdk is not mv to /usr/local " exit else echo "-->config the path" cp /etc/profile /etc/profile.jdk.bak echo 'JAVA_HOME=/usr/local/jdk18091' >> /etc/profile echo 'CLASSPATH=.:$JAVA_HOME/lib/tools.jar' >>/etc/profile echo 'PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile echo 'export JAVA_HOME CLASSPATH PATH' >>/etc/profile source /etc/profile fi fi echo "-->test jdk has installed" java -version if [[ $? -ne 0 ]] then echo "-->java install failed" else echo "-->java install success" echo "-->java -version:\n" java -version echo "-->javac -version\n" javac -version fi
#! /bin/bash echo "begin to install redis ..." echo "step 0" echo "---> move redis to /usr/local" FILENAME=`ls | grep *.gz ` if [[ -f ${FILENAME} ]] then cp ${FILENAME} /usr/local/ else echo "there is no redis zip ,please updown" exit fi if [[ $? -eq 0 ]] then echo "step1:" echo "---> unzip redis " else echo "move redis fail" exit fi cd /usr/local tar -zxvf ${FILENAME} if [[ $? -eq 0 ]] then echo "step 2: " echo "--->rm redis zip " else echo "unzip redis fail" exit fi sleep 5 &&rm -f ${FILENAME} && TARGETNAME=`ls | grep redis`&& test -d ${TARGETNAME} && mv ${TARGETNAME} redis if [[ $? -eq 0 ]] then echo "step 3:" echo "--->install and config redis " else echo "rm redis fail" exit fi sleep 5 &&cd redis && sed -i 's/^daemonize no/daemonize yes/g' /usr/local/redis/redis.conf && sed -i 's/^port 6379/port 6380/g' /usr/local/redis/redis.conf && sed -i 's/^appendonly no/appendonly yes/g' /usr/local/redis/redis.conf && make if [[ $? -eq 0 ]] then echo "install success" echo "step 4:" echo "--->start redis" else echo "config fail" exit fi sleep 5 &&./src/redis-server redis.conf &&RESULT=`netstat -antp | grep redis | wc -l `&&test ${RESULT} -eq 1&&echo "redis start success"
1.使用特定用户打开crontab编译器 #crontab -e -u mysql 2.设置用户的任务 */1 * * * * /bin/bash /home/mysql/test.sh 分钟 小时 天 月 星期 命令 ps:这里的命令是经过/bin/sh 来执行/home/mysql/test.sh的脚本 3.启动 service crond start 4.查看 crontab -l