一. 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
-
对特定用户生效的环境变量 ~ /.bashrc或者~/.bash_profile
-
临时有效的环境变量 export
常用环境变量
环境变量 | 含义 |
---|---|
PATH | 命令搜索的路径 |
HOME | 用户家目录的路径 |
LOGNAME | 用户登录名 |
PWD | 当前所在路径 |
HISTFILE | 历史命令的保存文件 |
HISTSIZE | 历史命令保存的最大行数 |
HOSTNAME | 主机名 |
SHELL | 用户当前使用的SHELL |
PS1 | 一级命令提示符 |
TMOUT | 用户和系统交互过程的超时值 |
IFS | 系统输入分隔符 |
OFS | 系统输出分隔符 |
实例
1.2 管道
将一个命令的输出作为另一个命令的输入
实例
- 列出所有安装过的软件包
rpm -qa
rpm命令是RPM软件包的管理工具
- 列出与python相关的软件包
rpm -qa | grep python
Linux grep 命令用于查找文件里符合条件的字符串。
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :打印匹配次数
-f 两个文件相同行 如,grep -f file1 file2
-h 不显示匹配行所在文件名
-i :忽略大小写的不同,所以大小写视为相同
-l 只显示匹配到的文件名
-n :顺便输出行号
-o 只显示匹配的字符
-v :只显示不匹配的行。
--color=auto :可以将找到的关键词部分加上颜色的显示喔!
- 显示与python相关的软件包的行数
rpm -qa | grep python | wc -l
Linux wc命令用于计算字数
-c或--bytes或--chars 只显示Bytes数。
-l或--lines 只显示行数。
-w或--words 只显示字数。
--help 在线帮助。
--version 显示版本信息。
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 $exit_code
exit 48 或者 exit 125 或者exit 0
二. 判断与控制
2.1 if-then 语句
语法:
if command | condition
then
commands
fi
实例
#!/bin/bash
if pwd
then
echo "It works"
fi
2.2 if-then-else 语句
语法:
if command | condition
then
commands
else
commands
fi
实例
#!/bin/bash
if pwd
then
echo "It works"
fi
2.3 嵌套if语句
语法:
if command | condition
then
commands
elif command | condition
then
commands
else
commands
fi
2.4 条件测试-数值比较
语法:
if condition
then
commands
fi
或者
if condition;then
commands
fi
数值比较
数值比较 | 含义 |
---|---|
n1 -eq n2 | n1和n2相等,则返回true;否则返回false |
n1 -ne n2 | n1和n2不相等,则返回true;否则返回false |
n1 -gt n2 | n1大于n2,则返回true;否则返回false |
n1 -ge n2 | n1大于等于n2,则返回true;否则返回false |
n1 -lt n2 | n1小于n2,则返回true;否则返回false |
n1 -le n2 | n1小于等于n2,则返回true;否则返回false |
实例
#!/bin/bash
if [ $1 -eq $2