+ -
当前位置:首页 → 问答吧 → 有段代码看不懂,求教

有段代码看不懂,求教

时间:2011-07-26

来源:互联网

#!/bin/sh
①# suck configuration.
②BASE_DIR=${0%/*}
③. ${BASE_DIR}/../etc/common.conf
④. ${BASE_DIR}/conf/ghd_common.conf

⑤exec 2>&1
⑥exec 1>${DIRGIDARC}/aaa.log


这是一个cron的前7行代码,有没有高手能告诉我①~⑥这6行代码的意思是什么?
如:
②${0%/*}的值是什么

作者: shaohua81   发布时间: 2011-07-26

①# suck configuration.  
纯粹是注释

②BASE_DIR=${0%/*}
先看这个语法 ${varible%string*} 从右向左截取第一个string后的字符串 $0是你执行的脚本
比如你是./test.sh 那么$0就是./test.sh 如果是/path/to/test.sh 那么$0就是/path/to/test.sh
所以BASE_DIR=${0%/*} 就是取$0的路径 然后赋值给BASE_DIR

③. ${BASE_DIR}/../etc/common.conf
在当前shell脚本环境里执行${BASE_DIR}/../etc/common.conf 不启动子进程 多半是为了设置环境变量等

④. ${BASE_DIR}/conf/ghd_common.conf
在当前shell脚本环境里执行${BASE_DIR}/conf/ghd_common.conf 不启动子进程 多半是为了设置环境变量等

⑤exec 2>&1
2代表标准错误 1代表标准输出 这句话就是把脚本的标准错误 重定向到标准输出 也就是错误信息和正常信息一起输出

⑥exec 1>${DIRGIDARC}/aaa.log
1代表标准输出 这句就是把标准输出定向到日志文件${DIRGIDARC}/aaa.log里 因为前面第5句把标准错误也定向到标准输出了 所以错误信息也会写到${DIRGIDARC}/aaa.log日志里

如果你还不懂exec的用法 google搜shell exec内建命令用法

作者: steptodream   发布时间: 2011-07-26

感谢你的回答,②的回答里有点问题,${0%/*}里面是0%,而不是$0。

作者: shaohua81   发布时间: 2011-07-26

引用 2 楼 shaohua81 的回复:

感谢你的回答,②的回答里有点问题,${0%/*}里面是0%,而不是$0。

${0%/*} 这个就是按照${varible%string*}语法操作$0变量 这下明白了没

作者: steptodream   发布时间: 2011-07-26

多谢!!

作者: shaohua81   发布时间: 2011-07-26

我把解释再加一句 你再仔细读:

②BASE_DIR=${0%/*}
先看这个语法 ${varible%string*} 从右向左截掉$varible里的第一个string后的字符串 所以这里就是截掉$0从右向左的第一个/以后后的字符串 只剩下前边的 
$0是你执行的脚本
比如你是./test.sh 那么$0就是./test.sh ${0%/*}的结果就是. 即当前目录 如果是/path/to/test.sh 那么$0就是/path/to/test.sh ${0%/*}的结果就是/path/to

所以BASE_DIR=${0%/*} 就是取$0的路径 然后赋值给BASE_DIR

作者: steptodream   发布时间: 2011-07-26

引用 4 楼 shaohua81 的回复:

多谢!!

结贴 结贴!

作者: steptodream   发布时间: 2011-07-26