个人理解shell脚本像积木,每个零件掌握,拼凑成一个整体。
1.Shell脚本长什么样子?正常是以 XXX.sh结尾的文件
1.1shell简介
shell介于内核与用户之间,负责命令的解释
1.2 shell的种类
[root@lili ~]# cat /etc/shells
/bin/sh #是bash的一个快捷方式
/bin/bash #linux默认的shell
/usr/bin/sh
/usr/bin/bash
1.3shell脚本的基本写法
2. Shell脚本怎么执行
2.1标准脚本执行方式(建议)
注意:标准执行脚本必须要有可执行权限
2.1.1 绝对路径执行
2.1.2 相对路径执行
2.2非标准脚本执行方式(不建议)
应用场景: 没有使用脚本权限,想看下脚本执行过程或想看下脚本语法
2.2.1 直接在命令行指定解释器执行
2.2.2 使用source,命令读取脚本文件,执行文件里的代码
引申:
脚本执行过程 [root@lili ~]# bash -x first.sh
检查脚本语法 [root@lili ~]# bash -n first.sh
3.shell模块
3.1通配符
* :匹配0或多个任意字符 大白话就是所有
[ list ] :匹配[ list ]中任意单个字符 举例:[冬西南]瓜 可以表示 冬瓜,西瓜,南瓜
[ a-z ] : 指定范围内的任意单个字符;表示从a到z的任意一个数
[ !list ] : 匹配除[ list ]中任意单个字符
{string1,string2,...} :匹配string1,string2或更多字符串。
?:匹配任意单个字符(英文标点下的问号)
?可以代表任意单个字符,输入几个?就代表几个任意字符。
举例 ?瓜 可以表示 冬瓜,西瓜,南瓜等
??瓜 可以表示 哈密瓜,大西瓜等
3.2bash中的引号
双引号"" :会把引号的内容当成整体来看待,允许通过¥符号引用其他变量值
单引号'' : 会把引号的内容当成整体来看待,禁止引用其他变量值,shell中特殊符号都被视为普通字符
反撇号`` :反撇号和$()一样,引号或括号里的命令会优先执行,如果存在嵌套,反撇号不能用。
3.3变量
一句话概括:变量是用来临时保存数据的,改数据是可以变化的数据。
3.3.1什么时候需要定义变量?(两种情况)
1.如果某个内容需要多次使用,并且在代码中重复出现,那么可以用变量代表该内容。这样在修改内容的时候,仅仅需要修改变量的值。
2.在代码运作的过程中,可能会把某些命令的执行结果保存起来,后续代码需要使用这些结果,就可以直接使用这个变量。
3.3.2 变量如何定义?
变量名=变量值
变量名:用来临时保存数据的 ;变量值:就是临时的数据
[root@newhost ~]# A=hello 定义变量A
[root@newhost ~]# echo $A 调用变量A,要给美元
[root@newhost ~]# echo ${A} 还可以这样调用,不管你的姿势多优雅,总之要给钱
[root@newhost ~]# A=world 因为是变量所以可以变,移情别恋是常事
[root@newhost ~]# unset A 不跟你完了,取消变量
变量定义规则
1.变量名区分大小写
2.变量名不能有特殊符号(特别说明:对于有空格的字符串给变量赋值时,要用引号引起来)
[root@newhost ~]# A="hello world"
[root@newhost ~]# A='hello world'
3.变量名不能以数字开头
4.等号两边不能有任何空格
5.变量名尽量做到见名知意
3.3.3变量的定义方式有哪些?
1.基本方式 (直接赋值给一个变量)
--引申 $变量名 和 ${变量名}的区别
相同点:都可以调用变量
不同点: ${变量名} 可以只截取变量的一部分,而$变量名不可以
[root@newhost ~]# A=1234567
[root@newhost ~]# echo $A
1234567
[root@newhost ~]# echo ${A:2:4} 表示从A变量中第3个字符开始截取,截取4个字符
3456
[root@newhost ~]#
2.命令执行结果赋值给变量
[root@newhost ~]# B=`date +%F`
[root@newhost ~]# echo $B
2024-08-21
[root@newhost ~]# C=$(uname -r)
[root@newhost ~]# echo $C
5.14.0-70.13.1.el9_0.x86_64
3.交互式定义变量(read)
目的:让用户自己给变量赋值,比较灵活。
语法:read [选项] 变量名
常见选项:
-p 定义提示用户的信息
<