shell index

什么是 shell 脚本

当命令或者程序语句写在文件中,我们执行文件,读取其中的代码,这个程序文件就称之为 sh 脚本。

在 shell 脚本里定义多条 linux 命令以及循环控制语句,然后将这些 Linux 命令一次性执行完毕,执行脚本文件的方式称之为,非交互式方式。

  • windows 中存在 *.bat 批处理脚本

  • Linux 中常用 *.sh 脚本文件

shell 脚本规则

在 Linux 系统中,shell 脚本或者称之为(bash shell 程序)通常都是 vim 编辑,由 Linux 命令、bash shell 指令、逻辑控制语句和注释信息组成。

Shebang

计算机程序中,shebang 指的是出现在文本文件的第一行前两个字符 #!

在 Unix 系统中,程序会分析 shebang 后面的内容,作为解释器的指令,例如

  • 以 #!/bin/sh 开头的文件,程序在执行的时候会调用/bin/sh,也就是bash解释器

  • 以 #!/usr/bin/python 开头的文件,代表指定python解释器去执行

  • 以 #!/usr/bin/env 解释器名称,是一种在不同平台上都能正确找到解释器的办法

注意事项:

  • 如果脚本未指定 shebang,脚本执行的时候,默认用当前 shell 去解释脚本,即$SHELL

  • 如果shebang指定了可执行的解释器,如/bin/bash/usr/bin/python,脚本在执行时,文件名会作为参数传递给解释器

  • 如果 #! 指定的解释程序没有可执行权限,则会报错 bad interpreter: Permission denied”。

  • 如果 #! 指定的解释程序不是一个可执行文件,那么指定的解释程序会被忽略,转而交给当前的 SHELL 去执行这个脚本。

  • 如果 #! 指定的解释程序不存在,那么会报错 bad interpreter: No such file or directory”。

  • #! 之后的解释程序,需要写其绝对路径(如:#!/bin/bash),它是不会自动到$PATH 中寻找解释器的。

  • 如果你使用“bash test.sh“这样的命令来执行脚本,那么 #! 这一行将会被忽略掉,解释器当然是用命令行中显式指定的 bash。

脚本注释,脚本开发规范

  • 在 sh 脚本中,#后面的内容代表注释掉的内容,提供给开发者或使用者观看,系统会忽略此行

  • 注释可以单独写一行,也可以跟在命令后面

  • 尽量保持爱写注释的习惯,便于以后回顾代码的含义,尽量使用英文、而非中文

脚本语言

she 脚本语言属于一种弱类型语言 无需声明变量类型,直接定义使用

强类型语言,必须先定义变量类型,确定是数字、字符串等,之后再赋予同类型的值

centos7 系统中支持的 shel 情况,有如下种类

[root@centos7 ~] cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/cshs

Shell 的优势

虽然有诸多脚本编程语言,但是对于 Linux:操作系统内部应用而言,shell 是最好的工具,linux 底层命令都支持 shell 语句,以及结合三剑客(grep、sed、awk)进行高级用法。

  • 擅长系统管理脚本开发,如软件启停脚本、监控报警脚本、日志分析脚本

每个语言都有自己擅长的地方,扬长避短,达到高效运维的目的是最合适的。

#Linux 默认 shell
[root@centos7 ~] echo $SHELL
/bin/bash