目录
一、什么是Shell
Shell就是解释器、编译器、翻译官 与内核进行沟通
应用程序 就是把代码翻译成二进制,让内核进行处理
Shell是一个特殊的应用程序,介于操作系统和用户之间,扮演的是命令解释器的角色,用户输入操作指令,Shell解释,传递给内核,内核执行完同Shell返回,给用户一个执行结果,介于系统内核与用户之间
bash也是目前Linux版本默认的shell
Shell——脚本语言——按行执行,顺序执行,动态语言,也是编程语言的一种,用来控制软件应用程序,脚本通常都是以文本的形式保存,只在被调用的时候才进行解释或者编译(python也是)
二、Shell脚本应用场景
1、重复性操作
2、交互性任务
3、批量事务处理
4、服务运行状态监控
5、定时任务执行
sh [脚本名]
bash [脚本名]
source [脚本名]
./ [脚本名]
sh bash source 不需要给执行权限调试阶段可以不赋权执行
./ 必须给执行权限
但是一旦正式上线,必须给执行权限
三、重定向与管道操作
交互式硬件设备
标准输入
从该设备接收用户输入的数据
标准输出
通过该设备向用户输出数据
标准错误
通过该设备报告执行出错信息
重定向输入 < 从指定的文件读取数据
重定向输出 > 将输出结果保存到指定的文件(覆盖原有内容)
>> 将输出的结果追加到指定文件的尾部
重定向错误输出 2> 将错误信息保存到指定文件(覆盖)
2>> 将错误信息追加到指定文件
混合输出 &> 将标准输出、标准错误的内容保存到同一文件中(覆盖)
管道操作符合“|”
将左侧的命令结果输出结果,作为右侧命令的处理对象
四、变量的作用
用来存放系统和用户需要使用的特定参数(值)
变量名
使用固定的名称,由系统预设或用户定义
变量值
能够根据用户设置、系统环境的变化而变化
打印变量的值,前面要加$echo 、$a 引用变量也要加$
变量名的规范
1、不要使用系统的命令作为变量名
2、不要使用中文
3、不要使用特殊符号开头例如:# ¥ % & *等,但是可以使用_下划线开头
4、要有注释
变量的类型
整数 int
字符串 string
布尔 真假 0 1
浮点 1.1 2.2
自定义变量
由用户自己定义、修改和使用
特殊变量
环境变量、只读变量、位置变量、预定义变量
只读变量:readonly(重启即消失)
五、强引用和弱引用
在赋值变量时,单引号和双引号无区别
打印变量
双引号:弱引用,还是变量原本的值
单引号:强引用,就不再是原来变量的值,变为$b,变成字符串
反撇号:提取命令的执行结果,然后在给变量赋值
read —p "提示信息:” num(名称)
六、全局变量
所有的用户自定义变量在所有的子shell环境
export [字符]=[变量] 全局变量设置(临时定义)
在/etc/profile 中可以永久设置全局变量
优点
1、全局范围
2、持久性
3、共享性
副作用
如果相同的变量名,之间引用全局变量,会导致不确定性,在脚本中一般使用自定义变量
i++ for i= i < =10 i++ 先赋值,再加
i-- for i=10 i >=1 i--i=10
++i 先加,再赋值
--i 先减,再赋值
七、环境变量
系统自带,设置工作环境,配置系统行为,传递信息,控制程序的执行
这些环境变量,所有用户都可以使用,都可见
八、位置变量
命令行参数,运行脚本或程序时,传递给他们的值,位置变量用于将外部数据传递给脚本执行
$n
传参的顺序,从左到右
$0 命令本身
$1-9
$(10)
九、预定义变量
通常是编程语言或者脚本解释器提供的,根据需要自动设置和更新,不能修改
$#:表示命令或脚本要处理的参数个数
$* $@
加了双引号的$*会把内容处理在一行,加了双引号的$@ 会把内容分行处理
不加引号的$*也会分行处理,不加引号的$*和$@变现一致,加了引号,$*会把参数处理在一行
$?
判断上一条是否执行成功,成功,返回0,所有的非0返回值都是失败