linuxshell编程从⼊门到精通pdf_SHELL脚本编程⼊门
⼀. SHELL⼊门
1.1 变量
1.1.1 变量名规范
变量是由任何字母、数字、下划线组成的字符串,且不能以数字开头。
区分字母⼤⼩写
变量、等号、值中间不能出现任何空格
实例
注:$var1+$var2并不能实现相加,$var1,$var2默认作为字符串来处理
1.1.2 位置变量
当⼀条命令或脚本执⾏时,后⾯可以跟多个参数,我们使⽤位置参数变量来表⽰这些参数。
位置参数变量描述
$n n 为数字,$0 代表Shell本⾝的⽂件名,$1〜$9 代表第 1~9 个参数,10 以上的参数需要⽤⼤括号包含, 如${10}
$*命令⾏所有参数,把所有的参数看成⼀个整体
$@命令⾏中所有参数,但每个参数区别对待
$#命令⾏中所有参数的个数
实例
$@和$*都表⽰命令⾏所有参数,但是$*将命令⾏的所有参数看成⼀个整体,⽽$@则区分各个参数
1.1.3 环境变量
环境变量是在操作系统中⼀个具有特定名字的对象,它包含了⼀个或多个应⽤程序将使⽤到的信息。Linux是⼀个多⽤户的操作系统,每个⽤户登录系统时都会有⼀个专⽤的运⾏环境,通常情况下每个⽤户的默认的环境都是相同的。这个默认环境就是⼀组环境变量的定义。每个⽤户都可以通过修改环境变量的⽅式对⾃⼰的运⾏环境进⾏配置。
分类
/etc/profile
对所有⽤户⽣效的环境变量 /etc/profile
对特定⽤户⽣效的环境变量 ~/.bashrc或者~/.bash_profile
~/.bashrc或者~/.bash_profile
export
临时有效的环境变量 export
常⽤环境变量
环境变量含义
PATH命令搜索的路径
HOME⽤户家⽬录的路径
LOGNAME⽤户登录名
PWD当前所在路径
HISTFILE历史命令的保存⽂件
HISTSIZE历史命令保存的最⼤⾏数
HOSTNAME主机名
SHELL⽤户当前使⽤的SHELL
PS1⼀级命令提⽰符
TMOUT⽤户和系统交互过程的超时值
IFS系统输⼊分隔符
OFS系统输出分隔符
实例
1.2 管道
将⼀个命令的输出作为另⼀个命令的输⼊
实例
列出所有安装过的软件包
rpm -qa
rpm命令是RPM软件包的管理⼯具
列出与python相关的软件包
| grep python
Linux grep 命令⽤于查⽂件⾥符合条件的字符串。
-a :将 binary ⽂件以 text ⽂件的⽅式搜寻数据
-c :打印匹配次数
-f  两个⽂件相同⾏如,grep -f file1 file2
-h 不显⽰匹配⾏所在⽂件名
-i :忽略⼤⼩写的不同,所以⼤⼩写视为相同
-l 只显⽰匹配到的⽂件名
linux教程第五版pdf下载-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正常范围之外的退出状态码
实例
1.3.2 改变退出状态码的exit命令
退出状态码是以上⼀条指令的返回结果为准使⽤exit命令改变退出状态码
exit
⼆. 判断与控制
2.1 if-then 语句
语法:
if
实例
#!/bin/bash
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
2.5 条件测试-字符串⽐较
字符串⽐较
字符串⽐较含义
str1 = str2相等⽐较
str1 != str2不相等⽐较
str1 < str2str1⼩于str2为true
str1 > str2str1⼤于str2为true
-n str1str1长度不是0则为true
-z str1str1长度是0则为true
实例
#!/bin/bash
#!/bin/bash
&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;被当作了重定向,需要进⾏转义#!/bin/bash
#!/bin/bash
2.6 条件测试-⽂件⽐较
⽂件⽐较
⽂件⽐较含义