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.系统变量:HOME、HOME、HOME、PWD、SHELL、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 .****注意事项:****

  1. case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。

  2. 双分号“;;”表示命令序列结束。

  3. 最后的“*)”表示默认模式,相当于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++))
doif [ $(($1 % $i)) = 0 ]thenif [ $i = $1 ]thenecho 是素数elseecho 不是素数breakfifi
done
(1)打印1到100
#!/bin/bash
for((i=1;i<=100;i++))doecho $idone
(2)从1加到100
#!/bin/bash
s=0
for((i=1;i<=100;i++))
dos=$[$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 ]
dos=$[$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
  1. 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.0inet6 addr: fe80::250:56ff:fe20:7b73/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:77475 errors:0 dropped:0 overruns:0 frame:0TX packets:37706 errors:0 dropped:0 overruns:0 carrier:0collisions: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.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:34 errors:0 dropped:0 overruns:0 frame:0TX packets:34 errors:0 dropped:0 overruns:0 carrier:0collisions: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.0inet6 addr: fe80::250:56ff:fe20:7b73/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:77475 errors:0 dropped:0 overruns:0 frame:0TX packets:37706 errors:0 dropped:0 overruns:0 carrier:0collisions: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.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:34 errors:0 dropped:0 overruns:0 frame:0TX packets:34 errors:0 dropped:0 overruns:0 carrier:0collisions: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 ~]# 

linux 系统 Shell语言 基础相关推荐

  1. Linux系统shell脚本之打印系统的IP信息

    Linux系统shell脚本基础之打印系统的IP信息 一.脚本要求 二.脚本内容 三.执行脚本 一.脚本要求 1.显示服务器的运行状态,并输出提示 2.输出电脑的IP地址等信息 3.将执行输出的信息记 ...

  2. AVI音视频封装格式学习(四)——linux系统C语言AVI格式音视频封装应用

    拖了很久的AVI音视频封装实例,花了一天时间终于调完了,兼容性不是太好,但作为参考学习使用应该没有问题.RIFF和AVI以及WAV格式,可以参考前面的一些文章.这里详细介绍将一个H264视频流和一个2 ...

  3. Linux系统Shell脚本中的echo命令

    Linux系统Shell脚本中的echo命令 echo的作用       输出字符串 格式                  echo  "字符串内容" 一,显示转义字符 转义字符 ...

  4. Linux系统编程——进程基础知识

    Linux系统编程--进程基础知识 1.程序和进程 程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu.内存.打开的文件.设备.锁-) 进程,是一个抽象的概念,与操作系统原理联系紧密.进程 ...

  5. Linux系统C语言遍历系统文件系统,并查询其磁盘使用率(有效磁盘)

    getmntent_r接口示例程序地址:https://github.com/Rtoax/test/tree/master/c/glibc/mntent statfs 接口示例程序地址​​​​​​​: ...

  6. Linux系统shell脚本之批量修改服务器密码

    Linux系统shell脚本之批量修改服务器密码 一.脚本要求 二.脚本内容 三.编辑原始旧密码 四.执行脚本 五.验证密码更改 1.查看更改后的密码文件 2.在远端服务器验证密码 一.脚本要求 可以 ...

  7. linux系统——Shell编程之变量解释

    linux系统--Shell编程之变量解释 - Shell能做什么 自动化批量系统初始化程序 (update,软件安装,时区设置,安全策略-) 自动化批量软件部署程序 (LAMP,LNMP,Tomca ...

  8. linux c 串口 调用命令,Linux系统C语言串口收发

    Linux系统C语言串口收发 Linux系统对串口提供了很好的支持,使我们很容易就能用C语言编写出串口收发程序. 先简单说明一下编写串口收发程序前的准备工作.首先串口收发需要有硬件上的串口,在Linu ...

  9. Linux系统shell脚本之函数的使用

    Linux系统shell脚本之函数的使用 一.函数解释 二.函数参数 1.参数注意事项 2.特殊参数说明 三.函数实例1 四.函数实例2 一.函数解释 1.函数(function)作用:函数可以在sh ...

最新文章

  1. 基于Go的语义解析开源库FMR,“屠榜”模型外的NLP利器
  2. 盘点 6 个被淘汰的 Java 技术,它们都曾经风光过!| CSDN 博文精选
  3. 六大举措建云管理模式助力企业转型升级
  4. 重操JS旧业第十一弹:BOM对象
  5. 解决 Windows Update 更新错误/无法创建还原点 代码 0x80246008
  6. css3 定义选择器
  7. Linux服务之SSH
  8. C#窗体控件-单选按钮控件RadioButton
  9. 丁磊:很多人来网易工作只是为了谋生而不是兴趣
  10. 硬盘分区表知识—详解硬盘MBR
  11. 2015C蓝桥杯C++A:格子中输出(详细讲解)
  12. c# 循环com,分别对串口写入与读取,获取需要的串口信息
  13. 考研计算机网络复试题目整理
  14. NET Framework 4 与.NET Framework 4 Client Profile有什么区别?
  15. python折叠代码_使用region注释,将代码块收(折叠)起来
  16. 一文盘点中国商业航天:民营火箭的两类瓶颈和三大趋势
  17. 初中英语语法(010)-分词
  18. 绑定host:windows与模拟器之绑定host集结
  19. 网络安全运营能力建设
  20. python Crypto.Cipher

热门文章

  1. 西南大学计算机学院推免,2019年西南大学计算机与信息科学学院硕士研究生拟录取名单的公示(不含推免生)...
  2. HTML+CSS大作业——二次元漫画(8页) 漫画网页设计制作 简单静态HTML网页作品 我的漫画网页作业成品 学生漫画网站模板
  3. python实现账号密码登录
  4. 20种硬件工程师必知必会基础元器件|最新更新至8.13
  5. python随笔01(robotframework自动化)
  6. flink-cdc 同步mysql数据到ES时间格式问题。
  7. java.sql.SQLException: Value ”0000-00-00 00:00:00“ can not be represented as java.sql.Timestamp
  8. 江南游——苏州行(2)
  9. 笔记本外接显示器鼠标卡顿、显示器掉帧解决办法
  10. 用Python破解摩斯密码