linux shell编程从入门到精通pdf_SHELL脚本编程入门

dabb652fc897a27ff967301638a391ca.png

一. SHELL入门

1.1 变量

1.1.1 变量名规范

  • 变量是由任何字母、数字、下划线组成的字符串,且不能以数字开头。
  • 区分字母大小写
  • 变量、等号、值中间不能出现任何空格

实例

4fcce10e515dfd66a67ecf252b3580b4.png
注:$var1+$var2并不能实现相加,$var1,$var2默认作为字符串来处理

1.1.2 位置变量

当一条命令或脚本执行时,后面可以跟多个参数,我们使用位置参数变量来表示这些参数。

位置参数变量描述
$nn 为数字,$0 代表Shell本身的文件名,$1〜$9 代表第 1~9 个参数,10 以上的参数需要用大括号包含, 如${10}
$*命令行所有参数,把所有的参数看成一个整体
$@命令行中所有参数,但每个参数区别对待
$#命令行中所有参数的个数

实例

cda3061703723af1a42e021e3b508fce.png
$@和$*都表示命令行所有参数,但是$*将命令行的所有参数看成一个整体,而$@则区分各个参数

1.1.3 环境变量

环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或多个应用程序将使用到的信息。Linux是一个多用户的操作系统,每个用户登录系统时都会有一个专用的运行环境,通常情况下每个用户的默认的环境都是相同的。这个默认环境就是一组环境变量的定义。每个用户都可以通过修改环境变量的方式对自己的运行环境进行配置。

分类

  • 对所有用户生效的环境变量 /etc/profile
  • 对特定用户生效的环境变量 ~/.bashrc或者~/.bash_profile
  • 临时有效的环境变量 export

常用环境变量

环境变量含义
PATH命令搜索的路径
HOME用户家目录的路径
LOGNAME用户登录名
PWD当前所在路径
HISTFILE历史命令的保存文件
HISTSIZE历史命令保存的最大行数
HOSTNAME主机名
SHELL用户当前使用的SHELL
PS1一级命令提示符
TMOUT用户和系统交互过程的超时值
IFS系统输入分隔符
OFS系统输出分隔符

实例

a7586a09e9ef323e61b418bc053f1361.png

1.2 管道

将一个命令的输出作为另一个命令的输入

实例

  • 列出所有安装过的软件包
rpm -qa

rpm命令是RPM软件包的管理工具
  • 列出与python相关的软件包
| grep python

Linux grep 命令用于查找文件里符合条件的字符串。
    -a :将 binary 文件以 text 文件的方式搜寻数据
    -c :打印匹配次数
    -f  两个文件相同行  如,grep -f file1 file2
    -h 不显示匹配行所在文件名
    -i :忽略大小写的不同,所以大小写视为相同
    -l 只显示匹配到的文件名
    -n :顺便输出行号
    -o 只显示匹配的字符
    -v :只显示不匹配的行。 
    --color
  • 显示与python相关的软件包的行数
| grep python 

1.3 退出状态码

1.3.1 退出状态码描述

所有的shell命令都使用退出状态吗来告知shell它已执行完毕

退出状态码是一个0~255的整数值

Linux提供了一个$?来捕获退出状态码的值,所以,可以通过echo语句测试命令是否运行成功。

一般来讲,退出状态 0 表示正常执行,没有遭遇任何问题。其他非零的状态码均表示失败。

状态码描述
0命令成功结束
1一般性未知错误
2不适合的shell 命令
126找到了该命令但无法执行
127没找到命令
128无效的退出参数
128+x与linux信号x相关的严重错误
130通过ctrl+C终止的命令
255正常范围之外的退出状态码

实例

cf4ba1c3adeed329d10f9bf3f64cae44.png

1.3.2 改变退出状态码的exit命令

退出状态码是以上一条指令的返回结果为准

使用exit命令改变退出状态码

exit 

二. 判断与控制

2.1 if-then 语句

语法:

if 

实例

#!/bin/bash

6b8578bf533e11acad8259e7cb4359a2.png

2.2 if-then-else 语句

语法:

if 

实例

#!/bin/bash

2.3 嵌套if语句

语法:

if 

2.4 条件测试-数值比较

语法:

if condition     

或者

if condition

数值比较

数值比较含义
n1 -eq n2n1和n2相等,则返回true;否则返回false
n1 -ne n2n1和n2不相等,则返回true;否则返回false
n1 -gt n2n1大于n2,则返回true;否则返回false
n1 -ge n2n1大于等于n2,则返回true;否则返回false
n1 -lt n2n1小于n2,则返回true;否则返回false
n1 -le n2n1小于等于n2,则返回true;否则返回false

实例

#!/bin/bash

56506760dcb06b52296f23c64a47b8b3.png

2.5 条件测试-字符串比较

字符串比较

字符串比较含义
str1 = str2相等比较
str1 != str2不相等比较
str1 < str2str1小于str2为true
str1 > str2str1大于str2为true
-n str1str1长度不是0则为true
-z str1str1长度是0则为true

实例

#!/bin/bash

2f7e4e4bf9377876043e20eea5952f53.png
#!/bin/bash

5d198f3db303c60db3e4c9bc4ecd86de.png
&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;被当作了重定向,需要进行转义
#!/bin/bash

d53ac5837c798e50408f325c014af82c.png
#!/bin/bash

bcac4941f2767ce6dc5900995d50b1c6.png

2.6 条件测试-文件比较

文件比较

文件比较含义
-d filefile是否为目录
-f filefile是否为文件
-e filefile是否存在
-r filefile是否可读
-w filefile是否可写
-x filefile是否可执行
-s filefile存在且非空
file1 -nt file2file1比file2新为true
file1 -ot file2file1比file2旧为true

实例

#!/bin/bash

b96f97e64709aecfd0f9ed0f3cad096e.png
#!/bin/bash

1fded8f4abdfa779559c2cc9207fb5d7.png

2.7 符合条件测试

语法:

if condition1 

实例

#!/bin/bash

745a8936296fff30aae9cb121a8f374f.png

2.8 if-then中使用双括号

使用双括号进行算术运算

语法:

if 

注:

  • 双括号结构中,变量名引用可以加$,也可以不加
  • 运算符前后可以有空格,也可以没有
  • 可以用于if,for,while等循环控制结构中
  • 多个运算符使用逗号分隔

可用运算符

运算符含义
value++后增
value--后减
++value先增
--value先减
!逻辑求反
==相等
>大于
<小于
>=大于等于
<=小于等于
&&逻辑与
||逻辑或

实例

#!/bin/bash

5e0959aa578244ab3e7521480d769d67.png

2.9 if-then中使用双方括号

单方括号语法

if 

改为双方括号语法

if 

注:

  • 双括号结构中,变量名引用必须加$
  • [[后面必须要空格,]]前面必须有空格

2.10 case命令

语法:

case 

实例:

#!/bin/bash

afdcb33fb452eec1a609e17f979fd25b.png

三. 循环与控制

3.1 for循环

循环遍历一系列特定值,然后在结构体中针对每个特定值做处理

语法:

for var in list

实例:

for循环读取列表值:

#!/bin/bash

b2cb71e3034d1b44ca519d49b4d1d723.png

for循环读取变量值:

#!/bin/bash

afb9b0955456ee618caa981f91325a91.png
#!/bin/bash

a7bdcc088ecc7ecaa89ffb6b5e134978.png

for循环从命令执行结果读取值

#!/bin/bash

fec3a10b2090647457cc3a3cb1f92d95.png
#!/bin/bash

9254ba8f31c77316a1432715419ddcbe.png

C语言风格的for循环

#!/bin/bash

7652ab840eb7d8b12a74291ca908d604.png
#!/bin/bash

4ade57db2daa7354cd7a8ccfee876de4.png

3.2 while循环

语法:

while 

实例:

#!/bin/bash

8bcdc091228cab82d6ddca4ac3c8f5d9.png

3.3 until命令

语法:

until 

实例:

#!/bin/bash

9d2b18ad958b53e1faa635fa265c705e.png

3.4 break命令

实例:

#!/bin/bash

a1db15a281a037ab9cd3379ab21dcc14.png

当有两层循环的时候,"break 1"跳出内循环; " break 2"跳出外循环

#!/bin/bash

6e841d674577b6612a013f2fb6a4e2e2.png
#!/bin/bash

00b35a3b4c6c09a16966efda056a3aa7.png

3.5 continue命令

实例:

#!/bin/bash

ce81640464f202e775523e83d90ccd04.png

3.6 处理循环的输出

实例

#!/bin/bash

ce9c67b0156a9ec326249aeb10c18ef1.png
#!/bin/bash

211ccdbd43e0f56dc4c870f36b729885.png
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux Shell编程从入门到精通》是一本非常经典的Shell编程教材,适合那些希望深入学习Linux Shell编程的人使用。这本书涵盖了从基础知识到高级技术的各个方面。 在入门部分,读者将学习到Shell脚本的语法结构、命令、变量、运算符等基础知识。通过实例和练习,读者可以逐步掌握Shell脚本编程的基本技能,并能够独立编写一些简单的脚本。 随后,书籍介绍了Shell脚本编程的进阶内容,包括函数、流程控制、循环、字符串处理、数组等等。通过学习这些内容,读者可以编写更复杂和功能丰富的脚本程序。 在进入高级阶段,书中还介绍了一些Shell编程的高级技巧和工具。比如,如何使用正则表达式、文件操作、进程控制、错误处理等。这一部分内容对于提高Shell编程的效率和可靠性非常有帮助。 此外,《Linux Shell编程从入门到精通》还提供了大量的实例和项目练习,帮助读者将理论知识应用到实际问题中。通过参与这些实践,读者可以更好地理解Shell编程的各个概念和技巧,并提升自己的编程能力。 总的来说,这本书内容全面、深入浅出,适合各个层次的读者学习。不仅能够让初学者系统学习Shell编程,还可以帮助有一定经验的读者提高编程水平。无论是对于学习Linux系统还是提高自己的Shell编程技能,这本书都是一个不错的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值