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 得出总共有多少个空格