shell
shell介于用户和内核之间,充当翻译官,当用户使用相关命令(Linux命令),shell会把指令转换成二进制传给内核。内核处理完毕后通过shell把内核的执行结果转换成人类能够识别的语言。
Linux中的shell种类:
- sh:基本淘汰
- bash:现在Linux默认的shell,是ssh的扩展
- csh:类C语言的shell,可以编译C语言
- tcsh:csh的增强
- nologin:一种特殊的shell,它的作用是禁止用户登录主机
默认情况下使用的shell都是bash
shell语言又叫做脚本语言、动态语言,主要作用就是控制软件和应用程序,一般都是以文本的形式保存,运行时才会进行编译
shell脚本的作用:
- 自动化运维(最重要⭐)
- 批量化重复操作
- 减轻管理人员的工作量
- 提高业务处理的速度
shell脚本的构成:
- 脚本申明:解释器,比如 #!/bin/bash
- 注释信息:#开头的语句都是注释信息,注释可以帮助工作人员更好地理解代码的架构
- 可执行语句:shell脚本中,所有在Linux命令行中可以执行的命令,都可以作为脚本的可执行语句
shell脚本的运行方式:
- 赋权执行:给脚本执行权限
- chmod 777 first.sh
- ./first.sh,“./”执行当前目录下的文件,该文件必须可执行

- 直接执行:一般用于调试脚本的内容
- bash first.sh
或者 sh first.sh
或者 source first.sh,这个命令叫做点命令,也就是“ . ”,这是bash的内部命令,它会实际上地执行文件,其他方式都只是运行文件后反馈结果 
- bash first.sh
重定向输出
- 交互式硬件设备的执行方式:
- 标准输入:比如键盘,输入的结果符合编码规范
- 标准输出:比如显示器,符合编码规范的命令,给与执行结果
- 标准错误输出:比如显示器,不符合编码规范的结果,给与错误输出的执行结果
- 重定向操作:
- 重定向输出:>,把标准输入保存到指定的文件中,会覆盖原有内容
- >>,把标准输出保存到指定文件的尾部,相当于追加,并不会覆盖原有内容
- 重定向错误输出:2>,将错误信息保存到指定的文件,会覆盖原有内容
- 2>>,追加

- 混合输出:&>,既可以保存标准输出,也可以保存标准错误输出
- &>>,追加
- 重定向输出:>,把标准输入保存到指定的文件中,会覆盖原有内容
重定向输入:
<:从指定的文件读取数据

shell中的变量
- 变量:描述对象的属性或者参数。存放系统和用户需要使用的特定参数
- 变量的类型:int - 整型,string - 字符串,true/false - 布尔类型,1.234 - 浮点型(小数)
- 变量名称:
- 有固定名称的变量,一般是系统预设
- 自定义变量名:
- 不要使用系统命令作为变量名
- 不要使用中文
- 不要使用特殊符号,除了“ _ ”
- 不要使用数字开头

a的值是临时存储在这个shell环境中的,开另一个shell就找不到这个a的值了。 - shell中不需要申明变量类型,直接赋值,$的作用是取值,$a也可以写成${a},作用一样,后面这种能防止出错
- 变量赋值时,引号的用法
- 打印变量时,加上双引号或者不加引号是弱引用,结果会被变量的值替代
- 打印变量时,加上单引号是强引用,结果是变量名本身

- 赋值变量时,双引号和单引号没区别

- 反撇号(` `):先执行反撇号当中的命令,然后再把命令运行的结果赋值给变量

- 自定义变量的类型
- 一般自定义:a=1,b=2
- 只读变量:readonly a=1

只读变量无法修改,无法直接撤销(unset),重启环境(bash)才能撤销
- read 通过命令获取内容,给变量赋值
- read -p "提示字符" 变量名

- read -p "提示字符" 变量名
- 变量的作用范围
- 自定义变量:只在当前的shell中生效
- 全局变量:
- 系统预设:对所有用户生效
- 自定义全局变量:临时声明全局,也是只在当前shell生效

一般来说我们自定义的变量需要根据条件时常修改,以满足不同条件,一旦作为全局变量,引用的值或者参数是不需要变的。
另一方面全局变量是所有人都可以引用,会导致程序状态的不确定性,所以无特殊需要,一般不声明。
- 环境变量:
- 系统预设:用来设置用户的工作环境

- 自定义:用于满足个人需求的工作环境,可以随时创建,随时修改,随时删除,系统可以识别到用户所需的操作指令,可以直接运行调用
- 环境变量类似于全局变量,和全局变量作用几乎一致,但是环境变量是系统本身就可以识别的
- 系统预设:用来设置用户的工作环境
- 位置变量:
- 命令行输入的参数,在脚本运行时,从脚本的外部通过位置变量给脚本内部的程序传参
- $n,n是数字,1-9,10以上的数字需要用{n},传参顺序是从左到右

- $0表示命令本身
- 预定义变量:
- 编程语言或脚本解释器提供的,自动设置,自动更新,不能修改
- $*和$@:表示命令或者脚本需要处理的参数
- $*:不加引号,会把参数一个一个地处理,加了引号,会当成整体处理

- $@:加不加引号,都会把参数一个一个地处理

- $*:不加引号,会把参数一个一个地处理,加了引号,会当成整体处理
- $?:表示前一条命令的返回状态码,只有0是表示执行成功或者执行正确,非0一律表示执行出现异常

- $#:特殊的预定义变量,统计一共传了多少个参数

- shell当中变量的运算符:

- i++:每次自增1,先赋值再+1
- ++i:每次自增1,先+1再赋值
- 非整数运算
- bc

- awk

- bc
851

被折叠的 条评论
为什么被折叠?



