应届生应该掌握的Shell基础命令

find:查找命令

由于Linux系统大部分都是应用于服务器上,所以查询数据的时候并没有图形化界面查找数据的便捷性。

语法:

find [path] [选项] 参数

选项:

-name
按文件名查询

-perm
按文件权限查询

-size
按文件的大小查找

-user
按用户(属主)查询

-group
按用户组查询

-type
按文件的类型查询

b - 块设备文件。

d - 目录。

c - 字符设备文件。

p - 管道文件。

l - 符号链接文件。 (这是个小写的L)

f - 普通文件。

案例:

查找jdk安装的目录。

bash

find / -name java

查找当前系统中所有的.log后缀名的文件

bash

find / -name “*.log”

查找系统中/home目录下的非普通文件

bash

find /home ! -type f

查找当前用户/home目录下权限为700的文件

#bash

find /home -perm 700

查找/dev目录下的块设备文件

#bash

find /dev -type b

sed:

介绍:

sed本身是一个逐行处理工具,会逐行处理到文件的结束。默认情况下不修改源文件,因为sed是将源文件内容逐行copy到一个临时缓冲区(模式空间),对其进行编辑,行处理结束后,将其输出到屏幕上,也可以通过数据重定向将结果导入到新的文件中去。

sed本身提供修改源文件的选项。但是如果修改源文件时,结果内容并不会发送到屏幕上。

语法:

sed [option] “[action]” [filename]

选项:

-e
允许对输入数据应用多条sed命令进行编辑。

-i
表示直接操作源文件

动作:

s:
字符串匹配/查找

i:
插入

a:
追加

d:
删除

c:
替换

项目 A 注意:选项和动作的字母i不是同样的功能。

案例:

源文件内容(demo):

hello teduhadoop

hello hadoop

hello hdfs ,hi sed

1、将全文的h替换为H。

bash

sed “s/h/H/g” demo

2、修改全文的h/H,第一个l/L

bash

sed -e “s/h/H/g” -e “s/l/L/1” demo

or

多条指令的另外一种写法:

sed “s/h/H/g;s/l/L/1” demo

3、修改全文的第一个和第二个h/H

bash

sed “s/h/H/1;s/h/H/1” demo

4、部分文件中,由于不知道是第几行,且文件中存在多个相同的字符串时,如何修改。

eth0文件内容:

DEVICE=eth0

HWADDR=00:0c:29:37:f6:95

TYPE=Ethernet

UUID=5c4fcaf0-7f4f-4ab1-8dee-a96aecb23823

ONBOOT=no

NM_CONTROLLED=yes

BOOTPROTO=dhcp

DNS2=8.8.8.8

DNS1=114.114.114.114

IPV6INIT=no

USERCTL=no

PEERDNS=yes

将文件中的ONBOOT=no修改为ONBOOT=yes

bash

sed -i “s/ONBOOT=no/ONBOOT=yes/g” eth0

5、在文件中进行插入新的内容:

源文件内容:

hello teduhadoop

hello hadoop

hello hdfs ,hi sed

5.1、在第一行插入内容"hello bigdata"

bash

sed “1 i hello bigdata” demo

5.2、在第一行追加内容"hello 小强"

bash

sed “1 a hello 小强” demo

6、删除匹配的行

bash

sed “/hdfs/d” demo

表示将匹配的到hdfs的整行删除,如果匹配的内容是h的话,当前文件的内容会被全部删除。

grep:

这是一款强大文本搜索工具选项:

-number
同时显示匹配行上下的n行

-b,–byte-offset
印匹配行前面打印该行所在的块号码。

-c,–count
只打印匹配的行数,不显示匹配的内容。

-i,–ignore-case
忽略大小写差别。

-q,–quiet
取消显示,只返回退出状态。0则表示找到了匹配的行。

–color
将匹配内容上色区分

-n,–line-number
在匹配的行前面打印行号。

-v,–revert-match
反检索,只显示不匹配的行。

#bash

cd /root

ls |grep -2 log #匹配上下两行

ls |grep -n log #匹配行号

ls | grep log --color

tail:

文本监控,通常情况下用于监视文件的增长。

场景:

大数据环境中,很多软件在启动时,不会将真正的启动/过程日志打印在屏幕上,因为内容繁多,会影响程序员观察启动过程中,哪个进程没有启动。像此种场景,我们就可以利用tail工具用来监视该软件启动日志文件的实际内容。

语法:

tail [选项] fileName

选项:

-f
用于监控文件的增长!!!

-n
从指定的行中进行监控文件的内容

cut:

cut命令在文件中负责剪切数据用的

选项:

-b
字节

-c
字符

-f
提取第几列

-d
按指定分隔符分割列

案例:

源文件内容:

192.168.1.1

192.168.1.3

192.168.1.5

192.168.1.4

截取第11个字节:

bash

cut -b 11 demo

截取第7-9的字节

bash

cut -b 7-9 demo

截取最后一个字节进行排序:

bash

cut -b 11 demo | sort

以点为分隔符 获取第二个字段

bash

cut -d . -f 2 demo

历史命令:

history

该命令可以用来查看Linux系统中曾经执行过的命令(默认1000条)。

用法:

!!
运行上一条命令

!88
运行第88条命令

!88 /test
运行第88条命令并在命令后面加上/test (可以用ls举例)

!ls
运行上一个ls命令

!ls:s/CF/l
运行上一个ls命令,其中把CF替换成l

if判断

条件判断语句:

语法:

if语法

#!/bin/bash

a=10

b=10

if [ $a -eq $b ];then

echo “两个数相等”

fi

if else语法

#!/bin/bash

string=“hello”

string1=“HELLO”

if test $string = $string1

then

echo “两个字符串一样”

else

echo “两个字符串不一样”

fi

if else-if else语法

以下实例判断两个变量是否相等:

a=10
b=20
if [ $a == $b ]
then
echo “a 等于 b”
elif [ $a -gt $b ]
then
echo “a 大于 b”
elif [ $a -lt $b ]
then
echo “a 小于 b”
else
echo “没有符合的条件”
fi

test判断

test判断:

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

数值测试

参数
说明

-eq
等于则为真

-ne
不等于则为真

-gt
大于则为真

-ge
大于等于则为真

-lt
小于则为真

-le
小于等于则为真

实例演示:

#!/bin/bash

num1=100
num2=100
if test $[num1] -eq $[num2]
then
echo ‘两个数相等!’
else
echo ‘两个数不相等!’
fi

字符串测试

参数
说明

=
等于则为真

!=
不相等则为真

-z 字符串
字符串的长度为零则为真

-n 字符串
字符串的长度不为零则为真

实例演示:

#!/bin/bash

num1=“piaolaoshi”
num2=“PIAOLAOSHI”
if test $num1 = $num2
then
echo ‘两个字符串相等!’
else
echo ‘两个字符串不相等!’
fi

文件测试

参数
说明

-e 文件名
如果文件存在则为真

-r 文件名
如果文件存在且可读则为真

-w 文件名
如果文件存在且可写则为真

-x 文件名
如果文件存在且可执行则为真

-s 文件名
如果文件存在且至少有一个字符则为真

-d 文件名
如果文件存在且为目录则为真

-f 文件名
如果文件存在且为普通文件则为真

-c 文件名
如果文件存在且为字符型特殊文件则为真

-b 文件名
如果文件存在且为块特殊文件则为真

实例演示:

#!/bin/bash

cd /bin
if test -e ./bash
then
echo ‘文件已存在!’
else
echo ‘文件不存在!’
fi

另外,Shell还提供了与( -a )、或( -o )、非( ! )三个逻辑操作符用于将测试条件连接起来,其优先级为:"!“最高,”-a"次之,"-o"最低。例如:

#!/bin/bash

cd /bin
if test -e ./notFile -o -e ./bash
then
echo ‘至少有一个文件存在!’
else
echo ‘两个文件都不存在’
fi

发布了45 篇原创文章 · 获赞 50 · 访问量 2037

猜你喜欢

转载自blog.csdn.net/zhaoyi666/article/details/105259139