因为近几个项目都是基于Linux 平台,于是开始持续关注linux shell 和linux系统管理相关的知识,平时除了阅读在线的博客来汲取这方面的知识,也努力看一些书籍来完善知识体系,而这本<Linux Shell脚本攻略>是个人觉得比较实用的一本shell脚本教材,作者在其中分门别类的记录了各种解决实际的脚本,命令。就像英文原版书名所写,这是一本cookbook,像菜谱,拿来照着步骤做一做,能解决不少常见的实际问题。
这里仅摘录一些个人在使用中经常会翻开书看一看的tips,相信以后用多了自然就记住了。
1. 用shell 进行数学运算
十进制的加法是很简单明了的,但是要告诉shell 我需要一个变量,并且这个变量是两个数值变量的和,则不是像其他语言直接上来var=1+1 就能得到预期结果。
在shell环境中,可以利用let ,(())以及[] 来执行基本的算术操作,而在高级操作时,则需要用到expr 和bc 这两个工具。
当我们在shell 输入n1=4; n2=5时, 它实际存储的是两个字符串,当你试图使用n3=$n1+$n2来获得一个加和时,你仅仅会得到一个字符串 “4+5”,这显然不是我们想要的结果。
而let 可以用来执行基本的算术操作,例如 let n3=n1+n2; echo $n3, 你可能已经注意到,在let 表达式里,我们不需要用$符号来引用n1和n2.
又如自加和自减操作: let n1++; let n1--
[]的操作与let命令类似,例如 res=$[n1+n2] ; 在[ ]中也可以使用$ 前缀: res=$[$n1+$n2]
在使用(()) 时,变量名前必须加上$: res=$(($n1+$n2))
2.一些小命令
拼接文件: cat file1 file2 file3
压缩连续的空白行: cat -s file
删除空白行: tr -s '\n'
用find 命令在查找文件时,经常因为条件太少,例如只提供一个文件名来搜索,导致搜索时间太长,返回的结果太多而失去意义。这里列出常用的一些:
否定参数 ! : find . ! -name "*.txt" -print 所有非txt的文件
基于目录深度的搜索: -maxdepth -mindepth
根据文件时间进行搜索: -atime -mtime -ctime
find . -type f -atime -7 -print 七天内被访问过的
find . -type f -atime 7 -print 在七天前访问过的
find . -type f -atime +7 -print 访问时间超过7天的
-amin -mmin -cmin 是基于分钟为计量单位的
-newer 查找比某文件修改时间更长的文件
基于文件大小的搜索:
-size
find . -type f -size +2k 大于2kb的文件
删除匹配的文件 -delete
find . -type f -name "*.swp" -delete
以文件权限进行匹配:
find -type -f -perm 644 -print
打印出用户slynux 拥有的文件
find . -type f -user slynux -print
结合find 执行命令或动作 -exec
find . -type f -user root -exec chown slynux {} \;
切换用户执行命令 :用su,当我们需要以其他身份执行 command,或者shell脚本,一般命令如下:
a. 切换用户只执行一条命令的可以用: su - oracle -c your_command
b. 切换用户执行一个shell文件可以用:su - oracle -s /bin/bash your_shell.sh
使用pushd /popd 快速定位路径, dirs 查看栈内容,从0 开始编号,去相应目录只需要 pushd +num , 而popd +num 可以移除相应的路径