文章目录
什么是内核:
内核是多用户多任务的操作系统中的一个程序调度器,决定程序什么时候开始,什么时候结束,及优先级的大小;但内核不能直接与第三方软件进行交流,直接交流,内核所控制的程序会发生错乱。
什么是shell:
shell是内核的保护层,命名为壳,壳中内容为内核;由于内核不能直接与第三方软件交流,需要shell这个保护罩来保护,shell会过滤掉坏的信息,将接收到的信息传递给内核,保护内核的安全运行。本质上讲,shell就是一个桥梁,用户和内核之间建立的“友谊”,都是通过这个“桥梁完成的”,也就是我们想让内核帮我们做一些事情,首先需要将用户的指令去传递给shell,翻译成内核可以理解的一些信息,从而让内核为我们服务。
什么是脚本:
脚本:顾名思义,有脚能够跑的文本,也就是能够运行的文本。shell是能够用文本名称运行文本内容的文件;脚本中的代码是一种解释性的语言,不用编译代码:机器能够识别的代码,其依赖解释器来解释给机器,机器识别执行命令,在系统中写好就可以运行。脚本作用:记录我们在系统中操作的步骤,实现自动化的控管
1. shell脚本基础
1.1 shell 脚本执行方式
(1)不需要执行权限:
1)sh file.sh
2)source file.sh
不开启子程序,让程序在我们当前的环境中直接运行生效(. file.sh相同)
3). file.sh
(2) 需要执行权限(绝对路径):
chmod +x file.sh
./file.sh
1.2 脚本的创建
vim file.sh
用vim编写脚本
- 脚本说明参数:
参数 | 含义 |
---|---|
#!/bin/bash | 幻数 bash表示脚本运行时最先开启的程序,可更改 |
#AUTHOR | 脚本作者 |
#DATE | 脚本创作时间 |
脚本作者联系方式 | |
#VERSION | 脚本的版本 |
- 方便起见,可以在vim配置文件中编辑永久脚本说明
vim /etc/vimrc
可以编写快捷键方式,也可以编写默认方式
快捷键:map [快捷键] ms:call [函数名称] <cr>'s
##表示快捷键映射函数
默认存在:autocmd BufNewFile *.sh exec ":call [函数名]"
##表示在建立.sh结尾的新文件时,新自动会添加所写函数
1.3 脚本的调试
-
调试脚本检测错误,当我们不清楚脚本中哪里有错误时,可以通过调试的输出分析来确定错误
sh -x [脚本名称]
-
输出解释:带+号为指令,不带+为输出
2.脚本中的变量
2.1 基础概念
-
变量:在程序运行过程中他的值是允许改变的量,变量是用一串固定的字符来标识不固定的值的一种方法;变量也是一种方便的占位符,内存地址的地址符;在shell中变量是不能永久保存在系统中的,必须在文件中声明。
-
shell环境变量分为bashrc 和profile环境变量
-
查看环境中的变量:
env
-
shell中的变量用大写字母表示
2.2 shell中变量的种类
环境级变量;用户级变量;系统级变量
(1) 环境级变量:只在当前bash环境中生效,具有临时性重,重新启动,资源被回收bash变量不生效。
export 共享变量
- su student 没有切换用户的环境变量,环境变量依旧生效
su student 不切换用户环境原因:系统只会读取bashrc,加载shell的配置,不会读取profile,因此不加载系统中用户环境变量profile
(2)用户级变量:对当前用户生效
vim ~/.bash_profile
export a=x
source ~/.bash_profile
- su student 变量也不生效了,用户身份被切换
(3) 系统级变量:对系统永久生效,记录在硬盘里,不会被回收
vim /etc/profile
export a=x
source /etc/profile
2.3 变量名称的规范
变量名称中通常包含大小写字母,数字,下划线
2.4 字符的转译及变量的声明
\ | 转译单个字符 |
“” | 强引用,批量转译;不能转译"","`","!","$" |
‘’ | 弱转译,批量转译;可以转译强引用不能转译的 |
${} | 变量声明 |
- A=1
echo $Ab
echo ${A}b
\*
2.5 变量的值传递
$1 | 脚本执行命令后的第一串字符串 |
$2 | 执行命令后的第二串字符串 |
$3 | 第三串字符串 |
$# | 所有字符串的个数 |
$* | 脚本执行命令后的所有字符串,模式为“1 2 3” |
$@ | 所有字符串,模式为“1”“2”“3” |
$0 | 脚本名称 |
read:
read -p "input... " WORD ##在终端输出“input”内容,让用户输入变量WORD且输入有回显
read -s WORD ##与-p一起使用,只是用户输入没有回显
2.6 利用命令执行结果的变量设定
HOSTNAME=$(hostname) 或者 HOSTNAME=`hostname` 将命令hostname的输出设定为变量HOSTNAME
3.Linux系统中命令别名的设定
3.1 环境级命令别名设定:重新开启不生效
命令行设定: alias kan='cat'
su student
命令重命名不生效
3.2 用户级命令别名设定:对设定的用户生效,重新开启shell依旧生效
vim /root/.bashrc
编辑配置文件
alias hh='vim'
source /root/.bashrc
让设定生效
3.3 系统级命令别名设定:对所有用户生效,重新开启shell依旧生效
vim /etc/bashrc
编辑系统配置文件
alias xixi='df'
source /etc/bashrc
让设定生效
4.$? 退出值
- 退出值范围:0-255
- 查看退出值
echo $?
- 命令没有错误时退出值为0,在不设定exit退出值的情况下,命令执行有错误报错,则退出值不为0
- 退出值的设定:在脚本中直接设定 exit 66 设定退出值为66
5. 系统读取目录的设定
(1) 查看系统自动识别的目录: echo $PATH
(2)设定系统自动识别的目录:
vim ~/.bash_profile
编辑profile文件
10 PATH=$PATH:$HOME/bin :/mnt ##添加系统自动识别/mnt目录
source ~/.bash_profile
让设定生效
- 设定后,/mnt下的脚本,在被给予执行权力后,可以直接用文件名执行