wc:  

        wc [OPTION]... [FILE]...

     -l : 行数

     -w : 单词数

     -c :字节数

        练习:查看passwd文件中有多少行

          wc -l /etc/passwd

cut:  

  cut OPTION... [FILE]...

       -d : CHAR: 以指定的字符为输入分隔符;默认为空白字符;

       -f : FILEDS:挑选出的字段;

        -f# : 指定的单个字段

            -f#,# : 离散的多个字段;例如1,3,7

        #-# :连续的多个字段

 --output-delimiter= : 输出分隔符

        练习:取出/etc/passwd下以冒号分隔的第三个和第五个字段

         cut -d: -f 1,5 /etc/passwd


awk:

  awk -F CHAR '{print $1,$2,...}' file...

  awk -F : /PATTERN/'{print $1,$2}' /etc/passwd

          -F:指定输入分隔符

awk -F: /'^root\>/{print $3}' /etc/passwd


sort:

  sort  [OPTION]...[FILE]...

    -r : 降序排序 

    -u : 相同的行只保留一次

            -t : 指定分隔符

   -k# : 用于做排序比较的字段

    -n : 以数值大小进行排序

    -f : 比较时忽略字符大小写

 

uniq:

    uniq [OPTION]...[INPUT[OUTPUT]]

    -d,--repeated:仅显示重复的行(连续的两行重复才算重复)

    -u,--unique;仅显示不重复的行

    -c,--count;在每行行首显示其出现的次数

diff:

    diff [OPTION]...FILES

    -u:显示上下文默认三行


     注: oldfile是原文件 newfile是修改后的文件 PATCH_FILE是生成的补丁文件

    diff /path/to/oldfile /path/to/newfile > /PATH/TO/PATCH_FILE


patch命令:

    patch [-d dir] [-i pathfile] [-p num] [file]

    -i /PATH/FROM/PATCH_FILE :指明补丁文件路径 把旧的变成新的

    -R or --reverse :还原  把新的变成旧的


     注:给原文件打补丁,成为修改之后的新文件

    patch -i /PATH/TO/PATCH_FILE /path/to/oldfile

     注:给新文件打补丁,还原成老文件

   patch -R /path/to/newfile < /PATH/FROM/PATCH_FILE

bash脚本编程之算数运算:

    +,—

    *,/

    %:取余

    **:次方

算数运算格式:

    let VAR=算数表达式

    VAR=$[算数表达式]

    VAR=$((算数表达式))

    VAR=$(expr $ARG1 $OP $ARG2)

    注:OP含义为运算符;第四种方式空格必须不能省;乘法符号在第四种里面需要转义


练习1:

    求/etc/passwd文件中的root、daemon和shutdown三个用户的id之和;

#!/bin/bash
#
second=`grep -E "^(root|daemon|shutdown)" /etc/passwd | cut -d: -f 3 | head -n 2 | tail -1`
first=`grep -E "^(root|daemon|shutdown)" /etc/passwd | cut -d: -f 3 | head -n 1`
third=`grep -E "^(root|daemon|shutdown)" /etc/passwd | cut -d: -f 3 | tail -1`
let var=$second+$first+$third
echo $var


练习2:

    (1) 求/etc/fstab、/etc/grub2.cfg和/etc/issue文件的行数之和;

     (2) 求上述三个文件中的总空白行数;


#!/bin/bash
#
a=`wc -l /etc/fstab | cut -d" " -f 1`
b=`wc -l /etc/grub2.cfg | cut -d" " -f 1`
c=`wc -l /etc/issue | cut -d" " -f 1`
let d=$a+$b+$c
echo $d


grep "[[:space:]]*\>" /etc/fstab | wc -c    得出总共有多少个空格