Shell 介绍
Shell 是一个 C 语言编写的脚本语言,它是用户与 Linux 的桥梁,用户输入命令交给 Shell 处理 Shell 将相应的操作传递给内核(Kernel),内核把处理的结果输出给用户。 shell编程通常指的是学习shell命令语法后,利用这套语法开发脚本程序,操作、访问内核服务。 而不是使用C语言去编写一个shell程序。
Shell 开发步骤
能进行文本编辑的地方都可以写 ,linux上常使用vim编辑器开发。Shell语言不需要编译,但是执行Shell语言需要Shell语法解释器,Linux系统中集成了很多种类的Shell解释器,所以不需要安装Shell解释器。
Shell 解释器
常见的Shell解释器:
sh:全称是 Bourne shell,由 AT&T 公司的 Steve Bourne开发,为了纪念他,就用他的名字命名了。sh 是UNIX 上的标准 shell,很多 UNIX 版本都配有 sh。sh 是第一个流行的 Shell。
csh: 全称是C shell,它是sh之后另一个广为流传的shell是由柏克莱大学的Bill Joy设计的,这个shell的语法有点类似C语言,所以才得名为C shell ,简称为csh。
Bash:全称是bash shell,它是Linux的默认shell。由GNU组织开发,是各种Linux发行版默认配置的 shell。bash兼容sh,针对sh编写的Shell代码可以不加修改地在bash中运行。
Shell 变量
shell变量是一种很“弱”的变量,默认情况下,一个变量保存一个串。
shell中有3种变量:用户变量、环境变量、特殊变量
用户变量在编程过程中使用量最多
环境变量主要是在程序运行时需要设置
特殊变量在对参数判断和命令返回值判断时会使用
变量的定义语法:
变量名=变量值
变量的定义需遵循的规则
- 变量名可以由字母、数字和下画线组成,但是不能以数字开头,不能使用关键字
- 在 Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须使用特殊命令
- 变量用等号"="连接值,"="左右两侧不能有空格。
- 变量值建议用中如果有空格,则需要使用单引号或双引号包含,如 test="hello world!"
- 在变量值中,可以使用转义符"\"。
用户变量
环境变量
环境变量是操作系统(Windows、Linux、Mac)在运行的时候,记录的一些关键性信息,用以辅助系统运行。
当shell程序启动时,都自动设置一组变量,这组变量就是环境变量。shell中的所有命令都可以使用这些变量,环境变量可以在/etc/profile中设置,环境变量的名字习惯上使用大写字母。
在Linux中执行:env命令即可查看当前系统中记录的环境变量,环境变量是一种Key=Value型结构,即名称和值。
Linux环境变量可以用户自行设置, 语法:
export 变量名=变量值
临时设置
永久有效设置
针对当前用户生效,配置在当前用户的: ~/.bashrc文件中。
针对所有用户生效,配置在系统的: /etc/profile文件中 ,
并通过语法:source 配置文件,进行立刻生效,或重新登录生效
特殊变量
我们可以在执行 Shell 脚本时,向脚本传递参数,这时候可以使用特殊变量来获取参数。
在执行Shell程序脚本时,可以向shell脚本动态传递参数。
好处是某些配置属性不用写死在脚本中。
动态传递参数的方式:
sh shell脚本文件 参数1 参数2 ...
Shell常用的特殊变量在shell脚本内部支持接收参数并使用:
Shell 字符串
一般来说,在编程语言中,字符串是使用最多的数据类型,shell也不例外;
shell中字符串定义可以使用单引号、可以使用双引号、也可以不使用引号;
推荐使用双引号定义字符串,方便在字符串中实现变量的提取操作。
双引号括起来的内容有"$"等都拥有特殊含义
单引号括起来的内容都是普通字符
Shell `反引号的使用
Shell 命令执行脚本
命令、脚本本质上都是属于shell;
shell命令倾向于在linux命令行中使用,适合逻辑简单场景;
shell脚本倾向于在文件中编写,适合复杂逻辑处理。
shell脚本文件一般以.sh结尾(只要内容是shell命令,后缀可以没有)
文件第一行一般为#!/bin/bash(也可以不写,默认解释器)
Shell 脚本执行方式
方式一:sh执行
格式: sh 脚本
注意: 需要进入脚本的所在工作目录,然后使用对应的sh命令来执行脚本,
这种执行方式,脚本文件不需要具有可执行权限。
方式二:相对路径执行
格式: ./脚本
注意: 需要先进入到脚本所在的目录,然后使用 ./脚本方式执行,
这种执行方式,必须保证脚本文件具有可执行权限。
方式三:绝对路径执行
格式: /绝对路径/脚本
注意: 需要使用脚本的绝对路径中执行,指的是直接从根目录/到脚本目录的绝对路径,
这种执行方式,必须保证脚本文件具有可执行权限。
案例一
创建一个binzi1.sh脚本文件,要求此脚本内先定义一个字符串变量str并赋值binzi666,然后打印该字符串 最后保存并执行此脚本
注意:
- shell脚本后缀名没有要求,通常以.sh结尾
- 在shell中除了第一行的#表示特殊格式外, 其他地方的#符号一般表示注释。
- #! 是一个约定的标记,它告诉系统 这个脚本需要什么解释器来执行
- 相对路径方式如果不加./直接执行脚本 默认去系统环境变量中查找
案例二
- 编写一个脚本文件binzi2.sh,在里面使用 之前学习的特殊变量分别获取当前脚本文件名称,传入参数个数并分别获取对应参数内容
- 执行binzi2.sh脚本文件,传入3个参数 分别为:张三,18,男
- 使用sh命令方式执行binzi2.sh脚本文件