linux 系统 Shell语言 基础
第一章 Shell 编程
1 、 概述
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序,如图所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HFcIaF9w-1600351898108)(file:///C:\Users\ibm\AppData\Local\Temp\ksohtml2380\wps1.jpg)]
Shell还是一个功能相当强大的编程语言,易编写、易调试、灵活性强。Shell是解释执行的脚本语言,所谓脚本语言就是不用编译就可以直接执行的语言。在Shell中可以调用Linux系统命令。
2、Shell脚本
1.脚本格式
(1)脚本以#!/bin/bash开头
(2)脚本必须有可执行权限
(可用 chmod +x 文件名 来给该文件添加可执行权限)
2.第一个Shell脚本
(1)需求:创建一个Shell脚本,输出helloworld
(2)实操:
[root@linux01 lianxi01]# vi jiaoben01.sh
#进入vi编辑器进行编辑,在jiaoben01.sh中输入如下内容
#!/bin/bash
echo "helloword"
#shift+ZZ保存退出
[root@linux01 lianxi01]# sh jiaoben01.sh
helloword
(3)命令批处理实操: 在 tmp下创建a.txt
[root@linux01 lianxi01]# vi jiaoben01.sh
#进入vi编辑器进行编辑,在jiaoben01.sh中输入如下内容
#!/bin/bash
cd /tmp
touch a.txt
echo “i love shell” >> a.txt
mv a.txt a2.txt
#shift+ZZ保存退出
[root@linux01 lianxi01]# cd /tmp
[root@linux01 tmp]# ll
总用量 136
-rw-r--r--. 1 root root 19 9月 16 16:04 a2.txt #a2已经存在
drwx------. 2 501 501 4096 9月 15 14:57 keyring-2u4Txw
drwx------. 2 501 501 4096 9月 15 14:58 keyring-KbUX6s
drwx------. 2 root root 4096 9月 16 09:53 keyring-QZQXNG
drwx------. 2 gdm gdm 4096 9月 16 09:53 orbit-gdm
[root@linux01 tmp]# cat a2.txt
“i love shell”
3.脚本的常用执行方式
第一种:输入脚本的绝对路径或相对路径
(1)首先要赋予文件的可执行(-x)权限
法一:
[root@linux01 lianxi]# ll
总用量 12
drwxr-xr-x. 3 root root 4096 9月 15 21:51 h1
drwxr-xr-x. 2 root root 4096 9月 15 21:36 h11
-rw-r--r--. 1 root root 110 9月 16 17:11 jiaoben.sh #文件现在没有可执行权限(-x)
[root@linux01 lianxi]# chmod +x jiaoben.sh #赋予jiaoben.sh文件的可执行(-x)权限
[root@linux01 lianxi]# ll
总用量 12
drwxr-xr-x. 3 root root 4096 9月 15 21:51 h1
drwxr-xr-x. 2 root root 4096 9月 15 21:36 h11
-rwxr-xr-x. 1 root root 110 9月 16 17:11 jiaoben.sh #文件现在有了可执行权限
#注:chmod 还可以赋予文件其他权限,比如-r/-w/-x
法二:
[root@linux01 lianxi]# ll
总用量 12
drwxr-xr-x. 3 root root 4096 9月 15 21:51 h1
drwxr-xr-x. 2 root root 4096 9月 15 21:36 h11
-rw-r--r--. 1 root root 110 9月 16 17:11 jiaoben.sh #文件现在没有可执行权限(-x)
[root@linux01 lianxi]# chmod 755 jiaoben.sh
[root@linux01 lianxi]# ll
总用量 12
drwxr-xr-x. 3 root root 4096 9月 15 21:51 h1
drwxr-xr-x. 2 root root 4096 9月 15 21:36 h11
-rwxr-xr-x. 1 root root 110 9月 16 17:11 jiaoben.sh #文件现在有了可执行权限
(2)执行脚本
直接全路径执行:
[root@linux01 lianxi]# vi jiaoben.sh #进入vi编辑器
#对jiaoben.sh文件进行编辑
#!/bin/bash
echo $a
#保存退出以后再执行
[root@linux01 lianxi]# export a=100 #全局变量
#执行脚本方式一
[root@linux01 lianxi]# ./jiaoben.sh #./必须写!!!
100
#以下为方式二
[root@linux01 lianxi]# sh jiaoben.sh
100
第二种:bash或sh 脚本(不用赋予脚本+x权限)
#通过绝对路径
[root@linux02 shell]# sh /root/helloWorld.sh
#使用sh
[root@linux02 shell]# sh helloWorld.sh
3、Shell中的变量
1.Linux Shell中的变量分为,系统变量和用户自定义变量。
2.系统变量: H O M E 、 HOME、 HOME、PWD、 S H E L L 、 SHELL、 SHELL、USER等等
3.显示当前shell中所有变量:set
3.1 定义变量
1.基本语法
(1)定义变量:变量=值
(2)撤销变量:unset 变量
(3)声明静态变量:readonly变量,注意:不能unset
2.变量定义规则
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
*(2)等号两侧不能有空格*
*(3)********在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。*
(4)变量的值如果有空格,需要使用双引号或单引号包括
3.案例实操
(1)定义变量A
A=8
(2)撤销变量A
unset A
(3)声明静态的变量B=2,不能unset
readonly B=2
(4)可把变量提升为全局环境变量,可供其他shell程序使用
export 变量名
[root@linux01 lianxi]# export a=100
[root@linux01 lianxi]# echo $a
100
3.2 将命令的返回值赋给变量
1.A=``ls -la反引号,运行里面的命令,并把结果返回给变量A
2.A=$(ls -la) 等价于反引号
3.3 位置参数变量
1.基本语法
$n (功能描述:n为数字,$0代表命令本身,$1- 9 代 表 第 一 到 第 九 个 参 数 , 十 以 上 的 参 数 , 十 以 上 的 参 数 需 要 用 大 括 号 包 含 , 如 9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如 9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如{10})
∗ ( 功 能 描 述 : 这 个 变 量 代 表 命 令 行 中 所 有 的 参 数 , * (功能描述:这个变量代表命令行中所有的参数, ∗(功能描述:这个变量代表命令行中所有的参数,*把所有的参数看成一个整体)
@ ( 功 能 描 述 : 这 个 变 量 也 代 表 命 令 行 中 所 有 的 参 数 , 不 过 @ (功能描述:这个变量也代表命令行中所有的参数,不过 @(功能描述:这个变量也代表命令行中所有的参数,不过@把每个参数区分对待)
$# (功能描述:这个变量代表命令行中所有参数的个数),常用于循环。
2.案例实操
(1)输出输入的的参数1,参数2,所有参数,参数个数
#!/bin/bash
echo “$0 $1 $2”
echo “$*”
echo “$@”
echo “$#”
(3) ∗ 与 *与 ∗与@的区别
$*
中的所有参数看成是一个整体,所以这个for循环只会循环一次
#$@
中的每个参数都看成是独立的,所以“$@”中有几个参数,就会循环几次
a) ∗ 和 *和 ∗和@都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$1 2 … 2 … 2…n的形式输出所有参数
b)当它们被双引号“”包含时,“$*”会将所有的参数作为一个整体,以“$1 2 … 2 … 2…n”的形式输出所有参数;“$@”会将各个参数分开,以“$1” “ 2 ” … ” 2”…” 2”…”n”的形式输出所有参数
3.4 预定义变量
1.基本语法
$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
4、 运算符
1.基本语法
(1)“ ( ( 运 算 式 ) ) ” 或 “ ((运算式))”或“ ((运算式))”或“[运算式]”
(2)expr m + n
*注意********:********expr运算符********和各种运算符号之********间********都********要有空格*
(3)expr m - n
(4)expr \ *, /, % 乘,除,取余
例如:
[root@linux01 lianxi01]# echo $((2-4))
-2 #得到结果
[root@linux01 lianxi01]# a=`expr 2 + 4` #是隔音符号``,而不是单引号'',注意运算符之间要用空格隔开
[root@linux01 lianxi01]# echo $a
6
[root@linux01 lianxi01]# expr 2 + 1
3
[root@linux01 lianxi01]# expr 2 \* 1
2
2.案例实操:计算(2+3)X4的值
(1)采用$[运算式]方式
[root@linux01 lianxi01]# a=$[(2+3)*4]
[root@linux01 lianxi01]# echo $a
20
[root@linux01 lianxi01]# echo $[(2+3)*4]
20
(2)expr分步计算
[root@linux01 lianxi01]# a=`expr 2 + 3`
[root@linux01 lianxi01]# echo $a
5
[root@linux01 lianxi01]# expr $a \* 4
20
(3)expr一步完成计算
[root@linux01 lianxi01]# expr `expr 2 + 3` \* 4
20
5 、条件判断
5.1 判断语句
1.基本语法
[ condition条件 ](注意condition条件前后要有空格)
非空返回true,空为false
可使用$?验证,执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误true,其他任何值表明有错误false)
2.案例实操
[root@linux01 lianxi01]# [ tmp ]
[root@linux01 lianxi01]# echo $?
0 #0,表示非空true
[root@linux01 lianxi01]# [ ]
[root@linux01 lianxi01]# echo $?
1 #1,表示非空false
[root@linux01 lianxi01]# [ tmp ]&& echo true || echo false
true #&& 表示前一条命令执行成功时,才执行后一条命令
[root@linux01 lianxi01]# [ ]&& echo true || echo false
false || 表示上一条命令执行失败后,才执行下一条命令
5.2 常用判断条件
1.两个整数之间比较
= 字符串比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
2.按照文件权限进行判断
-r 有读的权限
-w 有写的权限
-x 有执行的权限
3.按照文件类型进行判断
-f 文件存在并且是一个常规的文件
-e 文件存在
-d 文件存在并是一个目录
4.案例实操
(1) 比较两个字符串是否相等
[root@linux01 lianxi01]# a=100
[root@linux01 lianxi01]# f=100
[root@linux01 lianxi01]# [ a = f ]&& echo true || echo false
false
[root@linux01 lianxi01]# [ $a = $f ]&& echo true || echo false
true
[root@linux01 lianxi01]# a="aa"
[root@linux01 lianxi01]# f="aa"
[root@linux01 lianxi01]# [ $a = $f ]&& echo true || echo false #要用变量a里的值,必须用$
true
[root@linux01 lianxi01]# c="cc"
[root@linux01 lianxi01]# [ $a = $c ]&& echo true || echo false
false
[root@linux01 lianxi01]# [ "aa" = "cc" ]&& echo true || echo false
false
[root@linux01 lianxi01]# [ "cc" = "cc" ]&& echo true || echo false
true
(2)23是否大于等于22
[root@linux01 lianxi01]# a=122
[root@linux01 lianxi01]# c=12
[root@linux01 lianxi01]# [ $a -lt $c ]&& echo true || echo false
false
[root@linux01 lianxi01]# f=11
[root@linux01 lianxi01]# [ $f -lt $c ]&& echo true || echo false
true
(3)student.txt是否具有写权限
[root@linux01 lianxi01]# [ -x jiaoben.sh ]
[root@linux01 lianxi01]# echo $?
0
[root@linux01 lianxi01]# ll
总用量 12
drwxr-xr-x. 2 root root 4096 9月 15 20:43 day17
-rw-r--r--. 1 root root 69 9月 16 11:50 jiaoben01.sh
-rwxrwxr--. 1 root root 26 9月 16 10:36 jiaoben.sh
(4)/root/install.log目录中的文件是否存在
[root@linux01 lianxi01]# [ -e /root/install.log ] #查找文件夹是否存在
[root@linux01 lianxi01]# echo $?
0
[root@linux01 lianxi01]# [ -e /root/tmp ]
[root@linux01 lianxi01]# echo $?
1
[root@linux01 lianxi01]# [ -e /root/lianxi/h1/h2/txt01 ] #查找文件是否存在
[root@linux01 lianxi01]# echo $?
0
6 、流程控制
6.1 if 判断
1.基本语法
if [ command ];then
符合该条件执行的语句
elif [ command ];then
符合该条件执行的语句
else
符合该条件执行的语句
fi
*或者*
if [ 条件判断式 ]
then
符合该条件执行的语句
elif [ 条件判断式 ]
then
符合该条件执行的语句
else
符合该条件执行的语句
fi
*注意事项:*
(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格
(2)****if后要有空格****
(3)判断时等号前后有空格
(4)这里的then 与fi ,相当于java中的一对花括号{}
2.案例实操
[root@linux01 lianxi01]# vi jiaoben01.sh #编辑jiaoben01.sh 里的内容,内容如下
#!/bin/bash
if [ $1 -gt 1 ]
then
echo "数字大于1"
elif [ $1 -lt 1 ]
then
echo "数字小于1"
else
echo "数字为1"
fi
#shift+zz保存退出以后回到如下:
[root@linux01 lianxi01]# sh jiaoben01.sh 0 #运行脚本文件jiaoben01.sh
数字小于1
[root@linux01 lianxi01]# sh jiaoben01.sh 1
数字为1
[root@linux01 lianxi01]# sh jiaoben01.sh 2
数字大于1
再例如:
[root@linux01 lianxi]# vi jiaoben.sh
#编辑jiaoben01.sh 里的内容,内容如下:
#!/bin/bash
if [ $[$1 % 2] = 0 ]
then
echo "偶数"
else
echo "奇数"
fi
#shift+zz保存退出以后回到如下:
[root@linux01 lianxi]# sh jiaoben.sh 2
偶数
[root@linux01 lianxi]# sh jiaoben.sh 1
奇数
6.2 case 语句
1.基本语法
case $变量名 in
“值1”)
如果变量的值等于值1,则执行程序1
;;
“值2”)
如果变量的值等于值2,则执行程序2
;;
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
2 .****注意事项:****
-
case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
-
双分号“;;”表示命令序列结束。
-
最后的“*)”表示默认模式,相当于java中的default。
3.案例实操
[root@linux01 lianxi]# vi jiaoben.sh
#编辑jiaoben.sh 里的内容,内容如下:
#!/bin/bash
case $1 in
"1")
echo "a=1"
;;
"2")
echo "a=2"
;;
*)
echo "other"
;;
esac
#shift+zz保存退出以后回到如下:
[root@linux01 lianxi]# sh jiaoben.sh 1
a=1
[root@linux01 lianxi]# sh jiaoben.sh 2
a=2
[root@linux01 lianxi]# sh jiaoben.sh 3
other
6.3 for 循环
1.基本语法1
for 变量 in 值1 值2 值3
do
程序
done
注:①do和done相当于一对花括号{}
②在shell语言里也有break,但是break只能在循环语句中用,不能用在if和case中
2.案例实操
(1)打印输入参数
[root@linux02 shell]# vi fortest.sh
#
\#!/bin/bash
for i in "$*"
do
echo "The num is $i"
done
echo "--------------"
for i in "$@"
do
echo "The num is $i"
done
#退出vi编辑器以后
[root@linux02 shell]# sh fortest.sh 1 2 3 4
The num is 1 2 3 4
\--------------
The num is 1
The num is 2
The num is 3
The num is 4
3.基本语法2
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
注:do和done相当于一对花括号{}
4.案例实操
#!/bin/bash
#判断素数
for ((i=2;i<=$1;i++))
do
if [ $(($1 % $i)) = 0 ]
then
if [ $i = $1 ]
then
echo 是素数
else
echo 不是素数
break
fi
fi
done
(1)打印1到100
#!/bin/bash
for((i=1;i<=100;i++))
do
echo $i
done
(2)从1加到100
#!/bin/bash
s=0
for((i=1;i<=100;i++))
do
s=$[$s+$i]
done
echo "$s"
6.4 while 循环
1.基本语法
while [ 条件判断式 ]
do
程序
done
注:do和done相当于一对花括号{}
2.案例实操
(1)从1加到100
[root@linux01 day18]# vi txt3.sh
# 在txt3.sh文件中进行编辑
#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
s=$[$s+$i]
i=$[$i+1]
done
echo $s
#shift+ zz保存退出以后,执行以下内容
[root@linux01 day18]# sh txt3.sh #执行脚本
5050
7 、read读取控制台输入
1.基本语法
read(选项)(参数)
选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒)。
参数
变量:指定读取值的变量名
2.案例实操
读取控制台输入的名称
[root@linux01 ~]# read -t 5 -p "请在5秒内输入名字: " name
请在5秒内输入名字: 123
[root@linux01 ~]# echo $name
123
[root@linux01 ~]# read -p "请输入名字: " name
请输入名字: nihao
[root@linux01 ~]# echo $name
nihao
[root@linux01 ~]#
第二章 Linux定时任务
Linux运维:定时备份(重要的业务数据、mysql数据库备份)、统计健康状态
JavaWeb中:定时统计,月、周、日、年统计
1、crond 服务管理
注:Crontab -e下创建所有的定时任务;
即:一个系统只有一个定时文件,所有的定时任务都在该文件里编写和执行,其文件后缀在一直变化,就像进程一样,但是实质还是它自己。
1.重新启动crond服务
[root@linux01 ~]# service crond restart
停止 crond: [确定]
正在启动 crond: [确定]
2 crontab 定时任务设置
1.基本语法
crontab [选项]
2.选项说明
选项 | 功能 |
---|---|
-e | 编辑crontab定时任务 |
-l | 查询crontab任务 |
-r | 删除当前用户所有的crontab任务 |
3.例如
[root@linux01 tmp]# crontab -e
#进入crontab编辑界面。会打开vi编辑你的工作。
* * * * * echo 1 >> /root/lianxi/t1.txt
~
~
"/tmp/crontab.uRiCLk" 1L, 41C
解释:
* * * * * 执行的任务
项目 | 含义 | 范围 |
---|---|---|
第一个“*” | 一小时当中的第几分钟 | 0-59 |
第二个“*” | 一天当中的第几小时 | 0-23 |
第三个“*” | 一个月当中的第几天 | 1-31 |
第四个“*” | 一年当中的第几月 | 1-12 |
第五个“*” | 一周当中的星期几 | 0-7(0和7都代表星期日) |
(2)特殊符号
特殊符号 | 含义 |
---|---|
* | 代表任何时间。比如第一个“*”就代表一小时中每分钟都执行一次的意思。 |
, | 代表不连续的时间。比如“0 8,12,16 * * * 命令”,就代表在每天的8点0分,12点0分,16点0分都执行一次命令 |
- | 代表连续的时间范围。比如“0 5 * * 1-6命令”,代表在周一到周六的凌晨5点0分执行命令 |
*/n | 代表每隔多久执行一次。比如“*/10 * * * * 命令”,代表每隔10分钟就执行一遍命令 |
(3)特定时间执行命令
时间 | 含义 |
---|---|
45 22 * * * 命令 | 在22点45分执行命令 |
0 17 * * 1 命令 | 每周1 的17点0分执行命令 |
0 5 1,15 * * 命令 | 每月1号和15号的凌晨5点0分执行命令 |
40 4 * * 1-5 命令 | 每周一到周五的凌晨4点40分执行命令 |
*/10 4 * * * 命令 | 每天的凌晨4点,每隔10分钟执行一次命令 |
0 0 1,15 * 1 命令 | 每月1号和15号,每周1的0点0分都会执行命令。注意:星期几和几号最好不要同时出现,因为他们定义的都是天。非常容易让管理员混乱。 |
4.案例实操
(1)每隔1分钟,向 /shell/test.txt文件中添加一个11的数字
*/1 * * * * /bin/echo ”11” >> /shell/test.txt
第三章 Linux系统 补充
1、搜索查找类
1.1 find 查找文件或者目录
find指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件显示在终端。****实时。****
1.基本语法
find [搜索范围] [选项]
2.选项说明
选项 | 功能 |
---|---|
-name<查询方式> | 按照指定的文件名查找模式查找文件 |
-user<用户名> | 查找属于指定用户名所有文件 |
-size<文件大小> | 按照指定的文件大小查找文件。1kb |
3.案例实操
(1)按文件名:根据名称查找/目录下的filename.txt文件。
[root@hadoop101 ~]# find / -name filename.txt
(2)按拥有者:查找/目录下,用户名称为bigdata的文件
[root@hadoop101 ~]# find / -user bigdata
注:目前主机上面所有的进程的PID都以目录的形式存在于/proc目录下
(3)按文件大小:在/home目录下查找大于200m的文件(+n 大于 -n小于 n等于)
[root@hadoop101 ~]find /home -size +204800
2.2 locate快速定位文件路径
locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。****非实时,模糊********匹配********。****
Locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新locate时刻。
1.基本语法
locate 搜索文件
2.经验技巧
由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库。
3.选项说明
选项 | 功能 |
---|---|
-i | 查找时不区分大小写 |
-c | 只显示找到的条目的数目 |
4.案例实操
(1)查询文件夹
[root@hadoop101 ~]# updatedb #更新资料库
[root@hadoop101 ~]# locate -c tmp
-
locate与find 不同:
find 是去硬盘找,locate 只在/var/lib/mlocate资料库中找。
locate的速度比find快,它并不是真的查找,而是查数据库,一般文件数据库在/var/lib/mlocate/mlocate.db中,所以locate的查找并不是实时的,而是以数据库的更新为准。
3.3 grep 过滤查找及“|”管道符
管道符,“|”,表示将前一个命令的处理结果输出传递给后面的命令处理。
grep系列是Linux中使用频率最高的文本查找命令。主要功能在一个或者多个文件中查找特定模式的字符串。如果该行有匹配的字符串,则输出整个行的内容。如果没有匹配的内容,则不输出任何内容。grep命令不改动源文件。
1.基本语法
grep 选项 查找内容 源文件
2.选项说明
选项 | 功能 |
---|---|
-n | 显示匹配行及行号。 |
3.案例实操
[root@linux01 ~]# ls #ls文件下包含如下信息
anaconda-ks.cfg install.log.syslog smartd.conf 模板 图片 下载 桌面
install.log lianxi 公共的 视频 文档 音乐
[root@linux01 ~]# ls | grep "lianxi" #查找ls执行以后得到内容下包含字符串“lianxi”的行,并输出
lianxi
[root@linux01 ~]# ls | grep -n "lianxi" #查找ls执行以后得到内容下包含字符串“lianxi”的行,并输出所在行数
4:lianxi
解释:ls是一个执行语句,执行以后会得到一些文本内容,所以可以进行查找得到内容里是否包含某字符串
有的执行语句,比如 cd 等,不会返回文本内容,所以不能用
再如:
[root@linux01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=00:50:56:20:7B:73
TYPE=Ethernet
UUID=94c6a588-9c65-46bd-9b4f-f2dd7743d503
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.10.101
GATEWAY=192.168.10.2
DNS1=192.168.10.2
[root@linux01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 | grep HWADDR
HWADDR=00:50:56:20:7B:73
[root@linux01 ~]#
再如:
[root@linux01 ~]# vi aa.txt
[root@linux01 ~]# cat aa.txt
aa
bb
cc
dd
ee
[root@linux01 ~]# grep "aa" aa.txt
aa
[root@linux01 ~]# grep -n "aa" aa.txt
1:aa
2、工具
*cut*
cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。
1.基本用法
cut [选项参数] filename – split
说明:默认分隔符是制表符
2.选项参数说明
表1-55
选项参数 | 功能 |
---|---|
-f | 列号,提取第几列 |
-d | 分隔符,按照指定分隔符分割列 |
-b | 以字节为单位进行分割 |
-c | 以字符为单位进行分割 |
3.案例实操
(1)切割每一行第 1到5 个字符
[root@linux01 test]# cp /root/smartd.conf ./cut.txt
说明:复制smartd.conf文件到当前路径并改名为cut.txt
[root@linux01 test]# cut -b 1-5 cut.txt #分隔1-5
说明:只展示每一行的前5个字节,文件本身不受影响
(2)切割app_category.txt 第一列并追加到文件app.txt
在Wordins桌面上有个app_category.txt文件,使用下面语句把桌面上的文件直接拖拽到XShell界面
[root@linux01 ~]# yum install -y lrzsz
(之后就可以直接拖拽windows端的文件到linux的当前路径下)
[root@linux01 ~]# yum install -y lrzsz
已加载插件:fastestmirror, refresh-packagekit, security
设置安装进程
Loading mirror speeds from cached hostfile
* base: mirrors.bfsu.edu.cn
* extras: mirrors.aliyun.com
* updates: mirrors.cn99.com
包 lrzsz-0.12.20-27.1.el6.x86_64 已安装并且是最新版本
无须任何处理
#之后就可以直接拖拽windows端的文件到linux的当前路径下
[root@linux01 ~]# rz -E
rz waiting to receive.
[root@linux01 ~]#
[root@linux01 ~]# cat app_category.txt
微信,社交,nice
QQ,社交,nice
微博,社交,justsoso
爱奇艺,视频,justsoso
腾讯视频,视频,justsoso
优酷,视频,justsoso
快手,视频,nice
抖音,视频,justsoso
掌阅,阅读,justsoso
QQ阅读,阅读,justsoso
咪咕阅读,阅读,justsoso
今日头条,资讯,justsoso
网易新闻,资讯,justsoso
腾讯新闻,资讯,justsoso
饿了么,外卖,justsoso
美团外卖,外卖,justsoso
QQ音乐,音乐,justsoso
酷狗音乐,音乐,justsoso
网易云音乐,音乐,justsoso
淘宝,购物,justsoso
京东,购物,justsoso
拼多多,购物,justsoso
天猫,购物,justsoso
苏宁易购,购物,justsoso
滴滴出行,交通,justsoso
ofo,交通,justsoso
摩拜,交通,justsoso
王者荣耀,游戏,nice
绝地求生:刺激战场,游戏,nice
荒野行动,游戏,justsoso
[root@linux01 ~]#
#进行剪切
[root@linux01 ~]# cut -d , -f 1 app_category.txt >> app.txt
[root@linux01 ~]# cat app.txt
微信
QQ
微博
爱奇艺
腾讯视频
优酷
快手
抖音
掌阅
QQ阅读
咪咕阅读
今日头条
网易新闻
腾讯新闻
饿了么
美团外卖
QQ音乐
酷狗音乐
网易云音乐
淘宝
京东
拼多多
天猫
苏宁易购
滴滴出行
ofo
摩拜
王者荣耀
绝地求生:刺激战场
荒野行动
[root@linux01 ~]#
(3)切割IP地址
[root@linux01 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:50:56:20:7B:73
inet addr:192.168.10.101 Bcast:192.168.10.255 Mask:255.255.255.0
inet6 addr: fe80::250:56ff:fe20:7b73/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:77475 errors:0 dropped:0 overruns:0 frame:0
TX packets:37706 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:26328579 (25.1 MiB) TX bytes:17526202 (16.7 MiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:34 errors:0 dropped:0 overruns:0 frame:0
TX packets:34 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1832 (1.7 KiB) TX bytes:1832 (1.7 KiB)
[root@linux01 ~]# ifconfig eth0 | grep "inet addr" | cut -d: -f2 | cut -d" " -f1
192.168.10.101
[root@linux01 ~]#
求生:刺激战场
荒野行动
[root@linux01 ~]#
(3)切割IP地址
~~~shell
[root@linux01 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:50:56:20:7B:73
inet addr:192.168.10.101 Bcast:192.168.10.255 Mask:255.255.255.0
inet6 addr: fe80::250:56ff:fe20:7b73/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:77475 errors:0 dropped:0 overruns:0 frame:0
TX packets:37706 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:26328579 (25.1 MiB) TX bytes:17526202 (16.7 MiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:34 errors:0 dropped:0 overruns:0 frame:0
TX packets:34 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1832 (1.7 KiB) TX bytes:1832 (1.7 KiB)
[root@linux01 ~]# ifconfig eth0 | grep "inet addr" | cut -d: -f2 | cut -d" " -f1
192.168.10.101
[root@linux01 ~]#