sh脚本-更新文本内容示例以及解析

示例

先看一个示例update.sh,这个示例的目的是入三个参数 用来更新同一个目录下的service.sh中的三个参数(_Xmn、_Xms、_XmX)的值。用于实际项目中可以通过代码执行脚本来调整项目Jvm的堆大小等.

#!/bin/bash
#获取文件的当前路径
DIR="$( cd "$(dirname "$0")" && pwd )"
#待修改文件路径
EXEC_PATH="${DIR}/service.sh"
#jvm xmn值-第一个参数
_PARAM_XMN=$1
#jvm xms值 第二个参数
_PARAM_XMS=$2
#jvm xmx值 第三个参数
_PARAM_XMX=$3

if [[ $1 = "--help" ]] || [[ $1 = "-h" ]]; then
    echo " e.g: bash update.sh {Xmn}M {Xms}M {Xmx}M"
    exit 0
fi

if [ $# != 3 ]; then
    echo "invalid params"
    echo " e.g: bash update.sh {Xmn}M {Xms}M {Xmx}M"
    exit 1;
fi

do_exec()
{
    XMN_INDEX=$(grep -n "_Xmn=" service.sh  |awk -F ":" '{print $1}')
    sed -i "${XMN_INDEX}c _Xmn=${_PARAM_XMN}" ${EXEC_PATH}

    XMS_INDEX=$(grep -n "_Xms=" service.sh  |awk -F ":" '{print $1}')
    sed -i "${XMS_INDEX}c _Xms=${_PARAM_XMS}" ${EXEC_PATH}

    XMX_INDEX=$(grep -n "_Xmx=" service.sh  |awk -F ":" '{print $1}')
    sed -i "${XMX_INDEX}c _Xmx=${_PARAM_XMX}" ${EXEC_PATH}

    echo "success!"
}

do_exec

shell脚本的 $常用含义:

$( ) 和 ${ }:

$( ) 中放的是命令,可以使用 “” 包起来,也可以不包。例如:DIR="$(cd "$(dirname "$0")" && pwd)"     或者     DIR1=$(cd "$(dirname "$0")";pwd)  或者   DIR1=$(cd $(dirname "$0");pwd)  或者   DIR1=$(cd $(dirname $0);pwd)  都是一样的输出结果 都是获取当前执行脚本的路径。命令也等价于‘’。但是在一个嵌套名命令中使用‘’会很麻烦。

${ }中放的是变量,例如  echo ${PARAM} 取PARAM变量的值并打印,也可以不加括号如   $PARAM

$0,$?,$!等用法:

$0   表示当前脚本的执行名字 例如 ./test.sh start  。则 $0 的结果是 ./test.sh
$n   获取shell脚本运行输入的第n个参数值,n=1..9
$#   获取运行时传入的参数个数
$$   获取脚本运行的当前进程ID
$!    shell后台运行的最后一个进程的进程ID
$?   执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
$-   显示shell使用的当前选项,与set命令功能相同,如*表示所有参数列表。以"$1$2…$n"的形式输出所有参数。@表示参数所有列表。如@所有参数列表。如@表示所有参数列表。以"$1","$2"…"$n"的形式输出所有参数。
$@  取当前shell的所有参数(强调个体), 参数之间保留参数里的空白,相当于“$“ ”$2”..."$n",这是将参数传递给其他程序的最佳方式。

$*   获取当前shell的所有参数(强调整体),将所有的命令行视为单个字符串,以"$1 $2 … $n"的形式输出所有参数。此选项参数可超过9个。

示例以及结果:

test.sh


DIR="$(cd "$(dirname "$0")" && pwd)"
echo $DIR
DIR1=$(cd "$(dirname "$0")";pwd)
echo $DIR1
DIR2=$(cd $(dirname $0);pwd)
echo $DIR2

PARAM_SIZE=$#
echo $PARAM_SIZE
PARAM_1=$1
echo $PARAM_1
PARAM_2=$2
echo ${PARAM_2}
ALL_PARAM_2=$*
echo $ALL_PARAM_2
ALL_PARAM_1=$@
echo $ALL_PARAM_1
echo $0

运行: ./test.sh 111 222 333

结果:

/home/hik/test
/home/hik/test
/home/hik/test
3
111
2222
111 2222 33333
111 2222 33333
./test.sh

DIR = $(cd "$(dirname "$0")";pwd) 解析:
1、取当前运行脚本的所在路径: $0
2、取当前脚本所在路径的父目录: dirname "$0"
3、取返回的父目录的值: $(dirname "$0")
4、cd到返回的父目录: cd "$(dirname "$0")"
5、输出地址: cd "$(dirname "$0")";pwd
6、取输出的地址,并赋值给DIR : DIR = $(cd "$(dirname "$0")";pwd)

XMN_INDEX=$(grep -n "_Xmn=" service.sh  |awk -F ":" '{print $1}')

grep -n "_Xmn"  : 搜索"_Xmn="字符串所在的行,并且输出行号和内容。 结果示例: 9:_Xmn=123M

awk -F ":" '{print $1}')  :以grep的输出为输入 解析数据-以分号非分隔符,打印解析后的第一列数据(数据所在的行号9)


sed -i "${XMN_INDEX}c _Xmn=${_PARAM_XMN}" ${EXEC_PATH}

sed -i "9c _Xmn==${_PARAM_XMN}" ${EXEC_PATH}   将制定的语句替代文本的指定行数据。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值