随着使用Linux系统越来越久,难免需要写一些脚本来帮助我们快速编写脚本。本文主要介绍在写脚本的过程中主要遇到的一些问题:
- 定位脚本位置(绝对位置&相对位置)
- 读取参数(配置文件读取&文件内读取)
- 带参数的脚本(基本类型& -<参数名> <参数值> & –<参数名> <参数值>)
- 脚本内调用其他脚本(普通执行&exec&fork)
1. 定位脚本位置
在运行的时候,可以通过如下命令来快速定位脚本的位置:
# 案例1
cd `dirname $0`
echo `pwd`
# 案例2 加载路径目录下的其他配置文件
SCRIPT_PATH=$(cd `dirname $0`; pwd)
. ${SCRIPT_PATH}/../env/env.properties
# 案例3 加载同意路径下的其他脚本
. `dirname $0`/env.sh
2. 读取参数
脚本主要是参数与命令的集合体。通常参数的使用主要包括3种:脚本内直接声明,配置文件读取,启动时通过参数传递。
- 直接声明
# 例子1 JAVA_HOME(脚本内设置)
JAVA_HOME=/home/abel/hello
echo $JAVA_HOME
$JAVA_HOME/bin/java -version
- 配置文件读取
# 例子2 JAVA_HOME(读取配置文件)
#env.properties 文件
JAVA_HOME=/home/abel/hello
# test.sh脚本(注意需要考虑参数变量与系统的环境变量的冲突)
#/bin/sh -x
SCRIPT_PATH=$(cd `dirname $0`; pwd)
. ${SCRIPT_PATH}/env.properties
echo $JAVA_HOME
$JAVA_HOME/bin/java -version
- 脚本启动时传递
./test.sh /home/abel/hello
# test.sh脚本(注意需要考虑参数变量与系统的环境变量的冲突)
#/bin/sh -x
JAVA_HOME=$1
echo $JAVA_HOME
$JAVA_HOME/bin/java -version
3. 带参数的脚本
- 直接传递
- -<参数名(a-z单字符)> <参数值>
- –<参数名(单词名称等)> <参数值>
第一种是shell语法指定的传递方式,后面需要使用某些插件getopt
和getops
。具体如何编写这方面的脚本,请看系列的续集。
# 例子1
./start.sh a b c d
# 例子2
./start.sh -h
# 例子3
./start.sh --help
4. 脚本内调用其他脚本
脚本内调用其他脚本主要包括如下几种方式:
- source 调用
- exec 调用
- fork 调用
关于这方面我的理解还不够,需要深入了解下。
# 例子1
./start.sh
# 例子2
exec ./start.sh
Reference
[1]. Linux shell - dirname $0
定位到运行脚本的相对位置
[2]. inux sh 脚本调用外部命令