《Shell 编程》01_Shell 脚本初步入门
标签(空格分隔): Shell
文章目录
1.1 什么是 Shell
- Shell 是一个命令解释器。它的作用是解释执行用户输入的命令及程序等,用户每输入一条命令,Shell 就解释执行一条。这种从键盘一输入命令,就可以立即得到回应的对话方式,称为交互的方式。
1.2 什么是 Shell 脚本
- 当命令或程序语句不在命令行下执行,而是通过一个程序文件来执行时,该程序就被称为 Shell 脚本。如果在 Shell 脚本里内置了很多条命令、语句及循环控制,然后将这些命令一次性执行完毕,这种通过文件执行脚本的方式称为非交互的方式。
1.3 脚本语言的种类
1.3.1 Shell 脚本语言的种类
-
Shell 脚本语言弱类型语言(无须定义变量的类型即可使用),在 Unix/Linux 中主要有两大类 Shell:Bourne Shell 和 C Shell。
-
Shell
- Bourne Shell
- Bourne Shell(sh)
- Korn Shell(ksh)
- Bourne Again Shell(bash)
- C Shell
- csh
- tcsh
- Bourne Shell
1.3.2 其他常用的脚本语言种类
- PHP 语言
- Perl 语言
- Python 语言
1.4 Shell 脚本的建立和执行
1.4.1 Shell 脚本的建立
1)脚本开头(第一行)
#!/bin/bash
-
其中,开头的 “#!” 字符又称为幻数,在执行 bash 脚本的时候,内核会根据 “#!” 后的解释器来确定该用哪个程序解释这个脚本中的内容。
-
这一行必须位于每个脚本顶端的第一行,如果不是第一行则为脚本的注释行。
-
CentOS 和 Red Hat Linux 下默认的 Shell 均为 bash。因此,在写 Shell 脚本的时候,脚本的开头即使不加 “#!/bin/bash” ,它也会交给 bash 解释。所以如果要指定解释器,最好加上相应的开头解释器语言标识。
2)脚本注释
- # 后面的内容表示注释。
1.4.2 Shell 脚本的执行
-
当 Shell 脚本运行时,它会先查找系统环境变量 ENV,该变量指定了环境文件,在加载了上述环境变量文件后,Shell 就开始执行 Shell 脚本中的内容。
-
Shell 脚本是从上至下、从左至右依次执行每一行的命令和语句的。如果在 Shell 脚本中遇到子脚本(即脚本嵌套)时,就会先执行子脚本的内容,完成后再返回父脚本继续执行父脚本内后续的命令和语句。
-
通常情况下,在执行 Shell 脚本时,会像系统内核请求启动一个新的进程,以便在该进程中执行脚本的命令及子 Shell 脚本。
-
Shell 脚本的执行通常可以采用以下几种方式:
1)bash script-name 或 sh script-name :当脚本文件本身没有可执行权限或脚本文件开头没有指定解释器时需要使用的方法。
2)path/script-name 或 ./script-name :脚本需要有可执行权限,在绝对路径或相对路径直接执行脚本。
3)source script-name 或 . script-name :读入或加载指定的 Shell 脚本文件(如 son.sh),然后,依次执行指定的 Shell 脚本文件 son.sh 中的语句。这些语句将在当前父 Shell 脚本 father.sh 进程中运行(其他几种模式都会启动新的进程执行子脚本)。因此,使用 source 或 . 可以将 son.sh 自身脚本中的变量值或函数等的返回值传递到当前父 Shell 脚本中使用。
4)sh<script-name 或 cat script-name|sh :将所有字符串拼接为命令的形式,然后经由管道交给 bash 操作。
1.5 Shell 脚本开发的基本规范及习惯
规范:
1)Shell 脚本的第一行是指定脚本解释器,通常为:
#!/bin/bash
2)Shell 脚本的开头会加版本、版权等信息:
# Date: 22:00 2018-10-22
# Author: Created by ylt
# Blog: https: //blog.csdn.net/weixin_42061048
# Description: This scripts function is ...
# Version: 1.1
3)Shell 脚本中尽量不使用中文。
4)Shell 脚本的命名应以 .sh 为扩展名。
5)Shell 脚本应存放在固定的路径下。
书写习惯:
1)成对的符号应一次性写出来,然后退格在符号里增加内容,以防止遗漏。这些成对的符号包括:
{} [] '' `` ""
2)中括号 [] ;两端至少要有 1 个空格。
3)对于流程控制语句,应一次性将格式写完,再添加内容。
4)通过缩进让代码更易读。
5)对于常规变量的字符串定义变量值应加双引号,并且等号前后不能有空格,需要强引用的(指所见即所得的字符引用)则用单引号,如果是命令的引用,则用反引号。
6)脚本中的双引号、单引号及反引号必须为英文状态下的符号。