在shell 中, 大部分外部命令,需要使用man来查看其帮助。除非,这些外部命令不提供man手册,否则man总是能返回你想要得东西。
这点道理相信用过linux或者unix的人都知道。
help
但来一些shell内部命令,使用man 是得不到任何帮助的。man getopts, man set? 这个时候,我们需要依赖help.
例如
help getopts
help set
等等。
xargs
经常用于根据pipe传入的参数来创建命令。
比如,搜索目录下的某些文件,然后执行命令。
find ./ -name *.csv | xargs gzip
不同于
find ./ -name *.csv | gzip
后者是将字符串压缩,但gzip没有这个功能,所有会失败。而前者是每当传入一个文件名时,xargs创建一个gzip adfa.csv这样的名字。
除了这些最基本的应用外,xargs还提供一些而外的参数来提高效率。
-n x
每次后面的命令最多接受x个参数
-ireplace
替换每个后面命令中特定字符串为寻找到的文件名。如果replace为
set
set常用来设置shell环境变量和默认行为。
set -o adfad 设置这个选项
set +o adfad 关闭这个选项
$-里面保存了当前的set值。
gdb
当应用程序以外推出,留下core 文件在/var/tmp/cores时,如何察看这个core文件呢?
找到core文件后,需要确认文件类型
$file tds*
tdsTDB17.10013.8873.core: ELF 64-bit LSB core file AMD x86-64, version 1 (SYSV), SVR4-style, from 'tdsTDB17'
然后需要gdb启动二进制文件并载入core文件。
$gdb tdsTDB17 tdsTDB17.10013.8873.core
然后在 gdb中,输入bt来获得backtrace
getopts
用于获取命令行输入的参数获取,常结合while使用。
比如
while getopts ":f:d:?h" OPT
第一个: 是指 getopts工作在安静模式下,不会马上报错
在安静模式下,
getopts会区分invalid option错误和miss option argument错误。
invalid option时,varname会被设成?,$OPTARG是出问题的option;
miss option argument时,varname会被设成:,$OPTARG是出问题的option。
如果optstring不以”:“开头,invalid option错误和miss option argument错误都会使
varname被设成?,$OPTARG是出问题的option。
大括号的秘密
大括号? 常用于限制变量被取情况。 例如
$ab='hiro'
如果你想获得hiros
那么$abs显然是不行的,需要通过大括号来限制变量名称的长度。
${ab}s === hiros
另外我们还可以在大括号中作一些替换等行为
-
${var:-value} 如果var有值了那么就用原本的值,不然用value的值
-
${var:+value} 如果var有值就用value的值
-
${var:%pattern} 如果pattern与var后面的部份吻合,传回剩下沒有
吻合部份给var
-
${var:#pattern} 如果pattern与var前面的部份吻合,传回剩下沒有
吻合部份给var
-
${var/pattern/substitute} 如果var有pattern吻合就替换成substitute
阅读(2594) | 评论(0) | 转发(0) |