Shell(一):Shell概述
1、Shell简介
Shell提供用户与内核进行交互操作的接口,接收用户输入的命令,并把它送入内核区执行。
![0](https://img2023.cnblogs.com/blog/1680081/202310/1680081-20231012170932165-1140561458.png)
内核是Linux系统的心脏,从开机自检是就驻留在计算机的内存中,直到计算机关闭为止,而用户的应用程序存储在计算机的硬盘上,仅当需要时才被调入内存。
Shell独立于内核,是连接内核与应用程序的桥梁,输入设备读取命令,再将其转为计算机可以理解的机械码,Linux内核才能执行该命令。
2、shell的作用
shell是一块包裹着系统核心的壳,处于操作系统的最外层,与用户直接对话,把用户,把用户的输入,解释给操作系统,然后处理操作系统的输出结果,输出到屏幕给与用户看到结果。
![0](https://img2023.cnblogs.com/blog/1680081/202310/1680081-20231012170932259-1059821052.png)
3、什么是Shell脚本
Shell脚本就是由Shell命令组成的文件,这些命令都是可执行程序的名字,脚本通过解释器解释运行,不用编译即可运行。
Windows -> *.bat文件,Linux -> *.sh 文件
shell脚本适合处理纯文本类型数据,如配置文件、文本、网页文件等等。
4、Shell脚本规范
4.1、Shebang
计算机程序中,shebang 指的是出现在文本文件的第一行前两个字符 -> #!
在Unix系统中,程序会分析Shebang后面的内容,作为解释器的指令,如:
·以 #!/bin/sh(/bin/bash) 开头的文件,程序执行的时候回调用 /bin/sh -> bash解释器
·以 #!/user/bin/python 开头的文件,代表指定 python解释器去执行
·以 #!/user/bin/env 解释名称,是一种在不同平台上都能正确找到解释器的办法。
注意事项:
·如果脚本未指定shebang,脚本执行时,默认用当前shell去解释脚本,即$SHELL;
·如果shebang指定了可执行解释器,脚本在执行时,文件名会作为参数传递给解释器;
·如果#! 指定的解释程序没有可执行权限,会报错"bad interpreter: Permission denied";
·如果#! 指定的解释程序不是一个可执行文件,则执行解释程序会被忽略,转而交给当前的SHELL去执行这个脚本;
·如果#! 指定的解释程序不存在,会报错"bad interpreter: No such file or directory";
·#! 之后的解释程序,需要写器绝对路径,它不会自动到$PATH中寻找解释器;
·若使用"bash *.sh"的命令来执行脚本,则#!这一行会被忽略,解释器用命令行中显示指定的bash。
4.2、Shell语言定义
shell语言定义的变量,数据类型默认都是字符串类型,shell是弱类型编程语言。
弱类型编程语言:在定义变量的时候,不需要主动声明该类型,如shell
强类型编程语言:需要指定变量的数据类型,变量的值必须与实际的类型对应的上,否则会报错,如golang、c语言。
5、Bash特性
5.1、bash是什么
bash是一个命令处理器,运行在文本窗口中,可以从文件中读取linux命令,并支持通配符、管道、命令替换、条件判断等逻辑控制语句。
5.2、bash命令
// 查看历史命令数量
[root@centos01 shell_program]# echo $HISTSIZE
1000
// 存放用户执行的历史命令,写入文件
[root@centos01 shell_program]# echo $HISTFILE
/root/.bash_history
// history 命令
-c 清空历史命令
-r 恢复历史
// 调用历史记录命令
// !历史id,快速执行历史命令
// !! -> 执行上次的命令
[root@centos01 shell_program]# !5
ls
hello.sh
从历史文件中恢复历史
![0](https://img2023.cnblogs.com/blog/1680081/202310/1680081-20231012170932050-1222557875.png)
5.3、bash命令的区别
·bash *.sh、./*.sh -> 这两种执行方式是在子shell中执行
·. *.sh、source *.sh -> 这两种执行方式是在当前shell中执行
新建sec.sh脚本,命令行如下:
cd /opt
ls
以下是执行上述四种命令的情况:
1 // 子shell中执行,父shell目录未变 2 [root@centos01 shell_program]# bash sec.sh 3 shell_program 4 5 // 子shell中执行,父shell目录未变 6 [root@centos01 shell_program]# ./sec.sh 7 shell_program 8 9 // 当前shell中执行,目录改变 10 [root@centos01 shell_program]# . sec.sh 11 shell_program 12 [root@centos01 opt]# cd shell_program/ 13 14 // 当前shell中执行,目录改变 15 [root@centos01 shell_program]# source sec.sh 16 shell_program 17 [root@centos01 opt]#
6、Shell脚本的基本元素
Shell脚本示例:
#!/bin/bash
# 第一个shell程序
echo "第一个shell脚本"
第一行"#!/bin/bash"中,"#!"符号被称为"Sha-bang"符号,是Shell脚本的起始符号。
#!/bin/bash
# 或
#!/bin/sh
Shell脚本中,"#"符号是注释符,后面直到本行结束的所有内容都是注释,脚本在执行时不会执行注释。
7、Shell脚本执行
要执行Shell脚本,需要使当前用户具备执行该脚本文件的权限,即x权限。新建的脚本当前用户只有读写权限,没有执行权限。
给当前用户授权并执行脚本:
在Shell脚本未被赋予执行权限时,执行脚本报错 Permission denied。
./*.sh # bash解释器执行shell脚本 sh *.sh # sh解释器执行shell脚本