五.Shell之3种内部变量高级用法(DIRSTACK、GLOB
1. DIRSTACK(目录栈)
它显示目录栈的栈顶值
,和我们常见的栈一样为先进先出
,拥有入栈
和出栈
两个动作。和DIRSTACK
相关的命令如下:
- dirs (显示目录栈)
注意与dir不同
格式:
dirs [-clpv] [+N] [-N]
选项:
-c
删除所有元素以清空目录栈
-l
不打印与主目录相关的波浪号前缀的目录
-p
每行一个条目打印目录栈
-v
每行一个条目,以栈中位置为前缀打印目录栈
参数:
+N
显示 dirs 不带选项启动时显示的目录列表左起中第N 个目录,从零开始。
-N
显示 dirs 不带选项启动时显示的目录列表右起中第N 个目录,从零开始。
Demo:
$ popd
bash: popd: 目录栈为空
#表明现在目录栈为空
$ echo $DIRSTACK
/home/jin1ming
$ pushd .
~ ~
$ pushd go
~/go ~ ~
$ pushd ../linux_shell
~/linux_shell ~/go ~ ~
$ dirs -l -p
/home/jin1ming/linux_shell
/home/jin1ming/go
/home/jin1ming
/home/jin1ming
$ dirs -v
0 ~/linux_shell
1 ~/go
2 ~
3 ~
$ dirs +1
~/go
$ dirs +2
~
$ dirs -l -p
/home/jin1ming/linux_shell
/home/jin1ming/go
/home/jin1ming
/home/jin1ming
$ dirs +0
~/linux_shell
$ dirs -1
~
$ dirs -0
~
$ dirs -2
~/go
- pushd (将目录压栈)
格式:
pushd [-n] [+N | -N | 目录]
选项:
-n
抑制添加目录至栈时通常的改变目录操作,从而仅对栈进行操作。
参数:
+N
旋转栈从而第 N 个目录 (`dirs' 显示的列表中左起,从零开始)将移动到栈顶。
-N
旋转栈从而第 N 个目录 (`dirs' 显示的列表中右起,从零开始)将移动到栈顶。
dir
将 DIR 目录添加到栈顶,并且使其成为当前工作目录。
通俗来讲:+N、-N就是将第N个目录移到栈顶,相当于一个循环链表的指针往后(+N)移了2次。
Demo:
$ pushd -n go
~ go
$ pushd -n linux_shell
~ linux_shell go
$ pushd -n /hoem
~ /hoem linux_shell go
$ pushd -n /home
~ /home /hoem linux_shell go
$ dirs -v -l
0 /home/jin1ming
1 /home
2 /hoem
3 linux_shell
4 go
/hoem
为我不小心打错,但由此可见,绝对目录
即便是不存在的也可以成功压栈。
- popd (将目录弹出栈)
选项:
-n
抑制从栈中删除目录时通常的目录变换操作,从而仅对栈
进行操作。
参数:
+N
删除第 N 个目录 (`dirs' 显示的目录列表中左起,从零开始)。
例如:`popd +0' 删除第一个目录,`popd +1' 删除第二个。
-N
删除第 N 个目录 (`dirs' 显示的目录列表中右起,从零开始)。
例如:`popd -0' 删除最后一个目录,,`popd -1' 删除倒数第二个。
2. GLOBIGNORE (通配时忽略)
GLOBIGNORE
是由冒号
分隔的模式列表,表示通配时忽略的文件名集合
。
Demo:
$ cd linux_shell/
$ ls
1.txt 4aa 4ae 4ai awkdomo2.awk new1.txt selectdomo.sh testgo.sh
2 4ab 4af 4aj awkdomo.awk phoneinfo shelldemo.sh test.sh
2.txt 4ac 4ag 4ak file score sort1.txt
3 4ad 4ah 4al fordemo.sh selectdemo.sh sort2.txt
$ GLOBIGNORE="*.sh:*.awk"
$ ls *
1.txt 2.txt 4aa 4ac 4ae 4ag 4ai 4ak file phoneinfo sort1.txt
2 3 4ab 4ad 4af 4ah 4aj 4al new1.txt score sort2.txt
$ ls
1.txt 4aa 4ae 4ai awkdomo2.awk new1.txt selectdomo.sh testgo.sh
2 4ab 4af 4aj awkdomo.awk phoneinfo shelldemo.sh test.sh
2.txt 4ac 4ag 4ak file score sort1.txt
3 4ad 4ah 4al fordemo.sh selectdemo.sh sort2.txt
3.SECONDS (记录脚本执行时间)
SECONDS
记录脚本
从开始到结束所耗费的时间
,以秒
为单位。也可以记录终端
打开的时间。
Demo:
$ echo $SECONDS
21
$ echo $SECONDS
25
$ echo $SECONDS
27
$ echo $SECONDS
37
$ SECONDS=0;echo $SECONDS
0
$ cat secondsdemo.sh
#!/bin/bash
sum=0
for num in {1..10}
do
let "sum+=num"
sleep 1
done
echo "sum=$sum"
echo "Running time is $SECONDS."
$ ./secondsdemo.sh
sum=55
Running time is 10.