SHELL脚本 基础一

人盡茶涼 提交于 2020-03-12 08:36:48

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表示第一个位置 参数,以此类推
10{10}-{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的一般特性

  1. 命令和文件的自动补全
    Tab 只能补全命令和文件
    2.常见的快捷键
    ctrl c 终止前台的运行程序
    ^z 挂起前台的程序挂起到后台
    ^d 退出 等价exit
    ^r 搜素历史命令
    ^u 删除光标前的所有字符
    ^k 删除光标后的所有字符
    3.常用的通配符(重点)
  • 匹配0或多个任意字符
    ?匹配任意单个字符
    [list] 匹配[list]中得任意单个字符
    [!list] 匹配除list中的任意单个字符
    {str1,str2,str3……} 多个字符
  1. 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用于进行文件合并(使用的不是很多)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!