脚本什么意思(部落冲突脚本什么意思)

今天,我将继续和大家分享Linux笔记。学习是一种积累,成为自己的东西。光看笔记是没用的。记得多练习!第8章外壳脚本编程一、壳牌简介当从文件而不是命令行执行命令

今天,我将继续和大家分享Linux笔记。学习是一种积累,成为自己的东西。光看笔记是没用的。记得多练习!

「学员笔记」LINUX随堂笔记(七):shell脚本编程

第8章外壳脚本编程

一、壳牌简介

当从文件而不是命令行执行命令时,该文件称为Shell脚本。shell脚本是一个纯文本文件,以行为为单位逐行执行。

相当于一个命令翻译器。

二。shell脚本的编写

2.1脚本的创建

使用文本编辑器(或触摸)创建脚本文件。

语法:touch a.sh

2.2脚本的执行

向脚本添加可执行权限。

语法:chmod +x a.sh

执行脚本命令:

(1)./a.sh

(2)上海

(3)不需要source a.sh // X权限

2.3脚本编写

脚本:vim a.sh

#!/bin/bash //系统用bash解释器执行脚本。

cd /etc/

pw//命令语句

三。外壳函数

3.1重定向

重定向:将命令的执行结果覆盖到目标文件。

语法:df >: A.txt //将磁盘信息覆盖到A.txt文件中。

add:uname-p >:& gt;A.txt //将处理器类型附加到A.txt中。

重定向输入:

vim pass.txt

123456

jerry & ltPass.txt //标准输入

Tail -2 /etc/shadow //检查最后两行用户密码信息

3.2管道符号

将左命令的输出结果作为右命令的处理对象。

cat . txt | grep " 123 "//过滤掉带有字符串" 123 "的行

grep & # 34bash $ & # 34/etc/passwd | awk-F:& # 39;{打印,$ 7 } & # 39;//-F:之后要求有空格。

示例:提取根分区/的磁盘使用情况

Df -hT //查看磁盘使用情况-h显示更容易阅读-T显示文件系统类型

df-hT | grep & # 34;/$"| awk & # 39{ print $ 6 } & # 39

四。外壳变量

Shell变量用于存储系统和用户需要使用的特定参数(值),这些参数可以根据用户的设置或系统环境的变化而变化。

4.1自定义变量

4.1.1定义一个新变量(输入)

格式:变量名=变量值

4.1.2查看变量的值(输出)

格式:echo $变量名

echo命令的选项:

-n:取消自动换行

-e:使用转义字符将字符串中的某些字符视为特殊字符。

\t:制表符

\n:换行符

\b:删除前一个字符。

\f:换行,但光标仍停留在原来的位置。

\r:光标移动到行首,但不换行。

赋值时使用引号。

双引号:允许通过$符号引用其他变量值。

单引号:禁止引用其他变量值,$视为普通字符。

撇号:命令替换,提取命令执行后的输出结果。

4.1.3从键盘输入内容,为变量赋值(提示输入)

格式:读[-p & # 34;提示& # 34;]变量名

4.2整数变量操作

Shell变量的数值运算多用于脚本程序的进程控制,只允许整数运算,不支持小数运算。整数运算主要由内部命令Expr执行。

格式:表达式变量1运算符变量2[运算符变量3]...// Note 空网格

常用运算符:加(+)、减(-)、乘(\ *)、除(/)、模(%)

例:设置X(值35)和Y(值16)两个变量,进行加、减、乘、除、模运算。

X=35

Y=16

表达式$X + $Y

X - $Y表达式

expr $ X \ * $ Y///乘法符号在shell中有其他含义,需要在操作中更改。

表达式$X / $Y

表达式$X % $Y

4.3环境变量

由系统预先创建,用于设置用户的工作环境。

配置文件:/etc/profile,~/。bash_profile

Env:查看当前工作环境中的环境变量。

这表示为$n,n是1到9之间的数字。

例子:写一个小的加法脚本a.sh,计算两个整数的和。执行脚本时,所需的两个整数作为位置变量提供。

#vim a.sh

#!/bin/bash

SUM = ' expr $ 1+$ 2 '

回声& # 34;$ 1+$ 2 = $ SUM & # 34;

#chmod +x a.sh

#./a . sh 12 24//1美元是12,2美元是24

4.4预定义变量

是Bash程序预定义的特殊变量,使用& # 34;$"另一个符号。

$ #:命令行中位置变量的数量

$ *:所有位置变量的内容

$?:表示执行最后一个命令后返回的状态。当返回的状态值为0时,表示执行正常,非零值表示执行异常或错误。

[90]:当前正在执行的进程/程序的名称

示例:编写备份脚本。

#vim mybak.sh

#!/bin/bash

TARFILE=beifen-`date +%s`.tgz

tar zcf $ TARFILE $ * & & gt/dev/null

回声& # 34;已执行[96]脚本,& # 34;

回声& # 34;总共完成了$ #个对象的备份& # 34;

回声& # 34;具体内容包括:$ * & # 34;

#chmod +x mybak.sh

#./mybak.sh /boot/grub

#./mybak . sh/etc/passwd/etc/影子

动词 (verb的缩写)测试脚本命令

5.1条件测试

测试特定表达式是否为真。当条件为真时,测试语句的返回值为0;否则就是其他价值观。

1:测试条件表达式

格式:[条件表达式]//note 空,括号和表达式之间有空。

在执行了条件测试操作后,通过预定义的变量& # 34;$?"获取状态值。

5.2文件测试

根据给定的路径名,判断对应的是文件还是目录,或者文件是否可读、可写、可执行等。

用法:[操作员文件或目录]

-d:测试是否是目录。

-e:测试目录或文件是否存在(exist)

-f:测试它是否是文件。

-r:测试当前用户是否有读取权限。

-w:测试当前用户是否有写权限。

-x:测试是否设置了可执行权限(Excute)。

示例:

[ -d /media/cdrom ]

echo $?

0 //返回0表示条件成立,返回1表示条件不成立。

使用逻辑AND & # 34&&"与echo命令一起更直观地显示结果。

[-d/media/cdrom]$ $ echo & # 34;是的& # 34;

5.3整数值比较

根据给定的两个整数值判断第一数和第二数之间的关系。

用法:[整数1运算符整数2]

-eq:等于(等于)

-ne:不等于(不等于)

-gt:大于(大于)

-lt:小于(小于)

-le:小于或等于(小于或等于)

-ge:大于或等于(大于或等于)

示例:判断当前登录用户的数量,超过五个时输出& # 34;太多了& # 34;

Unum=`who | wc -l` //查看当前登录用户数。

[$ Unum-gt 5]& & echo & # 34;太多了。"

5.4字符串比较

通常用于检查用户输入、系统环境等。符合条件。

用法:[string 1 = string 2] [string 1!=字符串2]

用法:[-Z string]//检查是否为空

泛型:[字符串1运算符字符串2]

例:判断当前系统语言,而不是& # 34;http://en。美国& # 34;输出& # 34;不是http://en。美国& # 34;

echo $LANG

【$LANG!= "http://en。美国& # 34;]& & echo & # 34;不是http://en。美国& # 34;

例2:用户需要输入yes或no来确认操作。

阅读-p & # 34;覆盖现有文件(是/否)?"命令正确应答

[$ ACK = & # 34;是的& # 34;]& & echo & # 34;覆盖& # 34;

阅读-p & # 34;覆盖现有文件(是/否)?"命令正确应答

[$ ACK = & # 34;不& # 34;]$ $ echo & # 34;不要覆盖& # 34;

5.5逻辑测试

判断两个或多个条件之间的关系。

用法:[表达式1]运算符[表达式2]

用法:命令1运算符命令2

&&:逻辑与,“与”,可改为& # 34;当使用测试命令-a & # 34;

|||:逻辑或,“或”,可改为& # 34;当使用测试命令-o & # 34;

!:逻辑否,“否”

示例:测试当前系统内核版本是否符合要求。

内核版本

mnum = $(uname-r | awk-f . & # 39;{ print $ 1 } & # 39)

snum = $(uname-r | awk-f . & # 39;{ print $ 2 } & # 39)

[$ Mnum-eq 2]& &[$ Snum-gt 4]& & echo & # 34;符合要求& # 34;

不及物动词if条件语句

按复杂程度分:单分支if语句,双分支if语句,多分支if语句。

6.1单分支if语句

只有当条件满足时,才会执行相应的代码。

用法:

中频条件测试

然后命令序列

船方不负担装货费用

示例:确定装入点目录是否存在,如果不存在,则创建一个新目录。

vim chkmountdir.sh

#!/bin/bash

MOUNT _ DIR = & # 34/media/cdrom/& # 34;

如果[!-d $装载目录]

然后

mkdir -p $MOUNT_DIR

船方不负担装货费用

Chmod +x chkmountdir.sh //授予chkmountdir.sh执行权限

。/chkmountdir.sh

6.2双分支if语句

用法:

中频测试操作

然后命令序列1

Else命令序列2

船方不负担装货费用

示例:检查目标主机是否可以连接,并显示相应的信息。

vim pinghost.sh

#!/bin/bash

ping -c 3 -i 0.2 -w 3 & >/dev/null //执行命令时不要查看消息。

如果[ $?-eq 0] //判断前一条命令的返回状态

然后

回声& # 34;主机已启动。"

其他

回声& # 34;主机已关闭。"

船方不负担装货费用

chmod +x pinghost.sh

。/pinghost.sh 192.168.4.11

6.3多分支if语句

用法:

如果测试操作1

然后命令序列1

Elif条件测试操作2

然后命令序列2

其他

命令3

船方不负担装货费用

举例:判断分数的范围,分为优秀、合格、不合格三个等级。

vim gradediv.sh

#!/bin/bash

阅读-p & # 34;请输入您的分数(0-100):& # 34;等级

if[$ GRADE-ge 85]& &[& GRADE-le 100]

然后

回声& # 34;$绩点!优秀& # 34;

elif[$ GRADE-ge 70]& &[& GRADE-le 84]

然后

回声& # 34;$等级,合格& # 34;

其他

回声& # 34;$成绩?不合格& # 34;

船方不负担装货费用

chmod +x gradediv.sh

。/gradediv.sh

七。for循环语句

读取不同的变量来逐个执行同一组命令。

用法:

对于值列表中的变量名

指令序列

完成的

示例:根据姓名列表批量添加用户。

Vim /root/users.txt //被用作测试列表文件

物管部工程经理

电平信号

电视控制中心(TelevisionControlCenter)

vim uaddfor.sh

#!/bin/bash

ULIST=$(cat /root/users.txt)

对于$ULIST //中的UNAME,从列表文件中读取用户名

useradd $UNAME

回声& # 34;123456"| passwd - stdin $UNAME & >/dev/null

//通过管道指定密码字符串

完成的

chmod +x uaddfor.sh

。/uaddfor.sh

tail -3 /etc/passwd

示例2:根据IP地址列表检查主机状态

vim /root/ipadds.txt

192.168.4.11

192.168.4.100

192.168.4.120

vim chkhosts.sh

#!/bin/bash

HLIST=$(cat /root/ipadds.txt)

对于$HLIST中的IP

ping -c 3 -i 0.2 -W 3 $IP & >/dev/null

如果[ $?-eq 0] //嵌套if语句判断连通性

然后

回声& # 34;主机$IP已启动。"

其他

回声& # 34;主机$IP已关闭。"

船方不负担装货费用

完成的

chmod +x chkhosts.sh

。/chkhosts.sh

For循环语句非常适合不规则的列表对象,并且列表源已经固定。但当要求控制循环次数,操作对象按数字顺序编号,并根据具体情况进行重复操作时,更适合while循环语句。

八。while循环语句

反复测试一个条件,只要条件满足就反复执行。

用法:

While条件测试操作

指令序列

完成的

示例:批量添加常规号码的用户

#vim uaddwhile.sh

#!/bin/bash

前缀= & # 34;斯图& # 34;

i=1

而[20美元]

useradd $ {[前缀}$i

回声& # 34;123456"| passwd - stdin ${PREFIX}$i & >/dev/null

i++//序列号递增,以避免无限循环。

完成的

chmod +x uaddwhile.sh

。/uaddwhile.sh

grep & # 34斯图& # 34;/etc/passwd | tail -3

比如猜价格游戏,需要一个脚本预先生成一个随机数的价格(0-99)作为实际价格,判断用户猜测的价格是高于还是低于实际价格,给出相应的提示并要求用户再次猜测,直到用户猜出实际价格,输出猜测的总次数和实际价格。

#vim pricegame.sh

#!/bin/bash

PRICE=$(expr $RANDOM% 1000) //以随机数的形式输入价格

次数=0

回声& # 34;实际商品价格区间为0-999。猜猜这是什么?"

While true //循环条件:true

阅读-p & # 34;请输入您猜测的价格数字:& # 34;(同Internationalorganizations)国际组织

让时代++吧

if[$ INT-eq $ PRICE];然后

回声& # 34;恭喜你,你答对了。实际价格是$ PRICE & # 34

回声& # 34;你一共猜了$次& # 34;

出口0

elif[$ INT-gt $ PRICE];然后

回声& # 34;太高了!"

其他

回声& # 34;太低了!"

船方不负担装货费用

完成的

chmod +x pricegame.sh

。/pricegame.sh

九。case分支语句

根据变量值的不同,分别执行不同的命令序列。

用法:

Case变量值在

1)模式

命令1

;;

2)模式

命令2

;;

......

*)

默认命令序列

environmental systems applications center 环境系统应用程序中心

示例:检查用户输入的字符类型。

提示用户从键盘输入一个字符,通过case语句判断该字符是字母、数字还是其他控制字符,并给出相应的提示信息。

#vim hitkey.sh

#!/bin/bash

阅读-p & # 34;请输入一个字符并按回车键确认:& # 34;键

案例& # 34;$ KEY & # 34在

[a-z] || [A-Z])

回声& # 34;你输入了一个字母。"

;;

[0-9])

回声& # 34;您输入了一个数字。"

;;

*)

回声& # 34;您输入了空单元格、功能键或其他控制字符。"

environmental systems applications center 环境系统应用程序中心

chmod -x hitkey.sh

。/hitkey.sh

X.sed和awk语句

0.1 sed简介

Sed是stream editor的缩写,它是一个在线编辑器,一次处理一行内容。Sed是一个非交互式编辑器。

处理时,当前处理的行存储在一个临时缓冲区中,这个缓冲区称为“模式空间”,然后通过sed命令处理缓冲区的内容。处理完成后,缓冲区的内容被发送到屏幕。然后处理下一行,重复这个过程直到文件结束。除非您使用重定向来存储输出,否则文件的内容不会改变。

10.2 Sed命令用法

格式:sed+[选项]+'命令'+文件名

常见选项:

-n:取消默认输入

-e:多次编辑

-i:直接修改读取的文件内容,而不是通过屏幕输出。

常见命令:

答:在当前行后添加一行。

I\:在当前行之前添加一行。

C\:用字符串替换一行。

d:删除行

p:打印行

用一个字符串替换另一个字符串。

w:将选定的行写入文件。

10.3 Sed寻址

在用于“命令”之前,决定要编辑哪些行。

如果没有指定地址,sed将处理输入文件的所有行。

1.如果地址是数字,则表示行号;是" $ & # 34;符号,它表示最后一行。

2.地址可以指定范围。当需要指定范围时,使用逗号(,)分隔。

10.4 Sed用法

1.p命令

格式:sed-n '行号p '文件名

二维命令

格式:sed-n '行号d '文件名

3s命令

格式:SED-N '行号s/a/b/g '文件名

用B字符替换文件中指定行的所有A字符,G是全局变量。

4 .我命令

格式:SED-I“行号3d”文件名

直接修改文件内容,不需要在屏幕上打印。

5.e命令

格式:SED-E' 3D'-E' 4P '文件名

在打印第四行字符之前删除第三行。

0.5 awk简介

Awk是一个强大的文本分析工具。与grep搜索和sed编辑相比,awk在分析数据和生成报告时特别强大。

简单来说,awk就是逐行读取文件,以空为默认分隔符对每行进行切片,然后对切片部分进行分析。

10.6 awk用法

1.格式:awk & # 39模式{操作} & # 39;

模式通常指关系表达式,例如:

awk '/a/' file-显示文件中包含的行。

awk ' $ 2 & gt“10”文件-在第二列中显示数字大于10的行。

2.分离提取:awk–f "分隔符" ' {print } '

例如:

awk–f . ' { print $ 1,print } '表示每行的前两个字段将以点作为分隔符输出到不同的行中。

10.7 awk实例

确定输入ip的有效性:

vim a.sh

#!/bin/bash

Read -p "请输入IP:" a

b = ` echo $ A | awk-f . " { print $ 1 } " ` n

if [ $B -le 0 ] || [ $B -gt 255 ]

然后回显“请输入正确的IP”

其他

回应“好的”

船方不负担装货费用

chmod +x a.sh

嘘,嘘

XI。外壳实例

示例:编写系统服务脚本。

vim myprog

#!/bin/bash

案例& # 34;"在

开始)

echo-n & # 34;启动睡眠服务..."

如果睡眠7200 &

然后

回声& # 34;好& # 34;

船方不负担装货费用

;;

停止)

echo-n & # 34;停止睡眠服务..."

pkill & # 34睡眠& # 34;& & gt/dev/sull

回声& # 34;好& # 34;

;;

状态)

如果pgerp & # 34睡眠& # 34;& & gt/dev/sull;

然后

回声& # 34;睡眠服务已经启动。"

其他

回声& # 34;睡眠服务已停止。"

船方不负担装货费用

;;

重启)

[427]停止

0美元起步

;;

environmental systems applications center 环境系统应用程序中心

chmod +x myprog

。/myprog start

示例2: Shell打印99乘法表

用于循环

对于以美元表示的I(序号1-9)

对于以美元表示的j(序号1 $i)

echo -n "$j * $i" = $[i * j]" "

完成的

回声

完成的

//在示例中,$[i * j]可以写成:$((i * j)),$[$j*$i],$(( $j * $i)),` expr $ i \ * $ j j

//Modify:在第二个do下增加一行let“temp = I * j”,然后将$[i * j]改为:$temp

而倒乘法表:

i=9

j=1

while((I & gt;=1))

而((j & lt=我))

echo -n "$j * $i"=$[$j * $i]" "

让j++

完成的

len j=1

让我-

回显""

完成的

-结束-

今天的笔记到此为止。如果你觉得自己的学习方法有问题,或者还有什么想知道的,可以告诉我~

「学员笔记」LINUX随堂笔记(七):shell脚本编程

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/47552.html

发表回复

登录后才能评论