Shell脚本学习之旅(1)— 创建第一个shell脚本
一、什么是shell
GNU/Linux shell是一种特殊的交互式工具。它为用户提供了启动程序、管理文件系统中的文件以及运行在Linux系统上的进程的途径。
shell的核心是命令行提示符。命令行提示符是shell负责交互的部分。它允许你输入文本命令,然后解释命令,并在内核中执行。
shell包含了一组内部命令,用这些命令可以完成诸如复制文件、移动文件、重命名文件、显示和终止系统中正运行的程序等操作。
所有Linux发行版默认的shell都是bash shell。bash shell的名称就是针对Bourne shell的拼写所玩的一个文字游戏,称为Bourne again shell。
在Linux系统上,通常有好几种Linux shell可用。不同的shell有不同的特性,有些更利于创建脚本,有些则更利于管理进程。如图所示
当你将多个shell命令放入文件中作为程序执行时,这个文件就被称作shell脚本。在命令行上执行的任何命令都可放进一个shell脚本中作为一组命令执行,这为创建那种需要把几个命令放在一起来工作的工具提供了便利。
使用cat /etc/shells
命令可以查看当前系统支持的shell工具。
[william@ubuntu:~]$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
/bin/ksh
[william@filesrv:~]$
二、执行多个命令
可以把两个命令放在同一行中一起运行,彼此间用分号隔开即可。
date命令先运行,显示了当前日期和时间,后面紧跟着who命令的输出,显示当前是谁登录到了系统上,我这里第一个是本地登录的,第二个是通过SSH登录的。
使用这种办法就能将任意多个命令串连在一起使用了,只要不超过最大命令行字符数255就行,但是在每次运行之前,都必须在命令提示符下输入整个命令。我们可以将这些命令组合成一个简单的文本文件,这样就不需要在命令行中手动输入了,在需要运行这些命令时,只用运行这个文本文件就行了。
三、创建shell脚本
新建test1
文件,然后输入以下下内容:
#!/bin/bash
# This script diaplays the date and who's logged on
date
who
在创建shell脚本文件时,必须在文件的第一行指定要使用的shell。其格式为:#!/bin/bash
在通常的shell脚本中,井号#
用作注释行, shell并不会处理shell脚本中的注释行。然而,shell脚本文件的第一行是个例外, #
后面的惊叹号会告诉shell用哪个shell来运行脚本。
我们现在运行脚本,会发现运行失败,这是因为bash shell
不能找到这个脚本文件
shell会通过PATH
环境变量来查找命令,我们查看一下PATH环境变量,
可以看到,并没有我们当前所在的目录,我们可以采取如下两种方法来运行这个shell脚本
- 将shell脚本文件所处的目录添加到PATH环境变量中;
- 在提示符中用绝对或相对文件路径来引用shell脚本文件。
我们使用第二种方法执行shell脚本,我们可看到,shell已经找到了这个脚本文件,但是我们没有执行这个问价的权限
查看一下文件的权限,可见,当前用户并没有可执行权限
我们使用如下命令为test1
添加可执行权限,u
表示当前用户,+
表示添加权限,x
表示可执行权限,合起来就是为当前用户添加可执行权限,这样我们就可以执行了
四、打印输出
我们在使用shell脚本的时候,经常会打印输出一些文本消息来作为提示,我们可以通过echo
命令来实现这一点,在echo
命令后面加上一个字符串就行了,
注意
:默认情况下,不需要使用引号包括字符串,但有时在字符串出现引号就比较麻烦了,如下所示:
这样我们就需要用单引号或双引号来划定文本字符串,如果在文本中用到了 他们,就需要使用另一种将字符串划定起来,这样所有的引号就可以正常输出了
将脚本修改为如下所示
#!/bin/bash
# This script diaplays the date and who's logged on
echo The time and date are:
date
echo "Let's see who's logged into the system:"
who
运行如下所示
当我们想把文本字符串和命令输出显示在同一行时,我们使用echo
的-n
参数即可,如果我们想要在字符串尾部添加一个空格,就需要用到引号,修改为如下所示,
#!/bin/bash
# This script diaplays the date and who's logged on
echo -n "The time and date are: "
date
echo "Let's see who's logged into the system:"
who
运行如下所示
echo
是shell脚本中与用户交互的重要工具。