摘要:今天碰到一个问题,把一个正在运行的脚本取消,可是该脚本在后台起来的线程仍然在运行。简单测试了一下#!/bin/bashecho "Begin Test ..."(sleep 100)&(sleep 100)&(sleep 100)&wait echo "End Test ..."在脚本还在等待返回的...
阅读全文
摘要:whoami显示的是当前“操作用户”的用户名,而who am i显示的是“登录用户”的用户名。若你使用root用户登录,中间su abc切换,whoami的结果是abc,who am i 的结果是root,这个点会导致比较隐蔽的错误。
阅读全文
摘要:eval命令将会首先扫描命令行进行所有的置换,然后再执行该命令。该命令适用于那些一次扫描无法实现其功能的变量。一个应用场景如下:export path="/home/bin/"a="\$path/file1"echo $a会显示: $path/file1我们实际想得到的结果是:/home/bin/f...
阅读全文
摘要:碰到一个场景:一个脚本内起了多个后台线程,往一个日志文件写日志,结果因为线程之间争抢写锁,导致脚本执行效率很低,为了解决这个问题,希望减少写锁的争抢,尝试使用fifo解决该问题,以下是实验用例子。#!/bin/bashfifo_file=fifo.pipemkfifo $fifo_fileexec ...
阅读全文
摘要:转自:http://my.oschina.net/aiguozhe/blog/41557,并对内容作了验证修改。1. 取长度str="abcd"expr length $str # 4echo ${#str} # 42.查找子串的位置貌似也只有单个字符的时候可用。str="abc"e...
阅读全文
摘要:今天碰到一个问题,脚本执行scp文件拷贝,因为拷贝的服务器很多,所以拷贝脚本的实现是在把拷贝动作转后台执行,结果发现一堆文件拷贝失败。比较有迷惑性的是,拷贝失败的通常是同一个文件夹拷贝到所有服务器时失败,所以开头查问题的方向是专门查该文件,后来发现了输出终端的输出错误:ssh_exchange_id...
阅读全文
摘要:文件中有很多字段:dd ssdf df aaa="100"dd ssdf df aaa="200"asdf sdf sdf aaa="700"现在我就想替换dd ssdf df aaa="×××" 为dd ssdf df aaa="NUMBER"%s/\(dd ssdf df\) aaa=\"[0-...
阅读全文
摘要:global命令格式: [range]global/{pattern}/{command}global命令在[range]指定的文本范围内(缺省为整个文件)查找{pattern},然后对匹配到的行执行命令{command},如果希望对没匹配上的行执行命令,则使用global!或vglobal命令。一...
阅读全文
摘要:基本定义:gawk 的主要功能是针对文本的每一行执行被指定的 actions。命令格式:gawk option program fileoption: -F 指定的分隔符,默认的分隔符是空格,可以指定多个分隔符,例如-F ":|;|.",就是以:或者;或者.为分隔符。 -f program fi...
阅读全文
摘要:^ 行首$ 行尾^[ abc] 以a或b或c开头的行[Ss]igna[lL] 匹配单词signal、signaL、Signal、SignaL^ABC...
阅读全文
摘要:1) 我们打算把文件夹test里面的内容打包成tar包test.tarcd test && tar -cvf test.tar *若test中无文件,上面脚本命令将报错。2) 同时输出到屏幕和重定向使用tee例如:echo “1000000000” | tee a.txt3) 在windows下修改...
阅读全文
摘要:1) -q 参数,本意是 Quiet; do not write anything to standard output. Exit immediately with zero status if any match is found, even if an error was detected. ...
阅读全文
摘要:有一个字符串:a="190.0.1 190.0.2 190.0.1"现在我要对其去重,去重可以用uniq,可是前提是先要排序,以下是实现:a=`echo $a | awk '{for (i=1; i<=NF; i++) print $i}' | sort |uniq`echo $a190.0.1 1...
阅读全文
摘要:echo换行输出需要转义符 -e看以下例子:1 echo -e "It is the first line." >> a; echo -e "It is the second line.\c" >> a; echo -e "It is the third line." >> a; echo -e "...
阅读全文
摘要:*在通配符和正则表达式中有其不一样的地方,在通配符中*可以匹配任意的0个或多个字符,而在正则表达式中他是重复之前的一个或者多个字符,不能独立使用的。比如通配符可以用*来匹配任意字符,而正则表达式不行,他只匹配任意长度的前面的字符。基本上解释就是通配符是系统命令使用(ls cp等),一般用来匹配文件名...
阅读全文
摘要:1 #!/bin/sh 2 num=0 3 cat /etc/passwd | while read line 4 do 5 num=$(($num+1)) 6 done 7 echo $num 8 9 linux:~ # sh a.sh10 0原因:使用for,while,until...
阅读全文