linux相关

shell程序必须以#!/bin/sh开始(必须放在文件的第一行):
符号#!用来告诉系统它后面的参数是用来执行该文件的程序,在这个例子中我们使用/bin/sh来执行程序。当编辑好脚本时,如果要执行该脚本,还必须使其可执行,要使脚本可执行:chmod +x filename,然后可以通过输入:./filename来执行脚本

 

注释:
#开头的行就是注释,会被解释器忽略
Shell中没有多行注释,只能每一行加一个#号
1、定义字符串
字符串定义可以用单引号,也可以用双引号,也可以不用引号
a='besttest' b="besttest" c=besttest
2、拼接字符串
把一个字符串跟到另一个字符串后面即可,例如:
name="besttest"
say="hello, "$name""
say1="hello, ${name}"
echo $say $say1
3、获取字符串长度
#来获取字符串的长度
str='besttest'
echo ${#str}
4、获取字符串的某个元素
s='besttest is a good school'
echo ${s:1:4}

定义数组
在Shell中,用括号来表示数组,数组元素用空格符号分隔开,不像其他语言中用逗号分隔,shell中只支持一维数组,数组的下标可以不连续,可以放任何类型的元素
例如:array=(value1 value2 … )
数组的取值方式:${array_name[index]}
使用@或*可以获取数组中的所有元素,例如echo ${list[*]}echo ${list[@]}
获取数组长度的方法与获取字符串长度的方法相同,使用#,例如:echo ${#list[*]}

条件判断:
-eq(equal) : 测试两个整数是否相等;比如 $A -eq $B
-ne(inequality) : 测试两个整数是否不等;不等,为真;相等,为假;
-gt(greter than) : 测试一个数是否大于另一个数;大于,为真;否则,为假;
-lt(less than) : 测试一个数是否小于另一个数;小于,为真;否则,为假;
-ge(greter equal): 大于或等于
-le(less equal)小于或等于

 

备份日志的脚本:

src_path = '/opt/lampp/logs/access_log'  # 源日志文件路径

tar_path = '/tmp/logs'  # 目标日志文件路径

time = `date + %Y%m%d%H%M%S`  # 获取时间命令(命令用``这个符号,不能用'',用''代表的是一个字符串)

cp -rf ${src_path} ${tar_path}access_log_${time}  # 将源文件拷贝到目标路径下

> ${src_path}  # 将之前的文件重定向为空就可以了

将上面五行命令复制到bak_log.sh里,然后

crontab -e

59 23 * * * sh /tmp/bak_log.sh(命令写实际命令)

定时运行

 

写个shell脚本对文件进行批量改名,把当前文件夹下文件名含有aaa的都改成大写的AAA,比如21-aaa.doc就要改成21-AAA.doc

find . -name "*aaa*" -exec rename aaa AAA {} \;      find . -name "*aaa*" | xargs rename aaa AAA;

 

然后还有一个任务,将每个文件的执行权限去掉,这样写:

for filename in *
do
chmod ugo-x $filename
done

 

写shell脚本,重启tomcat并打印出日志

pid = `ps -ef | grep mysql | grep -v grep | awk '{print $2}'` # 获取到tomcat的pid

kill -9 $pid # 杀掉进程

echo 'tomcat stop' # 打印出tomcat stop

sh /usr/local/tomcat_dang/bin/startup.sh

tail -f /usr/local/tomcat_dang/logs/catalina.out # 打印出日志

把上面5行命令写到一个文件里,如r_tomcat.sh,加权限chmod +x r_tomcat.sh,启动r_tomcat.sh

 

写shell脚本,停止tomcat,脚本里加了判断

pid=`ps -ef | grep mysql | grep -v grep | awk '{print $2}'`  # =两边不能有空格

if [ $pid ]   #[]里边有空格

then

kill -9 $pid

echo 'tomcat stop....'  # 输出指定的字符串

else

echo 'tomcat is not running...' 

fi

 

service命令

service在linux中主要用于操作系统程序,例如service iptables stop,service network restart,service httpd start,service可执行的文件保存在/etc/init.d,如下图:

 

wc(Word Count):统计指定文件中的行数、字节数、字数,并将统计结果显示输出

cat 1209.txt|sort|uniq 先排序再去重(必须是相邻的,加上sort之后就是相邻的)

cat 1209.txt|sort|uniq -c 每个字节出现的次数

cat 1209.txt|sort|uniq|wc 统计字数,第一列是有11行,第二列是有11个字(一个字被定义为由空白跳格换行字符分隔的字符串),第三列是有22个字节数

cat 1209.txt|sort|uniq|wc -l 只显示行数,wc -L是打印最长行的长度

 

有个文件source.txt,其中每行有一个字符串,请写出统计字符串"hello"出现次数的shell命令?

grep -o 'hello' 3.log | wc -l     -o指示grep显示所有匹配的地方,并且每一个匹配单独一行输出

 

统计当前路径下,所有以.log为后缀的文件个数?
find . -name "*.log"|wc -l


rename命令用字符串替换的方式批量改变文件名,mv只是针对单个文件
rename 原字符串 目标字符串 文件(指定要改变文件名的文件列表)
linux命令之rename命令实例,将main1.c重命名为main.c
  rename main1.c main.c main1.c
rename支持通配符
  ? 可替代单个字符
  * 可替代多个字符
如果使用rename foo foo0 foo?,会把foo1到foo9的文件重命名为foo01到foo09,重命名的文件只是有4个字符长度名称的文件,文件名中的foo被替换为foo0
如果使用rename foo foo0 foo*,foo001到foo278的所有文件都被重命名为foo0001到foo0278,所有以foo开头的文件都被重命名

rename支持正则表达式
  字母的替换
  rename "s/AA/aa/" *      # 把文件名中的AA替换成aa
  修改文件的后缀
  rename "s//.html//.php/" *      # 把.html 后缀的改成 .php后缀
  批量添加文件后缀
  rename "s/$//.txt/" *       # 把所有的文件名都以txt结尾
  批量删除文件名
  rename "s//.txt//" *        # 把所有以.txt结尾的文件名的.txt删掉

 

java -jar jar包---直接运行

java bsh.Console---界面UI方式

java bsh.Interpreter---命令行方式

java bsh.Interpreter filename[args]---运行脚本文件

posted @ 2018-12-01 22:49  laosun0204  阅读(244)  评论(0编辑  收藏  举报