Bash Shell 脚本新手指南(一)

开发 前端
如标题所示,本文将涵盖面向初学者的 Bash Shell 脚本知识。虽然本文没有回顾 Bash 的历史,但是有很多资源能够便于读者了解相关内容。我们会从了解一些非常基本的概念开始,然后再将相关知识综合起来。

如标题所示,本文将涵盖面向初学者的 Bash Shell 脚本知识。虽然本文没有回顾 Bash 的历史,但是有很多资源能够便于读者了解相关内容,读者也可以直接访问 https://www.gnu.org/software/bash/ 上的 GNU 项目。我们会从了解一些非常基本的概念开始,然后再将相关知识综合起来。

创建脚本文件

首先来创建一个脚本文件。我们要确保当前目录为家目录。

  1. cd ~ 

在主目录中创建示例文件。文件名可以是任意名称,本文使用 learnToScript.sh 作为文件名。

  1. touch learnToScript.sh 

此时家目录中就生成了一个名为 learnToScript.sh 的文件。输入以下命令以检验该文件是否存在,还可以注意到其权限是 -rw-rw-r–。

  1. [zexcon@trinity ~]$ ls -l 
  2. total 7 
  3. drwxr-xr-x. 1 zexcon zexcon   90 Aug 30 13:08 Desktop 
  4. drwxr-xr-x. 1 zexcon zexcon   80 Sep 16 08:53 Documents 
  5. drwxr-xr-x. 1 zexcon zexcon 1222 Sep 16 08:53 Downloads 
  6. -rw-rw-r--. 1 zexcon zexcon   70 Sep 17 10:10 learnToScript.sh 
  7. drwxr-xr-x. 1 zexcon zexcon    0 Jul  7 16:04 Music 
  8. drwxr-xr-x. 1 zexcon zexcon  318 Sep 15 13:53 Pictures 
  9. drwxr-xr-x. 1 zexcon zexcon    0 Jul  7 16:04 Public 
  10. drwxr-xr-x. 1 zexcon zexcon    0 Jul  7 16:04 Videos 
  11. [zexcon@trinity ~]$ 

正式开始之前还有一件事要做。可以试一下在没有写入任何内容的情况下执行脚本,命令行输入以下内容:

  1. ./learnToScript.sh 
  1. [zexcon ~]$ ./learnToScript.sh 
  2. bash: ./learnToScript.sh: Permission denied 

提示权限被拒绝,因为该文件没有执行权限。所以你需要更改文件的权限才能执行脚本。

假定我们已经了解了权限相关知识,回到终端更改 learnToScript.sh 文件,增加执行权限。输入以下内容:

  1. chmod 755 learnToScript.sh 
  1. [zexcon@trinity ~]$ ls -l 
  2. total 7 
  3. drwxr-xr-x. 1 zexcon zexcon   90 Aug 30 13:08 Desktop 
  4. drwxr-xr-x. 1 zexcon zexcon   80 Sep 16 08:53 Documents 
  5. drwxr-xr-x. 1 zexcon zexcon 1222 Sep 16 08:53 Downloads 
  6. -rwxr-xr-x. 1 zexcon zexcon   70 Sep 17 10:10 learnToScript.sh 
  7. drwxr-xr-x. 1 zexcon zexcon    0 Jul  7 16:04 Music 
  8. drwxr-xr-x. 1 zexcon zexcon  318 Sep 15 13:53 Pictures 
  9. drwxr-xr-x. 1 zexcon zexcon    0 Jul  7 16:04 Public 
  10. drwxr-xr-x. 1 zexcon zexcon    0 Jul  7 16:04 Videos 
  11. [zexcon@trinity ~]$ 

好的,现在一切准备就绪,你已经获得了 learnToScript.sh 命令的读取、写入和执行权限 (-rwxr-xr-x)。

编辑脚本文件

下面的内容需要你熟悉 vim 或其他类似的文本编辑器,本文选用 vim。在命令提示符下输入以下内容:

  1. vim learnToScript.sh 

这会打开一个空的文本文件,里面有一堆波浪号。键盘输入 i 将进入插入模式。通过查看终端窗口的左下角,你可以确认它处于该模式。(友情推荐,nano 编辑器也很不错。)

接下来我们要确保文件被正确的解释器识别。因此,输入 #! 和 bash 的目录 /bin/bash:

  1. #!/bin/bash 

本文教程步骤的最后一件事是保存文档。按 Esc 退出输入模式,然后按 Shift+:。在冒号处输入 wq,按下回车键,就会写入(w)文件并退出(q)vim 编辑器。

使用 vim 时要记住,要想写入文档,就需要输入 i,此时你会在底部看到 –INSERT–。要保存文档,就需要按 Esc 退出输入模式,然后按 Shift+:,输入 w 写入文件;或者按 Esc,然后 Shift+: 输入 q,实现退出而不保存;或者将 wq 连在一起,可以实现写入并关闭文件。Esc 本身就只是退出插入模式。你可以在其 官方网站 或 教程网站 上找到更多关于 vim 的信息。

开始正式写脚本

echo 命令

echo 命令用于向终端返回一些信息,可以使用单引号、双引号或不使用引号。那么让我们用一个传统的 Hello World 来试试它!

  1. #!/bin/bash 
  2. echo Hello World! 
  3. echo 'Hello World!' 
  4. echo "Hello World!" 
  1. [zexcon ~]$ ./learnToScript.sh 
  2. Hello World! 
  3. Hello World! 
  4. Hello World! 
  5. [zexcon ~]$ 

注意,上述三行得到了相同的结果。使用单引号、双引号或不使用引号的结果不是一定相同的,但在这个基本脚本中确实得到了同样的结果。在某些情况下,引号的类型不同会导致结果差异。至此恭喜你编写了第一个 Bash 脚本。当你继续创建更多脚本并放飞你的想法时,可能会需要了解以下更多的知识。

命令替换 $( ) 和 ` `

命令替换可以实现以下效果:获取在命令行执行命令的结果,并将该结果写入变量。例如,如果在命令提示符下输入 ls,可以获得当前工作目录的列表。我们用这个命令来实践一下。命令替换选项有两个,请注意:第一个选项使用键盘左侧 Tab 键上方的反引号。它与波浪号 ~ 在一个键位上。第二个选项使用 shell 变量。 

  1. #!/bin/bash 
  2. command1=`ls` 
  3. echo $command1 
  4. command2=$(ls) 
  5. echo $command2 
  1. [zexcon ~]$ ./learnToScript.sh 
  2. Desktop Documents Downloads learnToScript.sh Music Pictures Public snap Videos 
  3. Desktop Documents Downloads learnToScript.sh Music Pictures Public snap Videos 
  4. [zexcon ~]$ 

注意变量、等号和命令开头之间不要有空格。使用这两个选项得到的结果是完全相同的。请注意,变量需要以美元符号开头。如果你忘记了,并且回显了不带美元符号的命令变量,会只输出命令的名称,如下所示:

  1. #!/bin/bash 
  2. command1=`ls` 
  3. echo command1 
  4. command2=$(ls) 
  5. echo command2 
  1. [zexcon ~]$ ./learnToScript.sh 
  2. command1 
  3. command2 
  4. [zexcon ~]$ 

双括号 (())

那么双括号有什么用呢? 很简单,双括号用于数学方程式。 

  1. #!/bin/bash 
  2. echo $((5+3)) 
  3. echo $((5-3)) 
  4. echo $((5*3)) 
  5. echo $((5/3)) 
  6.  
  7. [zexcon ~]$ ./learnToScript.sh 
  8. 15 
  9. [zexcon ~]$ 

结语

至此,我们已经创建了第一个脚本。我们知道了如何执行多个命令:将它们放在一个脚本中并运行,就可以获得结果。下一篇文章会继续讨论,了解输入和输出的重定向、管道命令、使用双括号或者添加注释等知识。

 

责任编辑:未丽燕 来源: Linux中国
相关推荐

2022-02-28 11:02:53

函数Bash Shell语句

2022-01-20 16:43:38

Bash 脚本ShellLinux

2022-05-16 15:37:32

开源软件

2010-06-07 16:10:53

HadoopOnDem

2022-04-08 12:56:52

Linux终端命令

2010-06-21 12:39:56

OSPF路由协议

2023-03-01 08:00:00

机器学习数据集

2009-11-16 08:58:43

PHP语言

2010-05-27 10:42:38

SVN配置文档

2011-08-23 10:11:10

LinuxTop命令

2023-03-15 09:46:07

R Markdown代码语法

2010-08-04 09:06:21

Flex安装

2010-09-01 16:56:11

无线局域网

2010-08-02 09:36:22

Flex

2010-07-01 12:35:46

UML用例图

2021-08-28 17:30:51

LinuxSSH

2011-03-30 14:07:56

Ubuntu的安装

2009-10-10 16:50:33

2010-05-24 16:36:14

2010-05-17 11:24:33

点赞
收藏

51CTO技术栈公众号