SHELL脚本基础
基本都是干货,都是通过书和视频总结的一小部分,里面应该有一些错误;
SHELL变量
1.变量:临时储存数据的,该数据是可以进行变化的数据
2.变量的使用:1.多次重复使用的数据,并且在代码中重复,可以用变量来代替该内容
3.没有数据类型
4.变量名=变量值
5.如果打印变量和使用变量使用(&name)
6.unset 变量名 可以取消相应的变量
变量的定义规则:
1.变量名区分大小写
2.变量名中不能使用特殊的符号
3.变量名不能以数字开始
4.等号两边不能有任何空格
5.变量名尽量做到名如其人
6.变量名今年可能大写
echo ${A:2:4} 从0开始计数,从第二开始截取4个字符
命令的的执行结果作为赋值使用
date= $(date + %F)
交互式定义变量(read)
read [选项] 变量名
-p 提示用户的信息
-n 提示定义字符数
-s 不显示
-t 定义时长
read 也可以从其他文件读取做为变量使用
有类型的变量赋值
declare 选项 变量名=变量值 经declare修饰过后变量就只有一个 类型相关
-i 整数
-r 定义只读变量
-a 定义普通数组
-A 定义关联数组
-x 将环境通过环境导出
ps -auxf | grep bash (查看bash的父子关系)
export和declare -x 都可以导出环境变量 和定义环境变量
变量的分类 (作用域区分)
本地变量 当前用户定义的变量
环境变量 当前进程有效,并且子进程可以使用
env 查看当前用户的环境变量
set 可以查看所有的当前设置好的变量
全局变量
/.bashrc 当前用户的bash信息,用户登录时读取
/.bash_profile 当前用户的环境变量,用户登录时读取
/etc/bashrc 全局的bash信息,所有用户都生效
/etc/profile 全局环境变量信息 系统和所有用户都生效
以上文件修改以后,都需要重新source让其生效或者退出重新登录
系统变量
(内置bash 变量)shell 本省已经固定好了他的名字和作用
$? 状态值返回后的变量 非0 是有问题的
每次要验证命令的返回值
$0 当前执行的程序或者脚本的名字
$# 脚本后面接的参数的个数
$* 脚本后面的所有参数,参数当成一个整体输出
$@ 脚本后面所有参数,参数独立输出
$1-$9 脚本后面的位置参数,$1表示第一个位置 参数,以此类推
{n} 拓展位置参数
$$当前所在进程的进程号,
调运最后一条命令中的参数
shell脚本写法规范
标准的shell脚本写法
source 用来重新读取配置文件并执行
#!/bin/bash //解释器
#Name:名字
#Desc : 描述
#Path:存放路径
#Usage:用法
#Update:更新时间
脚本的执行方法有两种
标准:1.绝对路径进行执行
2.相对路径执行
非标准:1.指定解释器编译
2.source 方式去执行脚本
也可以指定解释器对脚本进行翻译
bash -x 可以对脚本的查看脚本是否出现错误
shell的作用
1.自动化软件的部署 LAMP/LNMP/Tomcat
2.自动化管理 系统初始化脚本,批量
3.自动化分析处理
4.自动化备份
5.自动化监控
bash的一般特性
- 命令和文件的自动补全
Tab 只能补全命令和文件
2.常见的快捷键
ctrl c 终止前台的运行程序
^z 挂起前台的程序挂起到后台
^d 退出 等价exit
^r 搜素历史命令
^u 删除光标前的所有字符
^k 删除光标后的所有字符
3.常用的通配符(重点)
- 匹配0或多个任意字符
?匹配任意单个字符
[list] 匹配[list]中得任意单个字符
[!list] 匹配除list中的任意单个字符
{str1,str2,str3……} 多个字符
- shell中的引号(重点)
“” 会把引号的内容当成整体来看待,允许通过()一样 ,引号或者括号里的命令会优先执行,如果存在嵌套,反撇号不能使用
常用文本处理工具(推荐自学正则表达式:《正则表达式必知必会》)
grep 行过滤工具;用关键字进行行过滤
#grep 【选项】‘关键字’ 文件名
临时建立别名 alias 命令
建立别名 alias 命令='组合命令’
grep 常用的选项
-i 不缺分到大小写
-v 反选
-c 统计使用的次数
-r 递归查找
-l 查找文件名
-n 显示所在的行号
-e 使用正则表达式
-w 之搜寻 单词
^行头 KaTeX parse error: Expected group after '^' at position 5: 行尾
(^̲)(代表的是空格)
cut 列过滤使用
#cut [选项] 文件名称
-c 以自负单位进行切割,截取
-d 自定义分割符
-f 和-d 配合使用,指定截取区域
系统的运行级别(补充)
runlevel 0-7
init 0 -7 可以切换系统不同的级别
sort 排序
sort每一行进行排序将字符排序的时候根据的字符的AC码进行排序
-n 排序
-o 将输出结果经行重定向
-t 自定义分隔符
-k 定义排序的第几列
unip工具
unip用于去除连续的重复行
-i 忽略大小写
-c 统计重复行
-d 只显示重复行
tee 工具
tee工具 从标准输入读取并读取写入到标准输出和文件,即是双向覆盖重定向(屏幕输出|文本输入)
'^$'是空行
diff 工具(一般使用diff 打补丁和软件更新使用)(公司电脑有更具体的使用)
#diff [ 选项] 文件1 文件2
可以使用 > 文件名 用来清空文件的内容,但是并不会删除文件
tr工具 (跟新配置文件使用)
用于字符转换,替换和删除;主要用于删除文件中的控制字符或进行字符转换
用法1: 命令的执行结果交给tr处理,其中string1用于查询,string2用于转换处理
command | tr ‘strings’ ‘string2’
用法2:tr处理的内容来自文件,记住使用标准输入
tr ‘string1’ ‘string2’ < filename
用法3:匹配string1进行相应的操作,如删除操作
tr options ‘string1’ < filename
常用的options选项
-d 删除字符串1中所有的输入字符
-s 删除所有的重复出现字符序列,只保留第一个;即使出现字符串压缩为一个字符
a-z 匹配所有的小写字母
A-Z 取反
0-9 匹配数字
[:alnum:] 匹配所有的字母和数字
[:alpha:]: 匹配所有的字母s
[:blank:]: 匹配所有的空格
[:punct:]:匹配所有的标点符号
[:space:]:匹配说所有的水平和垂直的空格
[:cntrl:]:匹配所有的控制字符 (\f Ctral -l 走换行页)
\n \r \t
paste用于进行文件合并(使用的不是很多)
来源:CSDN
作者:洪大宇
链接:https://blog.csdn.net/weixin_45647912/article/details/104789962