linux shell 变量的高级用法,五.Shell之4种内部变量高级用法(DIRSTACK、GLOBINGURE、SECONDS、TMOUT)...

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.

TMOUT (设置Shell过期时间)

TMOUT变量用于设置Shell的过期时间,当Shell不为0时,Shell在TMOUT秒后将自动注销。

我理解的TMOUT是当脚本运行受到阻塞(等待输入)时,将会等待TMOUT秒,超出便停止阻塞执行下一个命令,如果下n个命令依旧有阻塞便继续等待TMOUT秒,超出便停止阻塞继续执行下一个命令。

Demo:

$ cat tmoutdemo.sh

#!/bin/bash

TMOUT=3

for (( i=0; i<3; i++ ))

do

echo "What is your name?"

read name

if [ $name ]

then

echo "Your name is $name."

break

else

echo "No name."

fi

done

$ ./tmoutdemo.sh

What is your name?

No name.

What is your name?

haha

Your name is haha.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值