Shell(一):Shell概述

1、Shell简介

  Shell提供用户与内核进行交互操作的接口,接收用户输入的命令,并把它送入内核区执行。

  0

  内核是Linux系统的心脏,从开机自检是就驻留在计算机的内存中,直到计算机关闭为止,而用户的应用程序存储在计算机的硬盘上,仅当需要时才被调入内存。

Shell独立于内核,是连接内核与应用程序的桥梁,输入设备读取命令,再将其转为计算机可以理解的机械码,Linux内核才能执行该命令。

2、shell的作用

  shell是一块包裹着系统核心的壳,处于操作系统的最外层,与用户直接对话,把用户,把用户的输入,解释给操作系统,然后处理操作系统的输出结果,输出到屏幕给与用户看到结果。

  0

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

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脚本的起始符号。

  "#!"符号是指定一文件类型的特殊标记,告诉Linux系统该文件执行需要指定一个解释器。
  "#!"符号之后是一个路径名,指明了解释器在系统中的位置,对于一般的Shell脚本而言,解释器是bash,也可以的sh。
  Shell脚本的第一行通常有两种写法:
#!/bin/bash
# 或
#!/bin/sh

  Shell脚本中,"#"符号是注释符,后面直到本行结束的所有内容都是注释,脚本在执行时不会执行注释。

  命令(command)是Shell脚本的最基本元素,命令通常由命令名称、选项和参数三部分组成,三部分之间用空格键或Tab键分隔。

7、Shell脚本执行

  要执行Shell脚本,需要使当前用户具备执行该脚本文件的权限,即x权限。新建的脚本当前用户只有读写权限,没有执行权限。

0

  给当前用户授权并执行脚本:

0

  在Shell脚本未被赋予执行权限时,执行脚本报错 Permission denied。

  ./*.sh # bash解释器执行shell脚本 sh *.sh # sh解释器执行shell脚本

 
posted @ 2023-10-12 17:23  无虑的小猪  阅读(77)  评论(0编辑  收藏  举报