广州网站建设加盟,公司介绍简短范文,wordpress重构,seo站内优化站外优化Shell编程
视频地址https://www.bilibili.com/video/BV1hW41167NW/?p1vd_source977d52a6b92ce8b6ae67c16fc61f0428
第一章 Shell概述
大数据程序员为什么要学习Shell呢#xff1f;
需要看懂运维人员编写的Shell程序偶尔会编写一些简单的Shell程序来管理集群#xf…Shell编程
视频地址https://www.bilibili.com/video/BV1hW41167NW/?p1vd_source977d52a6b92ce8b6ae67c16fc61f0428
第一章 Shell概述
大数据程序员为什么要学习Shell呢
需要看懂运维人员编写的Shell程序偶尔会编写一些简单的Shell程序来管理集群提高开发效率。
Shell概述
Shell是一个命令行解释器它接收应用程序的/用户命令然后调用操作系统内核。 Shell 还是一个功能相当强大的编程语言易编写、易调试、灵活性强。
第二章 Shell解析器 Linux提供的shell解析器有6种 系统 默认的是/bin/bash bash和sh的关系sh是bash的软连接 Contos默认的解析器是bash
第三章 Shell脚本入门
3.1 脚本格式
脚本以#!/bin/bash开头(指定解析器)
3.2 第一个Shell脚本hello world
需求创建一个Shell脚本输出helloworld 创建一个文件夹以后存放的shell脚本全放在这个文件夹下 mkdir shelldatas
进入shelldatascd shelldatas
在shelldatas下创建shell脚本touch helloworld.sh
编辑sh脚本vim helloworld.sh
按i进行输入 输入完成后按ESC键输入:wq退出 运行脚本 ,有以下方式 sh helloworld.sh
bash helloworld.sh
bash /shelldatas/helloworld.sh
sh /shelldatas/helloworld.sh
./helloworld.sh 这个会报权限不够
输入ll 查看权限 给文件添加权限chmod 777 helloworld.sh
输入ll查看权限
权限赋予之后使用./helloworld.sh或者/shelldatas/helloworld.sh
注意第一中执行方法本质是bash解析器帮你执行脚本所以脚本本身不需要执行权限第二种执行方法本质是脚本需要自己执行所以需要执行权限。
3.3 第二个Shell脚本多命令处理
需求 在/shelldatas目录下创建一个banzhang.txt在banzhang.txt文件中增加”I love cls“ 创建batch.sh脚本 touch batch.sh
编辑batch.sh vim batch.sh
按i进行输入完成后按ESC并输入:wq退出
执行batch.sh sh batch,sh
查看文件夹是否多了banzhang.txt文件。
打开banzhang.txt,内容显示在控制台上。cat banzhang.txt
第四章 Shell中的变量
4.1系统变量
4.1.1 常用系统变量
$HOME、$PWD、$SHELL、$USER等
4.1.2 案例实操 查看系统变量的值 显示当前shell中的所有变量set
4.2 自定义变量
4.2.1 基本语法
定义变量变量 值
撤销变量 unset 变量
声明静态变量 readonly 变量注意不能unset
变量定义规则 变量名称可以由字母、数字和下划线组成但是不能以数字开头环境变量名建议大写。 等号两侧不能有空格。 在bash中变量默认类型都是字符串类型无法直接进行数值运算 变量的值如果有空格需要使用双引号或单引号括起来。 可把变量提升为全局环境变量可供其他Shell程序使用
4.2.2 export 变量名
编辑helloworld.sh 输入指令echo $D,
保存后运行helloworld.sh$D 并没有被输出
目前$D为局部变量将它提升为全局变量export D
运行helloworld.sh
注意变量设置为全局变量后可供所有的shell脚本内使用常见的场景就是些javahomedorkehome等
4.3 特殊变量 $n
4.3.1 基本语法
$n(功能描述n为数字$0代表该脚本名称$1-9代表第一到第九个参数十以上的参数十以上的参数需要用大括号包含如${10})
4.3.2 案例实操
创建touch parameter.sh;编辑文件 vim parameter.sh
输入 echo ”$0 $1 $2 $3“
报存编辑 运行parameter.sh,sh parameter.sh
应用场景判断你输入的参数脚本内根据参数执行相应的内容
4.4 特殊变量 $#
4.4.1 基本语法
$# (功能描述获取所有输入参数个数常用于循环)。 实操案例 继续编辑vim parameter.sh 输入echo ‘$#’
保存运行脚本
4.5 特殊变量 $*、$
4.5.1 基本语法
$*(功能描述这个变量代表命令行中所有的参数$*把所有的参数看成一个整体) $ 功能描述这个变量也代表命令行中的所有的参数不过$把每个参数区分对待
4.5.2 案例实操 4.6特殊变量 $?
4.6.1基本语法
$? 功能描述最后一次执行的命令的返回状态如果这个变量的值为0证明上一个命令正确执行如果这个变量的值为非0具体是哪个数由命令自己来决定则证明上一个命令执行不正确了
4.6.2 实操案例 第五章 运算符
5.1 基本语法
”$((运算式))“或”$[运算式]“ expr -\*, / ,% 加减乘除取余 注意expr 与运算符之间要有空格。
5.2实操案例
计算233-2
计算混合运行23*4 expr的形式expr 2 3 用上顿号包起来表示让它先运行后面在执行最外层的运算
通过[]中括号的形式这个明显简单些中括号内直接放运算式子
第六章 条件判断
6.1 基本语法
【 condition 】注意condition前后要有空格 注意条件非空即为true【 zhangsan 】返回true[]返回false
6.2 常用判断条件
6.2.1 连个整数之间比较 字符串比较 -lt 小于 less than -le 小于等于less equal -eq 等于 equal -gt 大于 greater then -ge 大于等于greater equal -ne 不等于Not equal
6.2.2 按照文件权限进行判断
-r 有读的权限read -w 有写的权限write-x 有执行的权限execute
6.2.3 按照文件类型进行判断
-f 文件存在并且是一个常规的文件file -e 文件存在 existence-d 文件存在并不是一个目录directory
6.2.4 例子
判断23 大于等于 22
判断helloworld.sh 是否具有写权限
/shelldatas/cls.txt 目录中的文件是否存在
多条件判断表示前一条命令执行成功时才执行后一条命令 || 表示上一条命令执行失败后才执行下一条命令
第七章 流程控制(重点)
7.1 if判断
7.1.1 基本语法
if [ 条件判断式 ]:then程序
fi
或者
if 【 条件判断式 】then程序
fi【 条件判断式 】中括号和条件判断式之间必须有空格if 后要有空格
7.1.2 案例实操
输入一个数字如果式1则输出ni zhen shuai如果输出2则输出ni zhen chou如果是其他什么也不输出。
7.2 case 语句
7.1.1 基本语法
case $ 变量名 in
”值1“)
如果变量的值等于值1则执行程序1
;;
”值2“
如果变量的值等于值2则执行程序2
;;
...省略其他分支...
*)
如果变量的值都不是以上的值则执行此程序
;;
esac注意事项
case行尾必须为单词”in“每一个模式匹配必须以右括号”“结束双分号”;;“表示命令序列结束相当于Java中的break最后的” *“表示默认模式相当于Java中的default
7.1.2 案例实操
输入一个数字如果是1则输出beijing如果是2则输出nanjing如果是其他则输出shanghai
7.3 for循环
7.3.1 基本语法
for (( 初始值;循环控制条件;变量变化 ))do程序
done7.3.2 案例实操
从1加到100
7.3.3基本语法2
for 变量 in 值1 值2 值3...do程序
done7.3.4 实操案例打印所有输入参数 $*的输出一次输出一个参数 $的输出一次输出一个参数
“$*” 加引号的一次输出所有只循环一次 加”$“ 一次输出一个 总结$、$*、$,参数有几个就循环几次 $*, 不管参数有多少个它只循环一次并且值就是所有的值
7.4 while循环
7.4.1 基本语法
while [ 条件表达式 ]do程序done
7.4.2 实例从1加到100 第八章 read读取控制台输入
8.1 基本语法
read(选项)(参数) 选项: -p:指定读取值时的提示符 -t: 指定读取值时等待的时间秒 参数 变量指定读取值的变量名 8.2案例实操
提示7秒内读取控制台输入的名称 第九章 函数
9.1 系统函数
9.1.1 basename 基本语法
basename [string/pathname] [suffix] 功能描述basename命令会删掉所有的前缀包括最后一个‘/’字符然后将字符串显示出来 选项suffix为后缀如果suffix被指定了basename会将pathname或string中的suffix去掉。
9.1.2 案例实操
截取该/shelldatas/helloword.sh路径的文件名称
9.1.3 dirname基本语法
dirname文件绝对路径 功能描述从给定的包含绝对路径的文件名中去除文件名非目录部分然后返回剩下的路径目录的部分
9.1.4 案例实操 9.2 自定义函数
9.2.1 基本语法
[ function ] funname[()]
{Action;[return int;]
}
funname经验技巧
必须在调用函数地方之前先声明函数shell脚本是逐行运行不像其他语言一样编译。函数返回值只能通过$?系统变量获得可以显示加return返回如果不加将以最后一条命令运行结果作为返回值return后跟数值n0~255
9.2.2 案例实操计算两个输入参数的和 第十章 Shell工具重点
10.1 cut
cut的工作就是“剪”具体的说就是在文件中负责剪切数据用的cut命令从文件的每一行剪切字节、字符 和字段并将这些字节、字符和字段输出。
10.1.1 基本语法
cut[选项参数] filename 说明默认分割符是治标符 选择参数说明
选项功能-f列号提取第几列-d分隔符按照指定分隔符分隔
10.1.2 实操案例
准备数据 选取系统path变量值第2个“”开始后的所有路径
切割ifconfig后打印的ip地址
ifconfig eth0
ifconfig eth0 | grep inet addr
ifconfig eth0 | grep inet addr | cut -d : -f 2
ifconfig eth0 | grep inet addr | cut -d : -f 2 | cut -d -f 110.2 sed
sed是一种流编译器它一次处理一行内容处理时把当前处理的行存储在临时缓冲区中称为“模式空间”接着用sed命令处理缓冲区中的内容处理完成后把缓冲区的内容送往屏幕接着处理下一行这样不断重复直到文件末尾。文件内容并没有改变除非你使用重定向存储输出。
10.2.1 基本语法
sed[选项参数] ‘command’ filename
10.2.2 选项参数说明
选项参数功能-e直接在指令列模式上进行sed动作编辑
10.2.3 命令功能描述
命令功能a新增a的后面可以接字串在下一行出现d删除s查找并替换
10.2.4 实例实操 将meinv 这个单词插入到sed.txt第二行打印
删除源文件中包含zou的行
将sed.txt文件中将zhangsan替换为lisi
将sed.txt文件中的第二行删除并将zhangsan替换为lisi 10.3 awk
一个强大的文本分析工具把文件逐行的读入以空格为默认分割符将每行切片切开的部分在进行分析处理。
10.3.1 基本用法
awk[选项参数] ‘patternl {action1} pattern2 {action2}...’ filename pattern: 表示awk在数据中查找的内容就是匹配模式 action在找到匹配内容时所执行的一系列命令
10.3.2 选项参数说明
选项参数功能-F指定输入文件拆分隔符-V赋值一个用户定义变量
10.3.3 案例实操 搜索passwd文件以root关键字开头的所有行并输出改行的第7列
搜索passwd文件以root关键字开头的所有行并输出该行的第1列和第7列中间以“”号分割
注意只有匹配了pattern的行才会执行action 只显示/etc/passwd的第一列和第七列以逗号分隔且在所有行前面添加列名usershell在最后一行添加“dage/bin/zhishai”
注意BEGIN在所有数据读取行之前执行END在所有数据执行之后执行。 将passwd文件中的用户id增加数值1并输出
10.3.4 awk的内置变量
变量说明FILENAME文件名NR已读的记录数NF浏览纪律的域的个数切割后列的个数
10.3.5 案例实操
统计passwd文件名每行的行号每列的列数
切割IP
查询sed.txt中空行所在的行号
10.4 sort
sort 命令式在Linux里非常有用它将文件进行排序并将排序结果标准输出。
10.4.1 基本语法
sort(选项)参数
选项说明-n依照数值大小排序-r以相反的顺序排序-t设置排序时所用的分隔字符-k指定需要排序的列
10.4.2 案例实操 第11章 企业真实面试题
11.1 京东
问题1使用Linux命令查询filel中空行所在的行号
有文件chengji.txt内容如下 张三 40 李四 50 王五 60 使用Linux 命令计算第二列的和并输出
cat chengji.txt | awk -F {sum$2} END{print sun}11.2搜狐和讯网
Shell脚本里如何检查一个文件是否存在如果不存在该如何处理
# /bin/bash
if [ -f file.txt ]; thenecho 文件存在
elseecho 文件不存在
fi11.3 新浪
用shell写一个脚本对文本中无序的一列数字排序
11.4金和网络
请用shell脚本写出查找当前文件夹/home下所有的文本文件内容中包含有字符”shen“的文件名称