Shell 是一种脚本语言,Shell 语言为解释型语言,需要解释器(解释程序)来翻译执行。

1. #! (shebang)

Shell 文件第一行中的 “#!” 后面写一个绝对路径,来指向执行当前脚本文件的解释器,操作系统的程序加载器会执行这个解释器,并将当前文件所在的路径作为参数,传递给解释器,去解释执行。写法如下所示:

  1. 使用 bash 解释器来解释执行当前的脚本文件
  2. #!/bin/bash

默认系统是不会自动去环境变量中找解释器的, 如果想去系统的环境变量中去查找,可以使用 env , 如下所示:

  1. 在环境变量中找pyhon 如果环境变量里面设置了多个pyhon版本,下面的命令会使用找到的第一个pyhon版本
  2. #!/usr/bin/env pyhon
  3. 也可以指定搜索目录。在/usr/local/bin、/usr/bin${PATH}环境变量这三个目录中搜索python
  4. #!/usr/bin/env -S -P/usr/local/bin:/usr/bin:${PATH} python
  5. 也可以这样来指定使用环境变量中哪个pyhon版本
  6. #!/usr/bin/env pythonX.x

注意点:

  • 如果执行当前Shell 文件时显示指定了解释器,如 bash test.sh , 则会忽略当前 shebang 中指向的解释器
  • 如果没有写 “#!” ,则会使用当前默认的解释器来执行。echo ${SHELL} 可以打印出当前使用的是哪个Shell
  • 如果指向的不是一个可执行程序,那么会忽略指定的解释器,而使用默认的解释器
  • 如果指向的解释器没有可执行权限,则会报错“bad interpreter:Permission denied”
  • 如果指向的解释器不存在,则会报错“bad interpret : No such file ordirectory”

2.注释

冒号(:) 作为内建命令:占位符、参数扩展和重定向

  1. # echo "单行注释"
  2. : << !
  3. 多行注释方式一:
  4. echo "多行注释"
  5. !
  6. : << COMMENT
  7. 多行注释方式二:
  8. echo "多行注释"
  9. COMMENT
  10. : '
  11. 多行注释方式三:
  12. echo "多行注释"
  13. '
  14. if false; then
  15. 多行注释方式四:
  16. echo "多行注释"
  17. fi
  18. ((0)) && {
  19. 多行注释方式五:
  20. echo "多行注释"
  21. }

3.内建常量

  • HOME:代表用户主文件夹。
  • SHELL:当前使用的是那个SHELL
  • PATH:执行文件查找路径, ```bash echo ${HOME} echo ${SHELL} echo ${PATH}

``` image.png