5天学会linx内核.docx

上传人:b****6 文档编号:6740262 上传时间:2023-01-09 格式:DOCX 页数:37 大小:903.16KB
下载 相关 举报
5天学会linx内核.docx_第1页
第1页 / 共37页
5天学会linx内核.docx_第2页
第2页 / 共37页
5天学会linx内核.docx_第3页
第3页 / 共37页
5天学会linx内核.docx_第4页
第4页 / 共37页
5天学会linx内核.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

5天学会linx内核.docx

《5天学会linx内核.docx》由会员分享,可在线阅读,更多相关《5天学会linx内核.docx(37页珍藏版)》请在冰豆网上搜索。

5天学会linx内核.docx

5天学会linx内核

 

脚本编写技巧

脚本文件名命名规则

文件名的字符包括

字母、数字、"."、"_"和"-",注意:

脚本的文件名命名不能以数字开头。

脚本文件名的命名,尽量使用英文单词、词组或短句的缩写。

脚本版本管理:

脚本作用.主版本号.修改次数.shell类型

变量命名规范

变量名可以由数字和字母组成

变量名采用全部英文字符小写的方式

变量名称尽量使用缩写,最好不要超过6个字符

${变量名}例:

${port},${ipaddr}…

脚本代码注释规范

脚本代码注释可以使用"#"和";(分号)"两种方式进行注释。

#一般由于描述性的注释,旨在说明代码的作用或怎么使用。

而;通常用于示例性的注释,特别是在一些配置文件中常常会用到,因此我们沿用这两种方式来对我们的脚本进行注释。

引用符号使用规范

尽量少用单引号

对极个特殊字符进行屏蔽特殊含义时,使用\(反斜线)进行屏蔽

使用带引号进行屏蔽字符时,单引号内一般不适用其他引用符号,除非是打印特殊符号本身。

使用反引号进行执行一个shell命令时,反引号内一般加其他引用符号。

脚本函数定义规范

变量名可以由数字和字母组成

使用驼峰命名法(从第二个单词开始,每个单词首字母大写)

名字尽量不使用缩写,除非它是众所周知的

名字可以有两个或三个单词组成,但通常不应多于三个

文本输出排版

第一天课后作业

1、grep"20081011"text.txt取出这一天的数据

2、grep"200804"text.txt取出这一个月的数据

3、grep"200806"text.txt|grep-v"-"取出一个月的上涨数据

4、grep"200807"text.txt|grep-v"-"|wc-l列出有几天是上涨个数,带统计

5、grep"200808"text.txt|sort-k5-n|tail-1判断上涨,然后tail取最后一行

grep"200808"text.txt|sort-k5-r|head-1判断上涨,然后head取第一行

6、grep"200810"text.txt|awk'{if($4>0){print$1,$5}}'取出一月中上涨数据时间和上涨幅

7、grep"200811"text.txt|awk'{if($4>5&&$4<20){print$0}}'判断区间取出整行

脚本代码实例分析1

编写一个shell脚本,执行脚本后自动ping以下地址:

192.168.1.1,192.168.1.31

以上IP地址直接写在脚本之中。

执行完成后,

应显示能够ping通的IP地址和不能够ping通的IP地址

#!

/bin/bash

ifping192.168.1.1-c1

then

echo"192.168.1.1online"

else

echo"192.168.1.1offline"

fi

ifping192.168.1.31-c1

then

echo"192.168.1.31online"

else

echo"192.168.1.31offline"

fi

脚本代码实例分析2

修改分析1,但是从iplist.txt中读取IP

#!

/bin/bash

foripin`catiplist.txt`

do

ifping$ip-c1

then

echo"${ip}online"

else

echo"${ip}offline"

fi

done

脚本代码实例分析3

修改分析2,去除无用的信息

#!

/bin/bash

foripin`catiplist.txt`

do

ifping$ip-c1>/dev/null2>&1

then

echo"${ip}online"

else

echo"${ip}offline"

fi

done

脚本代码实例分析4

修改分析3,生成记录

#!

/bin/bash

>hoststatus.txt

foripin`catiplist.txt`

do

ifping$ip-c1>/dev/null2>&1

then

echo"${ip}online"|tee-ahoststatus.txt

else

echo"${ip}offline"|tee-ahoststatus.txt

fi

done

脚本代码实例分析5

产生一个IP地址池,生成255个IP,并修改分析4,实现多线程ping

#!

/bin/bash

>iplist

foripin`seq1255`

do

echo"192.168.1.${ip}">>iplist

done

#!

/bin/bash

>hoststatus.txt

>temp

fastping()

{

ifping${1}-c1>/dev/null2>&1

then

echo"${ip}online"|tee-atemp

else

echo"${ip}offline"|tee-atemp

fi

}

foripin`catiplist.txt`

do

fastping$ip&

done

wait

sort-t.-k4-ntemp>hoststatus.txt

rmtemp

temp./ping.sh测试一个脚本执行多久

以下是Shell学习1-2天学习笔记

————————-我是分隔符—————————

硬件去执行,内核与硬件之间进行操作。

命令解析器。

shell脚本的组成元素

1.系统命令

2.文本处理工具(sort、grep、sed、awk…)

3.变量

4.条件判断

5.环循结构

6.函数

ShellScriptsCenter(SSC)

———————————————————————————-

非负Grep/awk

几天。

统计Wc

Sort排序sort|head/sed

字段处理awk

数据区域判断awk|wc

显示文本:

echo[选项]文本

-n不要自动换行

-e解析转义符

a发出警告音

c最后不加上换行符号

f换行

r回车

彩色文本

Echo–e“33[40;35m….]”

echo“Hello,world”

echo–e“33[40;35mHell,world33[0m"

sort[选项]输入文件

-o输出文件

-d按字典顺序排序a-z

-n按数字大小输出0-9

-r逆序输出z-a9-0

-k指定分类是域上的数字分类

-t域分割符;用非空格或tab键分割域

more/etc/passwd分页显示

sort–d/etc/passwd|more中间的|是反倒符号。

将前面处理的交给后面处理先排序。

后分页显示

sort–k3–n–r–t:

/etc/passwd|more

从大到小

wc[参数][文件名]

-c统计字符数量

-l统计行数

-w统计单词数量空格区分

diff[选项]文件/目录文件/目录

diff/etc/passwd/etc/passwd.bak

-q仅显示有无差异,不显示详细的信息

-c显示全部内文,并标出不同之处。

-b不检查空格字符的不同

-B不检查空白行

-r比较子目录中的文件。

grep搜索匹配支持正则表达式

grep

-c只打印匹配模式的行编号记数

-I在匹配文本时忽略大小写

-n在每行前显示其行编号

-v逆向输出,打印不匹配的行

-ffile要匹配的字符串列表在filezhong

grep‘[Tt]his'file1.txt设置大小写

grep‘^[^#]‘file2.txt不匹配行首

grep“s…n”file3.txt匹配任意字符

sed行编辑命令

s替代

i插入

a附加

d删除全部匹配的行

D删除首次匹配的行

sed可以做什么(”行”为基础)

删除

改变

添加

插入

替换

示例

sed–n'1,4p'/etc/passwdp是打印-n不显示原文件打印1-4行

sed‘/80/D'file.txt首次出现80的行进行删除

sed‘s/var/usr/g'file.txt将所有的var替换成usrg代表所有

sed'50,$s/help/man/g'file.txt替换从50行到最后一行的help替换为man前49不管

awk可以处理列,也可以处理行,可以定位到第几行,第几列

awk[选项]‘awk脚本'输入文件

-Ffs使用fs作为输入记录的字段分隔符=sort–t

-ffilename从文件filename读取awk_script(awk脚本)

-vvar=value为awk_script设置变量

awk的内置变量

变量

功能

默认

FS=大写F

输入字段分隔符

空格或tab

RS

输入记录分隔符

换行

OFS=outFS

输出字段分隔符

空格或tab

ORS

输出记录分隔符

换行

NF常用

当前记录非空字段的编号

NR常用

从所有文件读入的记录号

示例

awk–F:

‘{printNR,$1,$2}'/etc/passwd

awk–F:

‘{printNR,$1,$NF}'/etc/passwd$NF提取最后一行

awk–F:

‘NR%10==5{PRINTnr,$0}'/etc/passwdNR=当前处理的行数除10求余=5打印当前的行数,进行输出$0整行输出,比如5、15、25打印出来

awk–F:

‘NR==8,NR==13{printNR,$0}'/etc/passwd指定8行和13行。

awk工作原理(工具)

$NF$NR$1第一列$2第二列$0一整行

实际测试

awk–F:

‘{print$1,$3}'/etc/passwd

awk–F:

‘{print$1,$NF}'/etc/passwd

awk–F:

‘{printNR,$1,$NF}'/etc/passwdNR行号

awk–F:

‘NR==5,NR==8{printNR,$1,$NF}'/etc/passwd指定5-8行

awk–F:

‘NR%10==5{printNR,$1,$NF}'/etc/passwd除10求余

课程示例测试

1、grep–v“-”file.txt去除所有带负号的数据-v显示没有的没有的话则显示只有-的

2、wc-lfile.txt显示所有行数grep–v“-”file.txt|wc–l统计所有没有负数的

3、sort–n–r–k4file.txt|sed–n'1p'排序第四列没有分隔符(即空格),-n数字–r从大到小sed管道显示第一行sed–n不显示原文件

sort–n–r–k4file.txt|head-1读取第一个数据head第一行

4、awk‘{if($NF>3){print$0}}'file.txtNF最后一列大于3则打印一整行

5、awk‘{if($4>0,&&$4<15){print$0}}'file.txt列出第四列大于0小于15输出整行

awk‘{if($4>0,&&$4<15){print$0}}'file.txt|wc–l显示行数

练习:

1.grep和awk

awk‘{if($1>200801011){[print$0}}'file.txt

2、

处理命令回顾:

统计文本wc

文本排序sort

文本/目录对比diff

在文件中查找关键行grep/sed

在行文本中添、删、改sed

在列文本中显示指定列awk

在列文本中进行计算awk

在列文本进行条件选择awk

变量

1.获取本机主机名

#hostname

2.获取本系统版本号

#uname-r

3.获取cpu类型

4.获取cpu的工作频率

cat/proc/cpuinfo

5.获取内存使用情况

#free-m

6.获取硬盘使用情况

#df

变量类型及变量操作

1.本地变量(一般所指)

本地变量只存在用户当前shell中,当用户退出当前shell或开器一个新的shell,所设置的变量将会不存在

设置变量

#变量名=变量值

显示变量

#echo${变量名}

假设a=1显示则echo${a}

2.环境变量(用的非常少)

环境变量用于所有用户进程(经常称为子进程)。

登录进程称为父进程。

Shell中执行的用户进程均称为子进程。

不像本地变量,环境变量可用于所有子进程,这包括编辑器、脚本和应用

环境变量在用户注销时会消失,因此最好在$HOME/.bash_profile(/etc/profile)文件里直接定义

3.位置变量(跟脚本和函数有很大的关系)

位置变量表示$0,$1……$9(只有9个)

$0

$1

$2

$3

$4

$5

$6

$7

$8

$9

脚本名字

A

B

C

D

E

F

G

H

I

$0=当前脚本名称

向脚本中使用位置参数

向系统命令传递参数

4.特殊变量

$#传递到脚本的参数列表个数

$*($@)以一个单字符串显示所有向脚本传递的参数

$$脚本运行的当前进程ID号

$?

显示最后命令的退出状态。

0表示没有错误,其他任何值表明有错误。

引用的必要性

变量操作中,脚本执行变量赋值时最容易犯的一个错误就是引用错误

例:

echoabc*

echoabc‘*'

echoHitthestarbuttontoexit*

引用的方式

双引号(“)(需要排除以下几个)

使用双引号可以引用除$、`、\、字符外的任意字符或字符串

单引号(‘)(比较霸道,任何都可以转成字符)

与双引号类似,不同的是shell会忽略任何引用值。

换句话说,如果屏蔽了其特殊含义,会将引号里的所有字符,都作为一个字符串。

反引号(`)(将括号内的当作命令来执行)

用于设置系统命令的输出到变量。

shell将反引号中的内容作为一个系统命令,并执行其内容

反斜杠(\)

如果一个字符有特殊含义,反斜线防止shell误解其含义,即屏蔽其特殊含义。

下述字符包含有特殊意义:

&*+^$`”|?

脚本实例

1.Hello.sh

#!

/bin/bash

#Thisisthefirstscript

echo“Hello,World!

执行:

chmodu+xHello.sh

./Hello.sh

2.var.sh

#!

/bin/bash

echo$1

echo$2

echo$3

echo$4

echo$5

echo$6

echo$7

echo$8

echo$9

echo$10

3.#!

/bin/bash

echo–e“hostname\t`hostname`”

echo–e“OScore\t`uname-r`”

echo–e“CPUInfo\t`grep“modelname”/proc/cpuinfo|awk–F:

‘{print$2}'`”

ehco–e“CPUMHz\t`grep“MHz”/proc/cpuinfo|awk–F:

‘{print$2}'`”

echo–e“MEMTotal\t`free|awk‘$1=”Mem:

”{print$2}'`”

echo–e“DiskInfo\t`df|grepdev|awk‘{print$1$2}'`”

回顾:

脚本的结构与运行

变量的类型及用法

环境变量

本地变量

参数变量

特殊变量

第三天:

条件选择

大纲

应用实例分析

条件测试

if…else…fi

case…in…esac

实现功能菜单:

执行脚本后

按1,显示当前时间

按2,显示CPU负载

按3,显示剩余内存

按0,退出脚本

按其他字符,提示超出选择范围后退出

分析步骤。

#date+%T

uptimeawk截取

free–m

条件测试格式

#test–optionobj

#[-optionobj]

返回结果

1.表达式内容测试结果是真的

2.表达式内容测试结果是假的

测试的对象分类

执行结果(执行成功或失败)

文件(文件是否存在等)

文本(是否一致)

数字(数值比较)

条件测试的选项

选项

作用

-d

目录

-e

是否存在

-f

是否是普通文件

-s

文件大小是否等于0

-r

是否可读

-w

是否可写

-x

是否可执行

逻辑操作符号

选项

作用

-a

与操作

-o

或操作

!

非操作

实例:

#test–e/etc/passwd–a–e/etc/shadow中间是a与操作,则都为0才得0

#test–e/etc/passwd–o–e/etc/groups中间是o或操作,则有一真则真0

字符串操作符

==两个字符串相等

!

=两个字符串不相等

-z空字符串

-n非空字符串

实例:

#test–z$LOGNAME

#echo$LOGNAME

#echo$?

数值比较操作符

符号

说明

-eq

等于

-ne

不等于

-gt

大于

-lt

小于

-ge

大于等于

-le

小于等于

if…else…fi条件选择

if控制结构的基本格式:

if条件#判断开始可以是命令,也可以是test语句

then#如果条件为真反值真0则执行

命令1#执行命令1

else#如果条件为假反值假1则执行

命令2#执行命令2

fi#判断结束

实例(if…else…fi)1

inputtest.sh

#!

/bin/bash

#inputtest

echo–n“Enteryourname:

readname

#didtheuserjusthitreturn

if["${name}"==""]

then

echo“Youdidnotenteranyinformation”

else

echo“Yourname:

${name}”

fi

实例(if…else…fi)2

filecopy.sh

#!

/bin/bash

#filecopy

ifcp/etc/passwdpasswd.bak2>/dev/null2>/dev/null丢掉错误提示

then

echo“GoodCopy!

else

echo“`basename$0`:

error,couldnotcopy”

fi

if…else…fi的嵌套(两层的嵌套)

if条件1;then

if条件2;then

命令1

else

命令2

else

if条件3;then

命令3

else

命令4

fi

case…in…esac条件选择(比较灵活的方式)

case语句多用于较多分支判断

case格式:

(多种模式,只匹配和variable相等的模式)

casevariablein

模式1)命令1…;;

模式2)命令2…;;

esac

匹配模式

*匹配任意字符

?

匹配任意单字符

[]匹配字符范围

case…in.esac实例1

#!

/bin/bash

#caseselect

echo–n“enteranumberfrom1to5:

readNUM

case$NUMin

1)echo“youselect1″;;

2)echo“youselect2″;;

3)echo“youselect3″;;

4)echo“youselect4″;;

5)echo“youselect5″;;

*)echo“basename$Thisisnotbetween1and5″

esac

case…in.esac实例2

题目是:

学生的考试成绩是0-100分,在85以上的要提示youarethebest!

,在70-84显示yougetagoodmark!

,在60-74的显示comeon!

,60分以下显示Youmuststudyhard!

#!

/bin/bash

echo–n“pleaseinputyourmark:

readmark

case$markin

100|9[0-9]|8[5-9])echo“youarethebest!

”;;100、90-99、85-89

8[0-4]|7[0-9])echo“yougetagoodmark!

”;;80-84、70-79

7[0-4]|6[0-9])echo“comeon!

”;;70-74、60-69

[0-5][0-9])echo“Youmuststudyhard!

”;;00-59

esac

解决今天的问题

使用if…else…fi的方式对输入的变量进行判断。

在每个判断的分支上执行相应的语句。

menu.sh

#!

/bin/bash

clear

echo“——————–menu—————–”

echo“1)ShowTime”

echo“2)CPUload”

echo“3)Memoryfree”

echo“0)Exit”

echo“——————————————–”

echo-n“Enteryouchose[0-3]:

readNUM

if[${NUM}-lt0-o${NUM}-gt3]

then

echo“Thisisnotbetween0-3.”

else

if["${NUM}"=="1"]

then

echo“`date+%T`”

else

if["${NUM}"=="2"]

then

echo“`uptime|awk-F‘[,:

]‘‘{print$7}'`”

else

if["${NUM}"=="3"]

then

echo“`free-m|awk‘$1==”Mem

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 表格类模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1