参考书籍《Linux系统命令及shell脚本实践》
前提准备
百度或者谷歌搜索关键词“命令行工具”,下载安装。
Windows系统有很多命令行工具cygwin,git bash,我用的是Cmder 。
Mac命令行工具有自带的terminal等。
5.2 使用grep搜索文本
基于行的文本搜索工具,使用该工具时,如果匹配到相关信息就会打印出符合条件的所有行。
-
新建文件
编辑文件内容
-
查找含有name的行:
-
打印出含有name行的行号,使用参数-n
-
忽略大小写,使用参数-i
-
统计输出的行数,使用参数-c
-
忽略大小写,统计输出的行数
-
打印不包含name的行,使用反选参数-v
-
使用cat+管道改写第7条
-
查看grep的所有命令参数,使用参数–help
10.3 文本处理工具sed
sed(stream editor)是一种非交互式的流编辑器,通过多种转换修改流经它的文本。默认情况下,sed并不会改变文件本身,只是将修改后的文本打印到标准输出(也就是屏幕中)。处理以行为单位,每处理完一行就立即打印出来,然后在处理下一行,直至结束。包括删除、查找、替换、添加、插入、从其他文件中读入数据等。
常用场景:
- 常规编辑器编辑困难的文本
- 过于庞大的文本,比如vi一个几百兆的文件
- 有规律的文本修改,加快文本处理速度(比如全文替换)
- 准备文件,参考grep的1~2
shell脚本编写
变量
# 定义变量
a=1
b=hello
c="hello"
d='hello "tom"'
e=`ls`
-左右不要带空格,如果内容有空格,用双引号或单引号括住
-双引号支持转义,$开头的变量会被替换掉
# 变量使用格式,三选一
echo $a
echo ${b}
echo "$a"
算数判断和字符串比较
- [ 2 -eq 2 ] 相等
- [ 2 -ne 2 ] 不等
- [ 3 -gt 1 ] 大于
- [ 3 -ge 1 ] 大于等于
- [ 3 -lt 2 ] 小于
- [ 3 -le 3 ] 小于等于
- [ $a -gt $b ] 变量a是否大于变量b
- [ string1 = string2 ] 字符串是否相等
- [ -n “$var” ] 如果字符串不空,则结果为真(引用变量要加双引号,否则a未定义时,语法会报错)
- [ -z “$var” ] 如果字符串不空,则结果为真
用$?表示上一个表达式的结果,0表示true,1表示false。
内置判断
- [ -e file ] 如果是文件,返回真
- [ -d file ] 如果是子目录,返回真
- [ -f file ] 如果是普通文件,返回真
- [ -r file ] 如果文件可读,返回真
- [ -s file ] 如果文件长度不为0,返回真
- [ -w file ] 如果文件可写,返回真
- [ -x file ] 如果文件可执行,返回真
逻辑控制
if else
for循环
while循环