Linux Shell经典案例
1.查空行使用Linux命令查询file.txt中空行所在的行号file1.txt数据准备
123456itheima itheimaitcast123itheima
1awk '/^$/{print NR}' file1.txt
2.求一列的和有文件file2.txt内容如下,使用Linux命令计算第二列的和并输出
123张三 40李四 50王五 60
1awk '{sum+=$2} END{print "求和: "sum}' file2.txt
3.检查文件是否存在根据文件是否存在执行不同逻辑
1if [ -e /root/file1.txt ]; then echo "文件存在"; else echo "文件不存在"; fi
4.数字排序用shell写一个脚本,对文本中无序的一列数字排序file3.txt文件内容
1234567891098765432101
1sort -n file3.txt | awk ...
Linux Shell工具篇 - 文本排序工具sort
介绍sort命令在Linux里非常有用,它将文本文件内容进行排序,并将排序结果标准输出或重定向输出到指定文件。
语法1sort (options) 参数
选项
说明
-n
number,依照数值的大小排序
-r
reverse, 以相反的顺序来排序
-t 分隔字符
设置排序时所用的分隔字符, 默认空格是分隔符
-k
指定需要排序的列
-d
排序时,处理英文字母、数字及空格字符外,忽略其他的字符
-f
排序时,将小写字母视为大写字母
-b
忽略每行前面开始出的空格字符
-o 输出文件
将排序后的结果存入指定的文件
-u
意味着是唯一的(unique),输出的结果是去完重了的
-m
将几个排序好的文件进行合并
参数:指定待排序的文本文件
演示数据文件准备:sort.txt
1234567张三 30 李四 95 播仔 85 播仔 85播仔 86AA 85播妞 100
1.数字升序按照空格分割后的第2列数字升序排序:
123sort -t " " -k2n,2 sort.txt# -t " " ...
Linux Shell工具篇 - 文本分析工具awk
介绍awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理,切开的部分使用awk可以定义变量、运算符,使用流程控制语句进行深度加工与分析。
创始人 Alfred V. Aho、Peter J. Weinberger和Brian W. Kernighan awk由来是姓氏的首字母。
语法1awk [options] 'pattern{action}' {filenames}
pattern:表示awk在数据中查找的内容,就是匹配模式
action:在找到匹配内容时所执行的一系列命令
选项参数说明:
选项参数
功能
-F
指定输入文件拆分分隔符
-v
赋值一个用户定义变量
awk内置变量
内置变量
含义
ARGC
命令行参数个数
ARGV
命令行参数排列
ENVIRON
支持队列中系统环境变量的使用
FILENAME ...
Linux Shell工具篇 - 内容处理工具sed
介绍sed (stream editor, 流编辑器) 是Linux下一款功能强大的非交互流式文本编辑器(vim是交互式文本编辑器),可以对文本文件的每一行数据匹配查询之后进行增、删、改、查等操作,支持按行、按字段、按正则匹配文本内容,灵活方便,特别适合于大文件的编辑。sed是一种流编辑器,它一次处理一行内容,将这行放入缓存(存区空间称为:模式空间),然后才对这行进行处理,处理完后,将缓存区的内容发送到终端。
语法sed会读取每一行数据到模式空间中,之后判断当前行是否符合模式匹配要求,符合要求就会执行sed程序命令,否则不会执行sed程序命令;如果不写匹配模式,那么每一行都会执行sed程序命令。
1sed [选项参数] [模式匹配/sed程序命令] [文件名]
选项参数说明:
选项参数
功能
-e
直接在指令列模式上进行sed的动作编辑。它告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时才需要使用-e选项;一行命令语句可以执行多条sed命令。
-i
直接对内容进行修改,不加-i时默认只是预览,不会对文件做实际修改。
-f ...
Linux Shell工具篇 - 文本切割工具cut
介绍cut 译为“剪切, 切割” ,它是一个强大文本处理工具,它可以将文本按列进行划分处理。cut 命令逐行读入文本,然后按列划分字段并进行提取、输出等操作。
语法1cut [options] filename
options参数说明:
选项参数
功能
-f 提取范围
列号,获取第几列
-d 自定义分隔符
自定义分隔符,默认为制表符。
-c 提取范围
以字符为单位进行分割
-b 提取范围
以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-n
与“-b”选项连用,不分割多字节字符;
提取范围说明:
提取范围
说明
n-
提取指定第n列或字符或字节后面所有数据
n-m
提取指定第n列或字符或字节到第m列或字符或字节中间的所有数据
-m
提取指定第m列或字符或字节前面所有数据
n1,n2,…
提前指定枚举列的所有数据
示例:
cut切割提取列:cut 文件或数据 -d 分隔符切割 -f 提取第X列
cut切割提取字符:cut 文件或数据 -c 提取字符范围
cut切割提取字节: ...
Linux Shell基础篇七 - 函数
Shell编程和其他编程语言一样有函数,函数是由若干条shell命令组成的语句块,实现Shell脚本代码重用和模块化编程。
系统函数即系统自带提供的函数,可以直接使用。
basenamebasename函数用于获取文件名的函数,根据给出的文件路径截取出文件名。
1basename [pathname] [suffix] # suffix:用于截取的时候去掉指定的后缀名
示例:
12basename ./control.sh #获取指定文件路径的文件名,输出 control.shbasename ./control.sh .sh #获取文件名并去掉指定的后缀,输出 control
dirname从指定的文件绝对路径,去除文件名,返回剩下的前缀目录路径。
1dirname 文件绝对路径
示例:
12dirname ./control.sh #输出:.dirname /root/control.sh #输出:/root
自定义函数开发人员自定义的函数,实现代码重用。
12345678910# 函数的定义[ function ] funname( ...
Linux Shell基础篇六 - 流程控制
if else语句if用于条件判断逻辑控制语句。
if 语法:
12345678#多行写法if 条件then 命令fi#单行写法if 条件; then 命令; fi
if else 语法:
123456if 条件then 命令else 命令fi
if elif else 语法:
12345678910111213if 条件1then 命令1elif 条件2then 命令2elif 条件3then 命令3……else 命令Nfi
示例:
123456789101112131415#!/bin/bashread -p "请输入你的考试成绩:" scoreif (( $score < 60 )); then echo "不及格"elif (( $score >= 60 && $score < 70 )); then echo "及格"elif (( $score >= 70 && $score < 80 )); ...
Linux Shell基础篇五 - 运算符
比较运算符整数比较运算符比较方式 [] 和 (()):
方式1: [ 整数1 options 整数2 ]
options: -eq -gt -ge -lt -le -ne
方式2: ((整数1 options 整数2))
option:< <= > >= == !=
注意:判断等于不可以使用= ,等于在(())里面是赋值的含义
假设变量 a 为 1,变量 b 为 2:
运算符
说明
例子
-eq
equals 检测两个数是否相等,相等返回 0, 否则返回1。
[ $a -eq $b ] 返回 1。
-ne
not equals检测两个数是否不相等,不相等返回 true。
[ $a -ne $b ] 返回 0。
-gt
greater than检测左边的数是否大于右边的,是返回0, 否则1
[ $a -gt $b ] 返回 1。
-lt
lower than检测左边的数是否小于右边的,是返回0, 否则1
[ $a -lt $b ] 返回 0。
-ge
greater equals检测左边的数是否大于等于右边的, ...
Linux Shell基础篇四 - 计算命令
计算命令expr命令expr (evaluate expressions 的缩写),译为“表达式求值”。Shell expr 是一个功能强大,并且比较复杂的命令,它除了可以实现整数计算,还可以结合一些选项对字符串进行处理,例如计算字符串长度、字符串比较、字符串匹配、字符串提取等。
求值表达式算术运算符表达式
12expr 1 + 1 # 返回: 2expr \( 10 + 10 \) \* 2 + 100 # 返回:140
获取计算结果赋值给新变量语法
1result=`expr 1 + 1` # 输出result得到结果: 2
下表列出了常用的算术运算符,假定变量 a 为 1,变量 b 为 2:
运算符
说明
举例
+
加法
expr $a + $b 结果为 3
-
减法
expr $a - $b 结果为 -1
*
乘法
expr $a \* $b 结果为 2
/
除法
expr $b / $a 结果为 2
%
取余
expr $b % $a 结果为 0
=
赋值
a=$b 将把变量 b 的值赋给 a
四则运算中如果使用了(),需要 ...
Linux Shell基础篇三 - 内置命令
内置命令Shell 内置命令,就是由 Bash Shell 自身提供的命令,而不是文件系统中的可执行脚本文件。可使用type来确定一个命令是否是内置命令或可执行文件:
1type [-tpa] 命令名
参数
说明
无参数
显示出命令名是外部指令还是 bash 内建指令
-t
会将命令名以底下这些字眼显示出他的意义:file :表示为外部可执行文件; alias :表示该指令为命令别名所设定的名称; builtin :表示该指令为 bash 内建的指令功能;
-p
如果后面接的可执行文件为外部指令时,会显示出完整文件名
-a
会由 PATH 变量定义的路径中,将所有和命令名相关的指令都列出来,包含别名
通常来说,内置命令会比外部命令执行得更快,执行外部命令时不但会触发磁盘 I/O,还需要 fork 出一个单独的进程来执行,执行完成后再退出。而执行内置命令相当于调用当前 Shell 进程的一个函数, 还是在当前Shell环境进程内, 减少了上下文切换。
内置命令列表
命令
说明
:
扩展参数列表,执行重定向操作
.
读取并执行指定 ...