shell脚本的执行

有时候也要写一点最简单的shell脚本,但是每次写的时候怎么开始都会忘。本篇记录shell脚本最基本的2个知识点。

指定脚本的解释器

shell脚本的第一行以#!开始,后面跟上脚本解释器程序的路径,通常是:/bin/bash

1
#!/bin/bash

shell脚本是为shell编写的程序。但是shell脚本不单是可以用shell这种语言来写,也可以用别的语言来写,比如php;使用shell语言来编写shell脚本最常见。用shell语言编写的shell脚本后缀是.sh,用php语言编写的shell脚本后缀当然是.php。.sh文件内,第一行通常用/bin/bash作为解释器,.php文件的第一行要指定/usr/bin/php作为解释器。

脚本的执行方式

  1. 授权后再执行

    1
    2
    chmod a+x print.sh
    ./print.sh
  2. 没有权限,通过bash或sh运行脚本

    1
    2
    bash print.sh
    sh print.sh
  3. 没有权限,通过.或source运行脚本

    1
    2
    source print.sh
    . print.sh

三种方式的区别:赋予脚本权限后直接运行将在用户当前shell下开启一个新的子进程,并在子进程环境中运行脚本程序;通过bash或sh命令加载脚本文件并执行,此时系统不再关心#!后面的解释器,而是直接使用bash或sh作为解释器解释脚本内容并执行;通过.或source方式执行脚本,则脚本将在用户当前shell环境中运行。

简单脚本形式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/bin/bash
dir=/home/downloads
cd $dir

read -p "输入要导入的数据库名称:" db_name

echo "在此命令执行前,确保${db_name}数据库已经删除并重新创建!"
today=`date +%Y-%m-%d`
gz_file="${dir}/${today}-${db_name}.sql.gz"
sql_file="${dir}/${today}-${db_name}.sql"

if [ ! -f $gz_file ];then
echo "${gz_file}不存在,尝试查找${sql_file}"
if [ ! -f $sql_file ];then
echo "${sql_file}也不存在,无法导入"
else
echo "准备导入"
mysql -u root --password='111111' -h localhost $db_name < $sql_file
fi
else
echo "准备解压"
gunzip $gz_file
echo "准备导入"
mysql -u root --password='111111' -h localhost $db_name < $sql_file
fi