
Shell中使用 pwd 命令可以获得当前工作目录,然而『当前工作目录』可能并不是『脚本文件所在目录』。
可以看出, pwd 获取的『当前工作目录』可能并不是『脚本文件所在目录』。因此我们可以用以下方法获取脚本文件所在目录的绝对路径:
如果是bash,可以用indirect expansion来搞,语法为 ${!var}。
比如
foo=bar
bar=123
echo ${!foo}
会打印 123
再比如下面的脚本,依次打印脚本的各个输入参数。
#!/bin/bash
var=1
while [ $var -le $# ]
do
echo "Param $var is ${!var}"
let var++
done
不用indirect expansion,也可以用 eval, 比如
#!/bin/bash
var=1
while [ $var -le $# ]
do
eval echo "Param $var is \$$var"
let var++
done
# getent passwd 1000
cecgw:x:1000:1000:cecgw,,,:/home/cecgw:/bin/bash
# getent passwd 1000|cut -d : -f 1
cecgw
# getent passwd 1000|awk -F : '{print $1}'
cecgw
slp后无论加不加& ,pid中获取到的实际进程ID和main进程ID始终是一样的,因为slp函数是在当前脚本进程中运行。除非你调用外部脚本。
你可以在 slp & 这句后加一句 ps >/tmp/log
然后看看slp后加&和不加&的情况下/tmp/log中显示的进程列表有何不同,就应该明白了。区别仅在于 $! 有值和没有值。
问题有问题,本机的ip地址是:1921681002/2552552550,网络地址应该是1921681000/2552552550。默认的网关地址才是1921681001/2552552550。
一个超笨的办法:
在脚本里写入:
netid=`ifconfig eth0 | grep "inet addr" | cut -d ":" -f 2 | cut -d " " -f 1 | cut -d "" -f 1-3`
echo $netid0
就可以显示一个IP地址了,这个IP地址就是你本机所在网络的网络地址。当然,这是以掩码是24位且你的网卡是eth0为前提的。注意第二个cut -d 后面的引号里面有空格。
以上就是关于Shell脚本获取自身路径的方法全部的内容,包括:Shell脚本获取自身路径的方法、Linux shell 脚本 间接获取输入参数的方法、shell技巧:通过uid获取用户名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)