紧接着上一篇的变量继续介绍学习吧,变量可太麻烦了,Bash的认识还比较浅,不够深入,很多的内建变量还用不上,不过还是要先备着,慢慢深入也会慢慢发现这些变量的用处,比如上文的$REPLY变量,read和select缺失变量名的情况下,值会被赋予$REPLY。
$SECONDS ##记录脚本的执行时间,可以用于监控脚本各模块执行时间,也可以控制脚本执行时间 vim seconds.sh #!/bin/bash TIME_LIMIT=100 INTERVAL=2 while [ $SECONDS -le $TIME_LIMIT ] do echo "the script running $SECONDS s" sleep $INTERVAL done ./seconds.sh > the script running 0 s > the script running 2 s > the script running 4 s > the script running 6 s $SHELLOPTS ##记录了shell中已启用的选项列表
$SHLVL ##当前shell的层级,即嵌套了多少层的Bash,和$BASH_SUBSHELL无关,()可以开启SUBSHELL $TMOUT ##当TMOUT被设置为非0值得时候,shell会在设定值之后登出,可以和read联用实现限时输入 export TMOUT=10 ##10秒之后当前连接会中断 vim tmout.sh #!/bin/bash TMOUT=10 read -p "please input the song you favirate in $TMOUT s" song if [ -z "$song" ];then echo "no answer" fi exit 0 ##不过上述的限时输入并不好用,read -t可以实现相同功能,abs也提供了stty方法实现,太复杂了。。。 $UID ##用户UID,常写在脚本里面作判断,不允许普通用户执行某些脚本,whoami一样可以实现 vim test.sh #!/bin/bash if [ $UID -eq 0 ];then continue else echo "this script can only run by root" exit 1 fi $! $_用的不多,自行查阅吧
3.declare和typeset,变量属性的声明
之前的文章有介绍,Bash变量是一个弱变量,变量属性的声明会给脚本增加属性追踪的负担,一般不要去给变量进行属性声明。但是有几个参数还是可以用的,参考如下
declare -r variable ##同readonly variable,设置变量属性只读 declare -a array ##声明数组 declare -f ##任意参数会输出已经定义过的所有函数 declare -x ##同export
还有一个重点是declare variable可以限制变量的作用域。
vim var.sh #!/bin/bash foo(){ declare FOO="bar" } bar () { foo echo ${FOO:-empty} } ./var.sh > empty
4.RANDOM随机数生成
这里只介绍$RANDOM生成随机数,真随机还是伪随机就不介绍了,我对真伪随机还是比较感兴趣的,去百度了一下,各种算法介绍,不懂,先放着,后续有机会再学习。