内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

Shell之3种内部变量高级用法(DIRSTACK、GLOBINGURE、SECONDS)

2019-02-10 18:33 出处:清屏网 人气: 评论(0

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.
分享给小伙伴们:
本文标签: ShellDIRSTACKGLOBINGURESECONDS

相关文章

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

CopyRight © 2015-2016 QingPingShan.com , All Rights Reserved.

清屏网 版权所有 豫ICP备15026204号