学习两个脚本

🤨



脚本navDebuggingTools.sh


#!/bin/sh
appname=`basename $0 | sed s,\.sh$,,`
dirname=`dirname $0`
tmp="${dirname#?}"
if [ "${dirname%$tmp}" != "/" ]; then
dirname=$PWD/$dirname
fi
LD_LIBRARY_PATH=$dirname
export LD_LIBRARY_PATH
$dirname/$appname "$@"

🤔

第一行

appname=`basename $0 | sed s,\.sh$,,`

左值是个变量,appname


而右值,却被一对反引号包住

反引号的作用是将反引号内的Linux命令先执行,然后将执行结果赋予变量

所以右值还是一条命令,其中basenamephp中一个函数,返回路径中的文件名部分。

在这里basename $0,表示返回执行的脚本名,即navDebuggingTools.sh


sed用来处理,编辑文本
s表示取代模式
后面的三个逗号,是用来分割参数的,可用/取代,
\.sh$是第一个参数,即要被取代的字符串,\用来转义.$表示字符串的结束
最后两个,之间的空字符串就是取代的字符串



第二行

dirname=`dirname $0`

dirname $0在命令行状态下返回 . ,而在脚本中返回的是脚本所在的路径,且是脚本所在路径相对于命令执行时的路径

在这里插入图片描述



第三、四行

将第三行tmp="${dirname#?}"输出出来,就会发现是空的

接着我写一些例子测试了下

str="12345678"
echo "${str#}"				# 输出的是12345678
echo "${str#?????}"			# 输出的是678

然后再把if判断中的${dirname%$tmp}输出出来,结果是.,这不就是变量$dirname的值吗?

这又是%接一个变量


几经折腾,终于找到了答案
linux shell 字符串 处理 小结
linux shell 字符串替换




最后三行

LD_LIBRARY_PATH=$dirname
export LD_LIBRARY_PATH
$dirname/$appname "$@"

整个脚本,最后三行才是关键
首先,LD_LIBRARY_PATH是程序在使用中的环境变量
export就是设定环境变量,注意LD_LIBRARY_PATH并没有使用$符号
最后一行就是执行程序了



🙄

其实知道脚本到底要干嘛之后,用很简单的几行代码就能搞定,并不需要像上面的那么复杂

LD_LIBRARY_PATH=$PWD"/"			# 程序执行所需的环境变量
export LD_LIBRARY_PATH			# 设置环境变量
./navDebuggingTools				# 在当前路径执行程序
  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值