13、| 管道命令
使用| 将多个命令拼接在一起
原理:就是将前一个命令的标准输出作为后一个命令的标准输入来重定向
命令 | 说明 |
---|---|
more 命令 | 将标准输入的内容进行缓慢向下查看,要人工操作向下 只支持详细爱看,不支持往回走 eg: cat aa.html |
less 命令 | 比more更加完善,支持往回查看,也支持vim操作 |
tee 命令 | 将标准输出重新输出,同时存一份到文件 常用的场景 开一个服务,服务一直在刷log,需要实时看log,但是又想将log存成一个文件 |
#管道命令-more
cat aa.html | more
#管道命令-less
cat aa.html | less
#tree将输出的内容输入到指定文件中
cat aa.html | tee -a append.html
14、文件重定向
2>&1 文件描述符2 也重定向到文件描述符1的位置
标准错误输出也重定向到标准输出的位置
cmd > file 把标准输出重定向到新文件中
cmd >> file 追加
cmd > file 2>&1 标准出错也重定向到1所指定的file里
cmd >> file 2>&1
cmd < file1 > file2 输入输出都定向到文件里
cmd < &fd 把文件描述符fd作为标准输入
cmd > &fd 把文件描述符fd作为标准输出
cmd < &- 关闭标准输出
echo '内容111' >> aa.txt 2>&1 &
15、函数
- function关键字可以省略,小括号也可以省略,但是两个必须保留一个,不然解析器不知道要定义的是一个函数
function 函数名()
{
}
调用函数的方法,就跟普通命令一样
函数名 arg1 arg2 …
函数执行状态看return语句,如果没有return语句,就以函数里面最右一条直行的指令的返回值状态作为整个函数的退出状态
#!/bin/bash
function readFold
{
local dir="$1"
for f in `ls $dir`
do
if [ -f "$dir/$f" ]
then
echo "$dir/$f 是文件"
elif [ -d "$dir/$f" ]
then
echo "$dir/$f 是文件夹"
readFold "$dir/$f"
else
echo "$dir/$f 无法识别"
fi
done
}
#调用 函数名 第一个参数 第二个参数 ...第n个参数
readFold /usr/local/software
#echo "函数输出结果为:$result"
- 函数的传参
也是使用了 $1 $2 … 来获取函数内的参数
#!/bin/bash
function readFold
{
dir1="$1"
dir2="$2"
echo "参数1: $dir1"
echo "参数2: $dir2"
}
#调用 函数名 第一个参数 第二个参数 ...第n个参数
readFold . /usr/local/software
15、shell脚本执行方法
命令 | 说明 |
---|---|
-n | 遍历脚本,检查语法(不真正执行脚本) |
-v | 一边执行脚本一边将解析到的脚本输出 |
-x | 执行脚本的同事打印每一句命令,把变量的值都打印出来,(调试常用) |
#1、执行以下命令,不报错证明脚本正确
bash -n aa.sh
sh -n aa.sh
#2、执行以下命令,打印标准输出
bash -v aa.sh
sh -v aa.sh
#3、执行以下命令,打开调试
bash -x aa.sh
sh -x aa.sh
#!/bin/bash -x #在脚本开头添加-x
set -x #打开、脚本中显示的使用
set +x #关闭、脚本中显示的使用
#!/bin/bash -x[在脚本的第一行天添加-x参数]
16、sort排序
命令从高标准输入中读取数据然后按照字符串内容进行排序
命令 | 说明 |
---|---|
-f | 忽略字符大小写 |
-n | 比较数值大小 |
-t | 指定分隔符、默认是空格或者是tab |
-k | 指定分隔符后进行比较字段 |
-u | 重复的行只显示一次 |
-r | 反向排序 |
-R | 打乱顺序(同样的2行洗不乱) |
- 准备使用的数据
vim aa.txt
pig 90 weight 100
cat 9 weight 10
cock 8 weight 4
bear 80 weight 900
donkey 26 weight 40
bull 26 weight 40
- 命令的使用
#指定第2列排序
cat aa.txt | sort -k2 -n
#指定第二列,去除重复的值
cat aa.txt | sort -k2 -n -u
#第四列排序,去除重复的,并且反向排序
cat aa.txt | sort -k4 -n -u -r
#进行打乱洗牌(每次顺序都不一样)
cat aa.txt | sort -R
#eg:对linux的系统用户进行排序
sort -t: -k3 -n < /etc/passwd
17、uniq(去除重复的行)
去除重复的行,前提是重复的行连续
命令 | 说明 |
---|---|
-c | 显示每行重复的次数 |
-d | 仅显示重复过的行 |
-u | 仅显示不曾重复的行 |
cat aa.txt | sort | uniq -d
18、wc(word count统计数量)
命令 | 说明 |
---|---|
-l | 统计行数 |
-c | 统计字节数 |
-w | 统计单词数 |
cat aa.txt | wc -l
cat aa.txt | wc -c
cat aa.txt | wc -w
19、grep(文本检索匹配输出)
默认适用的是正则表达式
egrep = grep -E
fgrep = grep -F
rgrep = grep -r
命令 | 说明 |
---|---|
-c | 只输出匹配行的计数 |
-i | 不区分大小写 |
-H | 文件名显示 |
-r | 递归遍历目录 |
-n | 显示行号 |
-s | 不显示不存在或无匹配文本的错误信息 |
-v | 显示不包含匹配文本的所有行,这个参数经常用于过滤不想显示的行 |
-E | 使用扩展的正则表达 |
-P | 使用perl的正则表达式 |
-F | 匹配固定的字符串,而非正则表达式 |
#显示aa.sh文件出现echo的信息
grep "echo" aa.sh
#统计400出现的次数
grep -c 400 error.log #输出具体统计的次数
#查询aaa.sh文件中包含echo字符的所有内容并且显示行号
grep -i -n "echo" aaa.sh
grep -i -n -H -R -r "echo" aaa.sh