在sh 脚本中得到sh的文件名和路径的函数,如需要用到当前脚本路径时

==========运行测试结果==========

--------------------------相对调用--------------

root@chrd-mail:/var/www/edm/home# ./../ssh/assay.sh ":qid_333333@d.com>"                                                       
line have email user name : qid_333333
letter DBid = 333333
sh path : /var/www/edm/home/../ssh/assay.sh
file no exist
add log [/var/www/edm/home/../ssh/log/333333] exit

-------------绝对中的相对-----------------

root@chrd-mail:/var/www/edm/home# /var/www/edm/home/../ssh/assay.sh ":qid_333333@d.com>"
line have email user name : qid_333333
letter DBid = 333333
sh path : /var/www/edm/home/../ssh/assay.sh
file exist
add log [/var/www/edm/home/../ssh/log/333333] exit

------------------绝对调用---------------

root@chrd-mail:/var/www/edm/home# /var/www/edm/ssh/assay.sh ":qid_333333@d.com>"                                               
line have email user name : qid_333333
letter DBid = 333333
sh path : /var/www/edm/ssh/assay.sh
file exist
add log [/var/www/edm/ssh/log/333333] exit

 

================sh代码=========

#主要从二个方面考虑,使用绝对路径调用sh时,直接返回参数0就ok了.

#如果是使用相对路径,需要把相对路径中的./删除拼接上当前的工作目录即可.本来我还想实现一个/..就移除对应的目录的,但是算了这事还是交给系统处理.反正系统支持像/var/www/edm/home/../sh.sh,其实它就是/var/www/edm/sh.sh,系统会自动转换的.就不用自己再处理了.

getShPath () {

        if [ "`expr \"$0\" : '\(.\)'`" == "/" ];then #like /var/www/sh.sh
                echo "$0"
                return 0;
        fi

        if [ "`expr \"$0\" : '\(.\)'`" == "." ];then #like ./sh.sh or ./../../sh.sh
                local newDir=${0#'./'}
                echo "`pwd`/$newDir"
                return 0;
        fi


        echo "$0" #unkown type
        return 0
}


logPath=`getShPath` #得到完整路径
echo "sh path : $logPath"
logPath=`dirname $logPath` #得到目录路径,去除文件名,只解析,并不做存在性检测
logPath="$logPath/log" #拼接其它目录名

echo "$logPath"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值