文章目录
一. Shell介绍
1. Linux系统是如何操作计算机硬件CPU, 内存,磁盘,显示器等
使用Linux的内核操作计算机的硬件
2. Shell和计算机硬件的关系
通过编写shell命令发送给Linux内核去执行,操作就是计算机硬件所以shell命令是用户操作计算机硬件的桥梁
3. Shell是什么
Shell是命令,类似于window系统dos命令
Shell是一个门程序设计语言,shell里面含有变量,函数,逻辑控制语句等
4. Shell脚本是什么
是一个文本文件,里面可以编写shell命令或进行编程,形成一个可重用执行的脚本文件
5. 为什么学习shell
通过shell命令与编程语言来提高Linux系统的管理工作效率
6. Shell的运行过程
当用户下达指令给操作系统的时候,实际上是把指令告诉shell,经过shell解释,处理后让内核做出相应的动作。系统的回应和输出的信息也由shell处理,然后显示在用户的屏幕上
7. Shell解析器
cat /etc/shells 查看有那么shell解析
/bin/bash 是LinuxOS默认shell
echo $SHELL 打印输出当前系统环境使用的shell解析器类型
二. Shell脚本文件编写规范
首行需要设置shell解析器的类型
#!/bin/bash
注释格式
单行注释# 注释内容
三. 环境变量
1. 系统环境变量
是系统提供的共享变量,是Linux系统加载shell的配置文件中定义的变量共享给所有的shell程序使用
2. Shell的配置文件分类
a. 全局配置文件
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
b. 个人配置文件
当前用户/.bash_profile
当前用户/.bashrc
一般情况下,我们都是直接针对全局配置进行操作
3. 环境变量分类
在Linux系统中,环境变量按照其作用范围不同大致可以分为系统级环境变量和用户级环境变量
系统级环境变量:Shell环境加载全局配置文件中的变量共享给所用用户所有shell程序使用,全局共享
用户级环境变量:shell环境加载个人配置文件中的变量共享给当前用户的shell程序使用,登录用户使用
查看当前shell系统环境变量
env 查看系统
set 查看所有
自定义变量
自定义局部变量
就是定义在一个脚本文件中的变量,只能在这个脚本文件中使用的变量,就是局部变量
var_name=value
1.变量定义规则
a. 变量名称可以有字母数字下划线组成,但是不能以数字开头
b. 等号两侧不可以有空格
c. 在bash环境中,变量的默认类型都是字符串类型,无法直接进行数值运算
d. 变量的值如果有空格,必须使用双引号括起来
e. 不能使用shell关键字作为变量名称
2.查询变量值语法:
$var_name直接使用变量名查询
${var_name}
区别:花括号方式适合拼接字符串
3.变量删除:
unset var_name
4.特殊符号变量
$n 用于接收脚本文件执行时传入的参数
$0 用户获取当前脚本文件名称
$1~$9,代表获取第一个输入参数到第九个输入参数
第10个参数以上获取参数格式:${10}
$#获取所有输入参数的个数
$*$@获取所有输入参数,用于以后输出所有参数
不使用双引号括起来,功能一样\$*和\$@ 获取所有输入参数,格式为:$1 $2 … $n
使用双引号括起来
$*获取的所有参数拼接为一个字符串,格式为:“$1$2 … $n“
$@获取一组参数列表对象,格式为:”$1”,“$2”… “$n”
$?用于获取上一个shell命令的退出状态码,或者函数的返回值
$$用于获取当前Shell环境的进程id号
5. 自定义常量
就是变量设置值以后不可以修改的变量叫常量,也叫只读变量
6. 全局变量语法
export var_name1var_name2
7. 自定义系统环境变量
a. 系统级全局配置文件:/etc/profile
b. 设置环境变量:export VAR_NAME=xxx,变量名建议全部大写
c. 修改了/etc/profile文件后,要立刻加载修改的数据需要重载配置文件:source /etc/profile
8. Shell环境变量初始化加载原理过程
Shell登录环境初始化过程:
/etc/profile -> /etc/profile.d/*.sh -> ~/.bash_profile -> ~/.bashrcà/etc/bashrc
Shell 非登录环境初始化过程:
~/.bashrc -> /etc/bashrc ->~/etc/profile.d/*.sh
$0用于获取当前shell环境类型,bash代表非登录环境,-bash代表shell登录环境
四.shell字符串变量
1. 三种方式单引号,双引号,无引号
区别:单引号:原样输出,双引号:会解析变量,无引号:空格之后的字符会认为是命令**
输出字符个数:${#变量名}
2. 字符串截取
<