Skip to content

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 root

1.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
                        执行动作
                    fi

1.6 for循环控制

  1. 根据值循环

    for 变量名 in 值1 值2 值3
    do
                执行动作
    done
    如:
    for i in 1 2 3
    do
                echo $i;
    done
  2. 根据命令循环

    for 变量名 in `命令`
    do
                执行动作
    done
    
    如:
    for i in `seq 1 3`
    do
                echo $i;
    done
  3. 根据条件循环

    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