2. 第一个 shell 脚本
本节我们将说明脚本的运行方式,尤其是需要熟悉解释器。
第一个 shell 脚本
创建一个简单的脚本来备份家目录
$ vi backup1.sh
tar cvfz /backup/staff.tar.gz /home/staff
执行刚刚创建的脚本,会收到一个 Permission denied 的错误提示
$ ./backup1.sh
-bash: ./backup1.sh: Permission denied
正如你看到的,对该脚本没有可执行权限,首先使用chmod u+x
命令给脚本可执行权限,然后重新在命令行执行
$ ls -l backup1.sh
-rw-r--r--. 1 staff staff 3 Aug 06 23:22 backup1.sh
$ chmod u+x backup1.sh
$ ./backup1.sh
执行脚本的方式
可以使用如下几种方式来执行脚本
-
cd
到 shell 脚本所在目录,输入./
后跟执行脚本的文件名。 例如:$ cd /home/staff $ ./backup1.sh
-
通过给出完整路径从任何地方执行脚本
$ /home/staff/backup1.sh
-
将包含 shell 脚本的目录添加到
PATH
环境变量,以后只需输入 shell 脚本的名称就可以执行。 在这种情况下,不需要在前面给出./
或使用完整路径调用脚本。export PATH=$PATH:/home/staff backup1.sh
cd
到脚本所在目录去执行他
增强上面的 shell 脚本
修改如下:
#!/bin/bash # Take a backup of a specific user home directory USERNAME=staff BACKUP_LOCATION=/backup #Location to store the backup tar cvfz $BACKUP_LOCATION/$USERNAME.tar.gz /home/$USERNAME echo "Backup of $USERNAME home directory completed."
#!/bin/bash
应该出现在 shell 的第一行,#!
称为sha bang
,后面跟着解释器(执行)的完整路径- 每行以
#
开头的是注释,视为注释行,可以对整行或者部分行进行备注,也可以给出#
注释该行的其余部分,如上例中定义BACKUP_LOCATION
变量的行所示 USERNAME
是指定需要备份的用户名变量。BACKUP_LOCATION
是指定保存位置的变量
关于#!/bin/bash
行,在 Linux 中,以下所有内容都是相同的:
#!/bin/bash
作为第一行,将使用bash shell
执行 shell 脚本中的命令。 作为最佳实践,请始终使用这个方法。#!/bin/sh
作为第一行,它将使用/bin/sh
(这是一个 Linux 中 bash 的符号链接)来执行 shell 脚本。- 如果未在 shell 脚本第一行中指定
#!
,在本例中,它将使用bash
,因为它是 Linux 的默认 shell。