博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux 脚本详解,Shell脚本编程详解
阅读量:5010 次
发布时间:2019-06-12

本文共 3322 字,大约阅读时间需要 11 分钟。

通过前面内容的学习,相信读者已经掌握了 Linux 系统和命令行的基础知识。从本节开始,我将带领读者学习关于 Shell 脚本编程的知识,读者在编写脚本之前必须了解在本章中介绍的基础知识。

Shell 脚本包括命令、变量设置、循环、控制、判断以及逻辑运算等。脚本在运行时需要使用相应的解释器以翻译脚本中存放的信息,从而最终被成功地执行。脚本的编写格式不同即需要使用的解释器也不同,例如编写的 Shell 脚本代码,需要使用 Bash 程序告诉系统应该如何执行这个 Shell 脚本。

常见的脚本有 Shell 脚本、Java 脚本、PHP 脚本、Python 脚本等,其中 Shell 脚本最简单,接下来就主要介绍 Shell 脚本。

Shell脚本格式

每个脚本都遵循一定的规则,Shell 脚本也一样。Shell 脚本文件的格式如下:

#!/bin/bash

# Copyright (c) http://www.weixueyuan.net/linux/

#

#Data:2020-08-26

#Version:0.1

echo "Hello,World!"

exit 0

其中,各行的含义为:

第 1 行(必须写明):指定脚本使用的 Shell。“#!/bin/Bash”声明文件内的语法使用 Bash 的语法,当这个程序被执行时,加载 Bash 的相关环境配置文件(一般是 non-login Shell 中的 ~/.Bashrc 文件)。

第 2 行(可写可不写):程序内容的说明。Shell 脚本中,“#”用作批注(除第一行的“#!”外),Shell不会解释以“#”开头的行(除第一行 Bash 声明外)。

第 4~5 行:主要环境变量的声明(可写可不写)。

第 7 行:脚本的程序部分。

第 8 行:程序执行结束,回传一个数值给系统通知执行的结果(默认命令执行成功返回数值 0)。

上面展示的脚本文件,是一个完整的脚本应该具有的基本框架。第一行“#!”的作用是指定该脚本程序的命令解释器,即 /bin/Bash。脚本在执行后,系统内核读取“#!”后面的路径查找解释器,最终使用该解释器翻译脚本代码并运行。脚本文件中“#”后面的部分为注释,在脚本程序执行时,该部分会被忽略,这些注释为代码的编写与阅读提供辅助信息。接下来就是脚本的代码部分,这些代码默认会按顺序依次被执行,但通过控制语句控制执行顺序时除外。

创建Shell脚本

Shell 脚本文件是存放各种命令组合的一个简单的文本文件,当需要运行这些命令时,只需要运行这个文本文件就可以了。

创建脚本文件的步骤如下:

1) 使用 touch 命令创建一个空的文件夹,命名为 hello.sh。在终端页面输入命令如下:

[root@bogon ~]# touch hello.sh

2) hello.sh 文件创建完成之后,需要使用 vim 编辑器打开该文件,输入命令如下:

[root@bogon ~]# vim hello.sh

进入 vim 编辑器之后,输入 i 命令,切换到插入模式进行编辑,如图 1 所示。

504d73577a30ac2b2b3d629e7970c3f2.gif

图 1 编辑 hello.sh

3) 在创建 Shell 脚本文件时,注意在上一小节中提到的脚本格式,必须在文件的第一行指定要使用的 Shell,格式为:

#!/bin/bash

在通常的 Shell 脚本文件中,“#”用作注释行,Shell 不会处理 Shell 脚本中的注释行。但是 Shell 脚本文件的第一行特殊,“#”后面的“!”会告诉 Shell 需要使用哪个 Shell 来运行脚本。

4) 在指定了 Shell 之后,就可以在文件的每一行中输入命令,然后按 Enter 键。之前提到过注释可使用“#”添加。输入命令如图 2 所示。

3fd3add318afa88c5d417bd56b87ac3a.gif

图 2 写入 Shell 脚本内容

5) 脚本内容输入完成之后,按键盘的 Esc 键退出插入模式;输入“:wq”命令,保存并退出,名为 hello.sh 的脚本文件创建完成。

注意,根据需要,可以使用分号将两个命令放在一行上,但在 Shell 脚本中,可以在独立的行中书写命令。Shell 会按根据命令在文件中出现的顺序进行处理。另外需要注意另有一行也以“#”开头,并添加了一个注释。Shell 不会解释以“#”开头的行(除了以“#!”开头的第一行)。注释用来说明脚本主要做了什么,便于读者理解。

Shell脚本运行方式

脚本在编写完成之后,需要运行并实现脚本程序功能。脚本的执行方式有很多种,但各种方式运行的效果也会不同。常见的运行脚本的方式有以下几种:

以 sh(Bash)进程来执行脚本文件(用户不必拥有对脚本文件的权限),可以在子进程中执行。在终端页面中输入命令如下:

[root@bogon ~]# sh hello.sh

Hello,World!

使用 sh 进程来执行脚本文件时通常有以下选项:

1) sh -x:实现 Shell 脚本逐条语句的跟踪,如下所示:

[root@bogon ~]# sh -x hello.sh

+ echo 'Hello,World!'

Hello,World!

+ exit 0

加号后的数据代表命令串。

2) sh -n:不执行脚本,仅进行语法的检查,如下所示:

[root@bogon ~]# sh -n hello.sh

[root@bogon ~]#

3) sh -v:执行脚本前,先将脚本的内容输出到屏幕上,如下所示:

[root@bogon ~]# sh -v hello.sh

#!/bin/bash

# Copyright (c) http://www.weixueyuan.net/linux/

#

#Data:2020-08-26

#Version:0.1

echo "Hello,World!"

Hello,World!

exit 0

4) 通过绝对或相对路径来执行脚本文件,用户必须拥有对脚本文件的权限。

Linux 系统中的一切都是文件。后缀名“.sh”表示该文件是一个脚本文件,但并不代表该文件是可以被用户执行的。文件是否可以被执行取决于用户是否拥有对该文件的执行权限,同时是在子进程中执行。

赋予权限,执行脚本的过程如下所示:

[root@bogon ~]# ll hello.sh

-rw-r--r--. 1 root root 121 Aug 26 04:59 hello.sh

[root@bogon ~]# ./hello.sh

bash: ./hello.sh: Permission denied

[root@bogon ~]# chmod a+x hello.sh

[root@bogon ~]# ll hello.sh

-rwxr-xr-x. 1 root root 121 Aug 26 04:59 hello.sh

[root@bogon ~]# ./hello.sh

Hello,World!

[root@bogon ~]#

5) 将脚本文件所处的目录添加到 PATH 环境变量中,通过输入脚本文件名来直接运行,该种执行方式也要求用户必须拥有对脚本文件的权限,在子进程中进行执行操作。

脚本所在目录添加到 PATH 变量中的过程如下所示。

[root@bogon ~]# echo $PATH

/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/root/bin

[root@bogon ~]# pwd

/root

[root@bogon ~]# PATH=${PATH}:/root

[root@bogon ~]# hello.sh

Hello,World!

[root@bogon ~]#

6) 通过 source 命令或小数点“.”来执行脚本文件,该方式在父进程中执行。使用命令如下:

[root@bogon ~]# source hello.sh

[root@bogon ~]# . hello.sh

注意“.”与脚本之间有空格。

转载地址:http://wqggp.baihongyu.com/

你可能感兴趣的文章
红黑树-想说爱你不容易
查看>>
【题目】英文字符进行频率的统计,直方图输出
查看>>
LeetCode-Binary Tree Level Order Traversal
查看>>
COM组件开发实践
查看>>
yii2 源码分析1从入口开始
查看>>
浅谈网站推广
查看>>
Away3D基础之摄像机
查看>>
Leetcode 128. Longest Consecutive Sequence
查看>>
程序员必须知道的几个Git代码托管平台
查看>>
导电塑料入梦来
查看>>
C# 线程手册 第五章 扩展多线程应用程序 - 什么是线程池
查看>>
笔记1126ASP.NET面试题(转)
查看>>
考研路茫茫--单词情结 - HDU 2243(AC自动机+矩阵乘法)
查看>>
HTTP运行期与页面执行模型
查看>>
tableView优化方案
查看>>
近期思考(2019.07.20)
查看>>
Apache2.4使用require指令进行访问控制
查看>>
冗余关系_并查集
查看>>
做最好的自己(Be Your Personal Best)
查看>>
如何搭建github+hexo博客-转
查看>>