什么是Shell脚本

Shell Script,Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令。

换一种说法也就是,shell script是利用shell的功能所写的一个程序,这个程序是使用纯文本文件,将一些shell的语法与指令写在里面,然后用正规表示法,管道命令以及数据流重导向等功能,以达到我们所想要的处理目的。更明白地来说,shell script就像早期dos年代的.bat,最简单的功能就是将许多指令汇整写一起,让使用者很容易地就能够一个操作执行多个命令,而shell script更是提供了数组,循环,条件以及逻辑判断等重要功能,让使用者可以直接以shell来写程序,而不必使用类似C程序语言等传统程序编写的语法。

什么是shell

shell和shell脚本有什么区别?确切一点说,Shell就是一个命令行解释器,它的作用就是遵循一定的语法将输入的命令加以解释并传给系统。它为用户提供了一个向Linux发送请求以便运行程序的接口系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。 Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言(就是所说的shell脚本)。作为命令语言,它互动式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包括循环和分支。它虽然不是 Linux系统内核的一部分,但它调用了系统内核的大部分功能来执行程序、创建文档并以并行的方式协调各个程序的运行。

构建基本脚本

本例环境:BashShell

使用多个命令

在shell中如果要使用多个命令,可以把命令放在同一行,用分号;隔开,例如:

1
$ date ; who

当然不限于两个命令,可以多个一起使用,当然只要不超过最大命令行字符数255即可

创建shell脚本文件

创建shell文件需要用到编辑器,此时就要强烈推荐Vim了。

shell脚本文件的第一行,必须指定要使用的shell环境,格式如下(再次声明我的环境是Bash)

1
#!/bin/bash

一般情况下shell的注释就是以#这个符号开始,但是第一行例外,因为感叹号是告诉shell要用哪个shell来运行脚本,在脚本里就可以写入我们需要执行的命令就好啦

1
2
3
4
#!/bin/bash
#这是我的第一个shell脚本
date
who

vim编辑shell脚本

上图所示的头部信息并不是必须的,但是在工作或者学习中,养成一个良好的脚本编写习惯是非常重要的,必要的信息都要标记出来,比如脚本的编写时间、实现功能、编写者、联系方式和版本信息等。

这就是一个shell脚本的所有内容了,当然不换行也是可以的,用分号隔开即可,保存到名为test.sh文件中(没错,shell脚本的后缀就是.sh但是在Linux中后缀并不重要,不加后缀也可以)

执行一下:

1
$ test.sh

报错

bash: test.sh: command not found

这是为什么呢,因为bash shell并不能找到你的文件,得把你的脚本文件路径增加到PATH环境变量里,两种方法:

  1. 将shell脚本文件目录添加进PATH环境变量中
  2. 在命令提示符中使用绝对或者相对路径来引用此脚本文件

我比较习惯第二种:

1
$ ./test.sh

报错信息

bash: ./test.sh: permission denied

怎么又报错呢?因为我们的脚本文件并不具有可执行权限

1
2
$ chmod u+x test.sh
$ ./test.sh

现在就可以成功看到结果啦:

输出结果

输出语句

shell的输出语句可以是echo,它可以加引号也可以不加引号来显示字符串,但是当要输出的字符串中有引号的话,就必须用另一种引号将整个字符串括起来,例如:

1
2
$ echo this is a echo
$ echo "I’m laugh"

现在就可以在脚本中输出想要的信息了

1
2
3
4
5
6
#!/bin/bash
#test
echo "this is dates"
date
echo "who are you"
who
1
$ ./test.sh

脚本信息

脚本执行结果

如果我们想要把输出信息和命令的输出结果显示在同一行,可以用到echo-n参数:

1
2
3
4
#!/bin/bash
#test
echo -n "this is dates: "
date

执行结果

变量

环境变量

shell有一组环境变量,用来记录特定的系统信息,可以使用set命令来显示一份当前完整的环境变量列表:

环境变量

在脚本中,在环境变量名前加上美元符号$来使用这些环境变量,例如:

1
2
3
4
5
#!/bin/bash
#test
echo "user info for user is: $USER"
echo UID: $UID
echo HOME: $HOME

USER、UID和​HOME环境变量用来显示已登录用户的有关信息。

执行结果

注意:echo命令中的环境变量会在脚本运行时替换为当前的值。

在第一个字符串中可以将$USER系统变量放在双引号中,而shell仍然能识别到变量,再说一个例子:

1
$ echo "the cost of item is $15"

输出结果为:

输出结果

只要在脚本中出现$符号,shell就会认为我们在引用一个变量,上面的例子就是shell找不到$1这个变量,所以就显示了5

如果要在字符串中显示美元符号,则要使用转义符,即反斜线\

1
$ echo "the cost of item is \$15"

输出结果正确

今天就到这里,,,托更嘿嘿