1、realpath 获取文件绝对路径
kylin@kylin-D2000:~/crystalmedia/scripts$ realpath activeMq_docker.sh
/home/kylin/crystalmedia/scripts/activeMq_docker.sh
kylin@kylin-D2000:~/crystalmedia/scripts$
2、if语句
if主要注意空格,if与[ 然后[]前后各一个空格
if [ ! -f "${filename}" ]
then
echo "File '${filename}' NOT exists!"
exit 1
fi
或者这种写法
if [ ! -f "${filename}" ];then
echo "File '${filename}' NOT exists!"
exit 1
fi
备注:
基本上和其他脚本语言一样。没有太大区别。不过值得注意的是。[]里面的条件判断。
1、字符串判断
str1 = str2 当两个串有相同内容、长度时为真
str1 != str2 当串str1和str2不等时为真
-n str1 当串的长度大于0时为真(串非空)
-z str1 当串的长度为0时为真(空串)
str1 当串str1为非空时为真
2、数字的判断
int1 -eq int2 两数相等为真
int1 -ne int2 两数不等为真
int1 -gt int2 int1大于int2为真
int1 -ge int2 int1大于等于int2为真
int1 -lt int2 int1小于int2为真
int1 -le int2 int1小于等于int2为真
3、文件的判断
-r file 用户可读为真
-w file 用户可写为真
-x file 用户可执行为真
-f file 文件为正规文件为真
-d file 文件为目录为真
-c file 文件为字符特殊文件为真
-b file 文件为块特殊文件为真
-s file 文件大小非0时为真
-t file 当文件描述符(默认为1)指定的设备为终端时为真
4、复杂逻辑判断
-a 与
-o 或
! 非
3、pushd和popd
pushd和popd是对一个目录栈进行操作,而dirs是显示目录栈的内容。而目录栈就是一个保存目录的栈结构,该栈结构的顶端永远都存放着当前目录(这里点从下面可以进一步看到)。
dirs常用的有两个参数:
选项
含义
-p
每行显示一条记录
-v
每行显示一条记录,同时展示该记录在栈中的index
-c
清空目录栈
目录栈中只有一个目录(当然是在栈顶),就是当前所在的目录。当切换目录之后,栈中的目录也随之改变。通过-c选项可以将目录栈中除当前目录之外的其它目录清除,由于上面的例子中目录栈只包含当前目录,所以没有变化。
每次pushd命令执行完成之后,默认都会执行一个dirs命令来显示目录栈的内容。pushd的用法主要有如下几种:
pushd 目录
pushd后面如果直接跟目录使用,会切换到该目录并且将该目录置于目录栈的栈顶。(时时刻刻都要记住,目录栈的栈顶永远存放的是当前目录。如果当前目录发生变化,那么目录栈的栈顶元素肯定也变了;反过来,如果栈顶元素发生变化,那么当前目录肯定也变了。)下面是一个例子:
kylin@kylin-D2000:~$ pushd crystalmedia/test/
~/crystalmedia/test ~
kylin@kylin-D2000:~/crystalmedia/test$ pushd /opt/
/opt ~/crystalmedia/test ~
kylin@kylin-D2000:/opt$ popd
~/crystalmedia/test ~
kylin@kylin-D2000:~/crystalmedia/test$ popd
~
kylin@kylin-D2000:~$
通过上面的例子可以知道,用pushd来替换cd是非常有用的。
pushd和popd两者的+n
pushd +n
pushd +n切换到目录栈中的第n个目录(这里的n就是dirs -v命令展示的index),并将该目录以栈循环的方式推到栈顶。
popd +n
将目录栈中的第n个元素删除(这里的n就是命令dirs -v显示的目录index)
在脚本中我们通常不愿意dirs显示出来,所以通过
pushd 目录 >/dev/null