shell常用命令
1.1 grep命令
grep应用场景:通常对数据进行 行的提取
语法:grep [选项]...[内容]...[file]
-v:#对内容进行取反提取
-n:#对提取的内容显示行号
-w:#精确匹配
-i:#忽略大小写
^:#匹配开头行首
-E:#正则匹配
1.2 处理海量数据之cut命令
cut应用场景:通常对数据进行列的提取
语法:cut [选项]...[file]
注意:不加-d选项,默认为制表符(tab键),不是空格
-d:#指定分割符
-f:#指定截取区域
-c:#以字符为单位进行分割
#以':'为分隔符,截取出/etc/passwd的第一列跟第三列
cut -d ':' -f 1,3 /etc/passwd
#以':'为分隔符,截取出/etc/passwd的第一列到第三列
cut -d ':' -f 1-3 /etc/passwd
#以':'为分隔符,截取出/etc/passwd的第二列到最后一列
cut -d ':' -f 2- /etc/passwd
#截取/etc/passwd文件从第二个字符到第九个字符
cut -c 2-9 /etc/passwd
#截取linux上面所有可登陆普通用户,/bin/bash#代表可以登录的用户,/sbin/nologin #代表不可以登录的用户
grep '/bin/bash' /etc/passwd | cut -d ':' -f 1 | grep -v root1.3 awk命令
awk的简介:其实一门编程语言,支持条件判断,数组,循环等功能,与grep,sed被称为linux三剑客 之所以叫AWK是因为取其三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的Family Name的首字符
awk的应用场景:通常对数据进行列的提取
语法:
awk '条件 {执行动作}' 文件名
awk '条件1 {执行动作} 条件2 {执行动作} ...' 文件名
awk [选项] '条件1 {执行动作} 条件2 {执行动作} ...' 文件名
参数:
-F:#指定分割符
BEGIN:#在读取所有行内容前就开始执行,常常被用于修改内置变量的值
FS:#BEGIN时定义分割符
END:#结束的时候 执行
NR:#行号
print:#打印出内容,默认会自动换行
\t:#制表符
\n:#换行符
printf:#格式化输出,不会自动换行。
命令参数如下
- %ns:字符串型,n代表有多少个字符;
- %ni:整型,n代表输出几个数字;
- %.nf:浮点型,n代表的是小数点后有多少个小数
特殊要点与举例说明:
#格式化输入参数 printf '%s\t%s\t%s\t%s\t%s\t%s\n' 1 2 3 4 5 6 #硬盘使用率,$1 $后面跟着的数字表示提取第几列 df -h |grep /dev/vda1 | awk '{printf "硬盘的使用率是:"} {print $5 }' df -h |grep /dev/vda1 | awk '{print $5}' #解决bc计算器小数点前面的0丢失问题 echo "scale=2; 0.13 + 0.1" | bc | awk '{printf "%.2f\n", $0}' #指定分隔符 cat /etc/passwd | awk -F":" '{print $1}' cat /etc/passwd | awk 'BEGIN {FS=":"} {print $1}' #获取第二行的第五列数据 df -h | awk 'NR==2 {print $5}'
1.4 sed命令
sed的应用场景:主要对数据进行处理(选取,新增,替换,删除,搜索)
sed语法:sed 选项 文件名
参数:注意,如果不加 -i参数,都是对输出内容进行操作,不会对源文件进行操作
-n:#把匹配到的行输出打印到屏幕
p:#以行为单位进行查询,通常与-n一起使用
d:#删除
a:#在行的下面插入新的内容
i:#在行的上面插入新的内容
c:#替换
-i:#对源文件进行修改(高危操作,慎用,用之前需要备份源文件)
-e:#表示可以执行多条动作
例子
#查询第二行的数据
df -h | sed -n '2p'
#删除第二行
df -h |sed '2d' df.txt
#在第二行下面插入新行
df -h |sed '2a 1234567890'
#在第二行上面插入新行
df -h |sed '2i 1234567890'
#替换内容 将0%替换成100%
df -h |sed 's/0%/100%/g'
#在文件中搜索100%的的行
df -h | sed -n '/100%/p'
#执行多条命令,先替换值再输出
df -h | sed -n -e 's/0%/100%/g' -e '/100%/p'1.5 if 循环控制
- 单个判断(单分支循环):
if[条件判断]; then 执行动作 fi结束
if [ 条件判断 ];
then
执行动作
fi增加else判断
if [ 条件判断 ];
then
执行动作
else
执行动作
fi- 多个判断(多分支循环):
if [条件判断];
then
执行动作
elif [条件判断];
then
执行动作
elif [条件判断];
then
执行动作
fi1.6 for循环控制
根据值循环
for 变量名 in 值1 值2 值3 do 执行动作 done 如: for i in 1 2 3 do echo $i; done根据命令循环
for 变量名 in `命令` do 执行动作 done 如: for i in `seq 1 3` do echo $i; done根据条件循环
for ((条件)) do 执行动作 done 如: for ((i=1;i<4;i++)) do echo $i; done
1.7 case循环控制
应用场景:case循环常使用于多重分支,与if不同的是,if可以判断多个条件,case一次只能判断一种条件
语法结构:
case 变量 in
值1 )
执行动作1
;;
值2 )
执行动作2
;;
值3 )
执行动作3
;;
esac
如:
case $i in
1 )
echo '1';
;;
2 )
echo '2';
;;
3 )
echo '3';
;;
* )
echo '输入有误';
;;
esac二、while 循环
应用场景:while循环是条件循环也是不定循环,只要条件判断式成立,循环就会一直进行着。直到判断式不成立 或者 选择跳出循环 才会结束。注意结束条件,防止死循环
语法结构:
while [ 条件判断式 ]
do
执行动作
done
如:
i=0;
sum=0;
while[ $i lt 10]
do
sum=$(($sum+$i))
i=$((i+1))
done
echo 'sum='$sum