心得:最近两天因为一些事情没有更新,但没有过不去的事情,身为芸芸众生里的一员,我的要求其实并不高,有房有车有自己想要的生活,看似简单,实在压力太大。看看别人呢,往往能从别人的影子看到自己,遇到比你差一些的,你觉的骄傲,但是你的资本在哪里呢?遇到比你优秀的人,他们比你更聪明更努力,觉得达不到,这可能是你生活在不高不低的原因了。尽管这条路很孤单,我还是想要努力地为自己的生活精彩的努力一番。
9.如何写一些简单实用的脚本呢,练练手,写了一个方便创建文件的小脚本,每次我们都会创建一些新的文件比如shell.sh或者python.py文件,但麻烦的是每次都需要我们去定义开头,添加日期,定义模块,增加执行权限,这一大串的东西,完全可以用脚本来实现,来看看吧:
一、快速创建文件以及杀掉进程
#!/bin/bash
#A=$(echo $1 | grep "^.\+\.[a-z]\{2\}$" | sed 's/.+\.//g') #匹配出文件的结尾字符设置为两位,遇到特殊字符得加\转意,我一般用shell和python多一些
A=$(echo $1 | sed 's/.\+\.//g')
if [ -a $1 ];then
echo -e "This file "$1" have been exist \n"
else
echo -e "creat new file $1 for you \n"
touch $1
chmod 777 $1
if [ $A == "sh" ];then
echo -e "#!/bin/bash \n" >>$1
echo "#filename: $1 " >>$1
echo "#Date: $(date)" >>$1
echo "#Email: tianjian361@163.com" >>$1
echo -e "#Author: TianJian \n" >>$1
echo "#---------------------------------------------------" >>$1
elif [ $A == "py" ];then
echo -e "#coding=utf-8 \n" >>$1
echo "import os" >>$1
echo "import re" >>$1
echo "import sys" >>$1
echo "import time" >>$1
echo "import math" >>$1
echo -e "import random \n" >>$1
echo "#filename: $1 " >>$1
echo "#Date: $(date)" >>$1
echo "#Email: tianjian361@163.com" >>$1
echo -e "#Author: TianJian \n" >>$1
echo "#---------------------------------------------------" >>$1
fi
fi
echo new file content as below:
cat $1
看看结果,假如我需要新建一个sh文件:
tianjain@tianjain-TM1701:~$ ./test.sh hello.sh
creat new file hello.sh for you
new file content as below:
#!/bin/bash
#filename: hello.sh
#Date: 2019年 09月 13日 星期五 12:06:50 CST
#Email: tianjian361@163.com
#Author: TianJian
#---------------------------------------------------
tianjain@tianjain-TM1701:~$
来看看python新建文件:
tianjain@tianjain-TM1701:~$ ./test.sh hello.py
creat new file hello.py for you
new file content as below:
#coding=utf-8
import os
import re
import sys
import time
import math
import random
#filename: hello.py
#Date: 2019年 09月 13日 星期五 12:08:01 CST
#Email: tianjian361@163.com
#Author: TianJian
#---------------------------------------------------
tianjain@tianjain-TM1701:~$
虽然只是一个小脚本但可以很大程度减少我们的工作内容,让我们很方便。
9.2来一个杀进程的小脚本,当有时候程序在后台执行,不会停止,但如果你,在任务执行完,杀死关于它的所有进程,这样会尽可能的减少计算的使用内存:
PID=$(ps -ef | grep $1 | grep -v "grep" | awk '{print $2}')
for i in $PID
do
echo $PID
kill -9 $i
done
结果:
tianjain@tianjain-TM1701:~$ ./killer.sh hello.sh
25497 28181 28183
25497 28181 28183
已杀死
杀死关于某项任务的一切进程。
二、日常总结
1、管道
管道被放在命令之间,将一个命令的输出当作另外一个命令的输入中cmd1 | cmd2
2、退出状态码
判断上一条指令是否执行成功
date
echo $?
在函数中也可以指定状态码
function func(){
echo 123
exit 1
}
状态码的范围在0~255,0代表执行成功
3、通过文件名查找文件路径
find / -name tian.txt
第一个参数为路径,第二个参数-name,第三个参数为文件名,可以用正则
4、在root用户下修改其他用户密码
#修改当前用户密码
passwd
#修改其他用户密码
passwd tian
5、linux密码不过期设置
第一种:
#设置不过期天数
chage -M 99999 root
#查看
chage -l root
第二种:
/etc/login.defs修改PASS_MAX_DAYS 的默认值,然后重启生效
6、获取当前路径的两种方式
- pwd
获取当前路径,也就是当前执行的路径,非源脚本文件的位置;假如/home/路径去调用/home/tian/路径下的脚本,/home/tian/路径中脚本存在pwd命令,那么它的pwd路径结果为/home/路径 - $0
当我们需要此脚本存在的路径时,我们可以使用$0去锁定文件位置,它会生成一个绝对路径,通常我们会使用dirname $0
来获取源脚本存在的位置,dirname获取文件路径
7、连续执行命令用分号隔开
echo 123;ls -l ;echo 321
8 、字符串拼接
a=${dir_name}/filename.log
9、bin文件解释
bin文件时所有用户都可以执行的可执行程序
/usr/bin 是系统安装时自带的一些可执行程序,即系统程序
/usr/local/bin 用户在编译安装时,默认可执行程序的安装位置,自行安装软件可以执行程序的软链接可用此路径:ln -s xxx /usr/local/bin/xxx
10、判断框[]和[[]]区别
[ xxx ] 只支持整数表达式,小数无效,-a,-o, -ne ,-gt,-gte,-lt,-lte 在其中使用<.>,=需要用反斜杠\进行转义
[[ xxx ]] 是[]运算符的扩充,能够支持<.>,=不需要转义,支持||,&&不支持-a,-o 可以支持小数表达式,(当使用-ge,-lt只能对比整数)还可以使用正则。
11、剔除空格防止计算出错
当我们需要通过正则去筛选某个log的数据时,有时数据中会存在\r,\n等,执行运算$()时会报错,“syntax error:invalid arithmetic operatior”,需要用sed 's/\s//g'
,剔除空格
12、shell脚本中打印空格方法
echo -e "Hello \n World"