Shell Tips
Contents
Shell 脚本中获取每个管道的退出状态 : http://blog.chinaunix.net/uid-8326220-id-2939412.html
- 在Shell脚本中,可以通过$?来获取前面命令的退出状态。但是在多管道链接的命令中,$?返回的就仅仅是所有用管道连接起来的命令按先后顺序执行下来后最后的退出状态。对于每个管道的各种状态却无法知晓。这里bash给开发人员提供了一个强大的变量$PIPESTATUS,它是一个数组,包含了上一条命令中所有管道的退出状态。实例如下:
- ~$ true | false | true | true | echo “the exit codes of the pipe are :
- ${PIPESTATUS[*]}”
- the exit codes of the pipe are : 0 1 0 0 0
- 这里可以看到,总共四个管道的退出状态全部显示出来了。这里的${PIPESTATUS[*]}
- 表示全部管道的退出状态。如果要单独引用,跟C语言一样,第一个元素下标为0,第n个管道的退出状态为${PIPESTATUS[n-1]}。但是当你试图获取超过管道数量范围之外的退出状态时,会没有任何显示:
- ~$ true | false | true | true | echo “the exit codes of the pipe are
- ${PIPESTATUS[*]}” the exit codes of the pipe are : 0 1 0 0 0
~$ echo “the exit codes of second and sixth pipe are ${PIPESTATUS[1]} and ${PIPESTATUS[5]}” the exit codes of second and sixth pipe are 1 and 所知道的支持获取管道退出状态的除了Bash外,还有zsh,有兴趣的朋友可以google下
Shell 中获取随机数
- date
|
|
- $RANDOM
|
|
- /dev/random,urandom
/dev/urandom这个设备数据与random里面一样。只是,它是非阻塞的随机数发生器,读取操作不会产生阻塞 它是通过二进制数据保存实时数据的,那么我们怎么样把它变成整型数据呢?
$ head -200 /dev/urandom | cksum 1795644120 55753 #由于urandom的数据是非常多,不能直接通过cat读取,这里取前200行,其实整个数据都是变化的,取多少也一样是唯一的。 #cksum 将读取文件内容,生成唯一的表示整型数据,只有文件内容不变,生成结果就不会变化,与php crc函数
$ head -200 /dev/urandom | cksum | cut -f1 -d” " 484750180 #cut 以” “分割,然后得到分割的第一个字段数据
- uuid
linux的uuid码也是有内核提供的,在/proc/sys/kernel/random/uuid这个文件内。其实,random目录,里面还有很多其它文件,都与生成uuid有关系的 $ cat /proc/sys/kernel/random/uuid dff68213-b700-4947-87b1-d9e640334196 $ cat /proc/sys/kernel/random/uuid 7b57209a-d285-4fd0-88b4-9d3162d2e1bc #连续2次读取,得到的uuid是不同的
Author Hangbin Liu
LastMod 2018-12-02 (a90227f)