切换到脚本所在的目录
demo:
SCRIPT_PATH="$( cd "$( dirname "$0" )" >/dev/null 2>&1 && pwd )"
cd "$SCRIPT_PATH/.." || exit
在linux中,dirname命令可以返回文件所在的目录。$0表示Shell本身的文件名。 因此此写法的作用为: 这个语句的作用是获取shell脚本所在目录的绝对路径,然后 切换到 脚本 所在的目录。
dirname
dirname的功能是去掉文件路径名中的从右往左数的第一个/及其之后的所有文字,查看dirname的help信息可以看到如下的例子
[root@dev workspace]
Usage: dirname [OPTION] NAME...
Output each NAME with its last non-slash component and trailing slashes
removed; if NAME contains no /'s, output '.' (meaning the current directory).
-z, --zero end each output line with NUL, not newline
--help display this help and exit
--version output version information and exit
Examples:
dirname /usr/bin/ -> "/usr"
dirname dir1/str dir2/str -> "dir1" followed by "dir2"
dirname stdio.h -> "."
GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
Full documentation at: <https://www.gnu.org/software/coreutils/dirname>
or available locally via: info '(coreutils) dirname invocation'
[root@dev workspace]
"."表示当前路径
SCRIPT_PATH="$( cd "$( dirname "$0" )" >/dev/null 2>&1 && pwd )"
结合上面基础,此时$(dirname $0) 的结果就是. ,那么cd $(dirname $0)就是cd . ,之后运行pwd ,此时获得的就是脚本所在的绝对路径了。
$() 和 ${}
-
在 bash shell 中,
(
)
是
将
括
号
内
命
令
的
执
行
结
果
赋
值
给
变
量
。
用
()是将括号内命令的执行结果赋值给变量。 用
()是将括号内命令的执行结果赋值给变量。用( )的理由:
很容易与’ '(单引号)搞混。有时在一些奇怪的字形显示中,两种符号是一模一样的(直竖两点)。- 在多层次的复合替换中,
须要额外的跳脱(`)处理,而$( )则比较直观。 $( )的不足 - ``基本上可在全部的unix shell中使用,若写成shell script移植性比较高。而$( )并不是每一种shell都能使用。
-
是
用
来
作
变
量
替
换
。
一
般
情
况
下
,
{} 是用来作变量替换。一般情况下,
是用来作变量替换。一般情况下,var 与 ${var} 并没有啥不一样。但是用 ${ } 会比较精确的界定变量名称的范围 示例如下:
[root@dev workspace]
[root@dev workspace]
[root@dev workspace]
BB
[root@dev workspace]
|