本帖最后由 风精灵 于 2025-11-25 09:40 编辑

1.Shell与Shell脚本
        Shell是一个命令解释器,可以理解为一种应用程序,它的作用是解释执行用户输入的命令及程序等,用户每输入一条命令,Shell就解释执行一条。Shell存在于操作系统的最外层,负责与用户直接对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,然后输出到屏幕返回给用户。
       当我们需要对操作系统进行多条指令操作,且在某种场景下需要要多次重复,每次都需要一条指令一条指令输入,过于冗余,我们将这些指令操作集合到一个文件中,每次操作执行一次这个文件就可以达到目的,这个文件就称之为Shell脚本。
      Shell脚本也叫做Shell Scripts,它就是利用Shell的功能所写的一个程序文件,它其中包含了很多内置指令,还有控制语句,简单来说Shell脚本就是一系列的Shell指令加上控制结构。
      Shell脚本可以依次执行多条Shell指令,通过循环和分支等特殊用法还可以完成较复杂的工作,提高工作效率。

2.Shell脚本的特性

2.1Sha-Bang
        Sha-Bang 是一个由井号和叹号构成的字符序列“#!”,文件在被读取的时候,内核通过这个特定的组合开头识别出这是一个需要运行解释器的脚本文件,并且根据约定将其后面的字符在读到换行以前解释为该脚本需要的解释器所在的路径。解释器就是Shell,它的作用就是解释执行用户输入的命令及程序等,用户每输入一条命令,Shell就解释执行一条命令。
      在该文档中使用的解释器是:#!/bin/bash
     在开发环境当中可以搜索到解释器   
elf@ubuntu:~$ ls /bin/bash

图片1.png

       这是比较常用的shell解释器了,除此之外还有sh、ksh、csh和tcsh等。通过cat命令可以查询到系统支持的shell解释器。
elf@ubuntu:~$ cat /etc/shells
图片2.png
        一般说来,任何一个脚本程序都应以其为起始,也就是位于脚本文件中的第一行,并且顶格书写。脚本文件中只有第一行的Sha-Bang(#!)会起作用,其余的将会视为注释。

2.2 # 注释
        以‘#’开头的行是注释行,不会被解释器执行。注释可以出现在命令结束之后,注释也可以跟在行首的空格后面。这里需要注意的是命令不能跟在同一行的注释后面,因为没有办法可以终止注释,如果使用命令请使用新行。
图片3.png
      echo语句中的引号或者转义‘#’不会作为注释的开头,‘#’也会出现在某些参数替换结构和数值常量表达式当中。
图片4.png

3 Shell脚本编写和执行
3.1 编写
建立一个myshell.sh文件,使用vim进行编辑。
elf@ubuntu:~/work/example/scrip_test$ vim myshell.sh
在该文件中添加:
#!/bin/bash
echo "my first shell !"
图片5.png
其中#!/bin/bash用来指定使用的shell应用;echo "my first shell !"为脚本中编写的命令代码。



3.2 执行
在执行脚本时,脚本必须要有执行权限,首先给脚本赋予可执行权限:
elf@ubuntu:~/work/example/scrip_test$ sudo chmod a+x myshell.sh
图片6.png
执行脚本的方式一般有以下4种:
1. 在脚本当前目录进行执行
直接使用./myshell.sh:
图片7.png
2. 在绝对路径下执行
使用pwd命令查看当前路径,并使用绝对路径执行myshell.sh:
图片8.png
3. shell应用程序执行
shell脚本也可直接使用shell应用程序进行执行。我们前面说过,我们指定的shell应用为/bin/bash,所以,我们使用bash程序直接执行myshell.sh,或者/bin/bash myshell.sh:
图片9.png
如果使用shell应用进行执行,那么在脚本编写时,可以不用在第一行指定shell应用程序;此外,使用shell应用进行脚本执行时,脚本文件可以不被赋予可执行权限。
图片10.png
图片11.png
4. 使用source或小数点(.)执行
使用source或 . (.后边有空格)执行,是在当前shell环境下读取并执行shell脚本,可以不被赋予执行权限。
图片12.png
与前几种执行方式不同的是,使用该方式执行后,脚本中定义的变量不会释放。例如,我在脚本中增加一个变量var=235,变量的定义具体细节,可以参考后续章节。
#!/bin/bash
echo "my first shell !"
var=235
图片13.png
使用其他方式执行后,使用echo ${var}命令将变量值输出进行查看,如下图,可以看到没有输出var的值;然后再使用source或. 进行脚本执行,再次查看var变量的值,可以看到成功输出235,该方式执行脚本后的变量,没有释放,所以我们经常使用source来配置shell环境变量,后边讲开发板交叉编译工具设置时会使用到。
图片14.png
图片15.png
        Shell脚本是从上至下依次执行每一行的命令及语句的,即执行完了一个命令后再执行下一个,如果在Shell脚本中遇到子脚本(即脚本嵌套)时,就会先执行子脚本的内容,完成后再返回父脚本继续执行父脚本内后续的命令及语句。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Powered by Discuz! X3.5  © 2001-2013 Comsenz Inc.