Shell 知识点2020
语法相关
shell 脚本中的空格语法
=
在赋值的时候, 左右不留空格.
在对比的时候, 左右要留空格.
中括号 [] 与其中间的代码应该有空格隔开
大括号
在Linux中, 有时候使用{}
来表示, 当前命令同时对多个值进行操作, 中间用,
分隔.
像是ls 一般情况下下个ls 只能看到当前或指定目录.
如果是ls {.,../,../../}
, 则依次输出三个目录情况
.:
bin GNU-AGPL-3.0 MPL-2 README THIRD-PARTY-NOTICES
../:
mongodb mysql
../../:
bin dev home lib media opt root sbin sys usr
boot etc jettodevops lib64 mnt proc run srv tmp var
= 和 ==
在对字符串进行操作的时候 =
==
是等价的.
在对数字进行操作的时候, 有区别, =
会被看作,是赋值.
所以, 一般情况下, 对比的情况下尽量用==
,赋值用=
实操
直接kill掉查找出来的对应进程
# 查找过滤mysql相关进程
ps -ef |grep mysql
# 输出对应进程号
ps -ef |grep mysql|awk '{print $2}'
# kill 掉查出来对应的进程号, 但是会提交某个进程找不到.(ps -ef的时候会显示查找进程本身, 结束查找后就没有该进程了)
kill -9 `ps -ef |grep mysql|awk '{print $2}'`
# kill 掉查出来对应进程(除grep进程)外的所有进程
kill -9 `ps -ef |grep mysql|grep -v grep|awk '{print $2}'`
## 另一种实现方式
# 不是通过``符号改变优先级, 而是添加对应的`kill -9`的输形成整体作为一个命令, 传给`sh`
ps -ef|grep mysql|grep -v grep|awk '{print "kill -9 "$2}'|sh
Linux只删除文件
# 列举目录下所有文件, 过滤,
ls |grep -v .jar|grep -v test|xargs rm -rf
字符串转换大小写
- typeset 命令
typeset 可以转换变量的值, 这种改变是永久的.修改的时候, 只需要输入变量名不用加$
, 因为typeset是直接改内存的值.
但是某些时候不起作用, 例如值为AgileCenter时候
str="aaaZZZ"
typeset -l str
echo $str
typeset -u str
echo $str
- tr
#大转小
echo "aaaZZZ" | tr '[A-Z]' '[a-z]'
#小转大
echo "aaaZZZ" | tr '[a-z]' '[A-Z]'