一、什么是shell脚本
我们都知道我们所输入的命令计算机是不识别的,这时就需要一种程序帮助我们进行翻译,变成计算机所识别的二进制程序,同时又将计算机所执行的结果翻译给我们linux的shell脚本是一种特殊的应用程序,常见的shell解释器有很多种使用不同的shell时期内部指令命令提示方式方面会存在一些区别,可以通过/etc/shells文件查看
二、shell结构
三、执行脚本文件有五种方式。
- 第一种使用绝对路径执行
- 第二种使用相对路径执行,如./的方式
- 第三种使用 sh命令来执行 格式 sh 脚本名 不需要执行权限
- 第四种使用 . 脚本名称的方式执行 不需要执行权限
- 第五种使用 source 脚本名称 不需要执行权限
四、重定向和管道操作
1)重定向分为三种
类型 | 设备文件 | 文件描述编号 | 默认设备 |
标准输入 | /dev/stdin | 0 | 键盘 |
标准输出 | /dev/stdout | 1 | 显示器 |
标准错误输出 | /dev/stderr | 2 | 显示器 |
上表就是三种输入输出的标准,这里我们将的是重定向,也就是说输入输出不在是标准的输入输出,而是通过重定向改变输入输出的方向;执行一个显示命令ls或者cat命令正常的执行完成之后会显示在屏幕上,通过重定向我们将他们输出在文本中不在正常输出到屏幕上。
类型 | 操作符 | 用途 |
重定向输入 | < | 从指定的文件读取数据,而不是从键盘输入 |
重定向输出 | > | 将输出结果保存到指定的文件(覆盖原有内容) |
>> | 将输出结果追加到指定的文件 | |
标准错误输出 | 2> | 将错误信息保存到指定的文件(覆盖原有内容) |
2>> | 将错误信息追加到指定的文件中 | |
混合输出 | &> | 将标准输出、标准错误的内容保存到同一个文件中 |
注:“|”管道符:将左侧的命令输出结果,作为右侧命令的处理对象
五、变量作用及类型
- 变量的作用 为灵活管理Linux系统提供特定参数,有两层意思: 变量名:使用固定的名称,由系统预设或用户定义 变量值:能够根据用户设置、系统环境的变化而变化
- 变量的类型 :自定义变量:由用户自己定义、修改和使用 ;环境变量:由系统维护,用于设置工作环境 ;位置变量:通过命令行给脚本程序传递参数 ;预定义变量:Bash中内置的一类变量,不能直接修改;
双引号("):当=好右边赋值出现空格的时候,不需要使用双引号将其扩起,其他情况下通常可以省略
单引号('):当要赋值的内容包括"$"、"\"等具有其他含义的特殊字符时应使用单引号将其括起来在单引号范围内将无法引用其他的值,任何字符均作为普通字符看待,但赋值 的内容包含单引号时需要使用\’符号进行转义以免冲突。
反撇号(`):反撇号主要使用于命令替换,允许将某个命令的屏幕输出结果赋值给变量。反撇号括起来的范围内必须是可执行的命令。否则将会出现错误。(注:使用反撇号难以在一条命令中实现嵌套命令的操作,"$()"这个可以来替代反撇号,可以解决嵌套的问题)
整数变量的运算 格式:expr 变量1 运算符 变量2 [运算符 变量3] ...
常用运算符 加法运算:+ ;减法运算: - ;乘法运算: \* ;除法运算: / ;求模(取余)运算: %;
1)环境变量
环境变量是指系统本省运行需要由linux系统提前创建好的一类变量,主要用于用户的工作环境,包括用户的宿主目录,命令的查找路径,用户的当前目录,登录的终端等环境变量的值有操作系统本身自己维护,随着用户的状态改变而改变
注:环境变量的配置文件在/etc/profile(全局)
用户宿主目录/home/zm/.bash_profile(局部)
2)位置变量
为了使用shell脚本程序是方便通过明林行为为程序提供参数Bash引用了位置变量的概念,当执行命令行操作时第一个字段表示命令字或程序名,其余的字符串参数按照从左到右的顺序依次给位置变量赋值;位置变量也成为位置参数,使用$1 $2 $3 …$9表示。
3)预定义变量
- $#:命令行中位置变量的个数(程序执行了几个位置参数)
- $*:所有位置变量的内容(具体的内容 比如/boot就是一个具体的内容)
- $?:上一条命令执行后返回的状态,当返回状态值为0时表示执行正常,非0值表示执行异常或出错
- $0:当前执行的进程/程序名(就是当前执行的命令或程序的名字)
- $*代表具体的备份内容这里也可以说是位置参数