分享

Bash小技巧(惯用法)

 sailorhzr 2012-07-03

Bash小技巧(惯用法)

退出码判断(命令执行成功与否的判断)

在Bash脚本中,我们经常要先执行某个命令行,然后判断它是否执行成功,这时我们要对它的退出码进行判断。罗嗦一些的写法如下:

Bash代码  
  1. if [ $? -eq 0 ]     
  2. then     
  3.    echo "Success"     
  4. fi    
 

简洁的写法如下:

Bash代码  
  1. [ $? -eq 0 ] && echo "Success"    

 

条件判断的简单写法

又如,判断是否有某个目录,如果没有就终止脚本执行,罗嗦一些的写法如下:

Bash代码  
  1. if [ ! -d "$DIR" ]; then   
  2.     exit 1  
  3. fi  
 

简洁的写法如下:

Bash代码  
  1. [ -d "$DIR" ] || exit 1  

 

查找字符串

好多人习惯上这样写:

Bash代码  
  1. cat /etc/passwd | grep root  

其实下面的写法更好,不需要执行cat命令、不需要管道线:

Java代码  
  1. grep root /etc/passwd  

 

here document的写法

一般人都这样写:

Bash代码  
  1. if true; then   
  2.     cat >some.txt <<EOF   
  3. 123  
  4. 345  
  5. 567  
  6. 789  
  7. EOF   
  8. fi  
 

这样写,最后那个EOF就要顶格写,破坏了程序应有的缩进格式,最好如下写法:

Bash代码  
  1. if true; then   
  2.     cat >some.txt <<-EOF   
  3.         123  
  4.         345  
  5.         567  
  6.         789  
  7.     EOF   
  8. fi  
 
注意EOF前面的减号,数据前面都用制表符,不能用空格。

读取文件的第一行

很简单:

Bash代码  
  1. head -1 file.txt  
 

如果用sed来实现,可以是:

Bash代码  
  1. sed -n '1p' file.txt  
 

但上面这个命令会导致整个文件都会读取一遍,对于大数据量的文件效率实在不高。如果能够在读取完了1行之后,就不再读取呢,下面的命令行可以做到:

Bash代码  
  1. ed -n '1p;1q' file.txt  

检索指定id的用户名

通常想到的方式是:

Bash代码  
  1. grep 502 /etc/passwd | cut -d: -f1    

 

或者这样:

Bash代码  
  1. grep 502 /etc/passwd | awk -F":" '{print $1}'    

 

其实一条awk命令就可以做到,不需要用到管道线:

Bash代码  
  1. awk -F":" '$3==502{print $1}' /etc/passwd    

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多