shell脚本语言是解释性语言,C语言是编译型语言。shell脚本是shell命令的有序集合。
shell编程基本步骤
- 建立shell文件;包含任意多行系统命令或shell命令的文本文件
- 赋予shell文件执行权限,用chmod命令修改执行权限
- 执行shell文件;直接在命令行上调用shell程序(在PATH路径中没有当前文件的话 直接用 ./执行)
shell变量
shell不支持数据类型,将任何赋值给变量的值都解释为字符串,因此无需声明,直接赋值
count=1 //变量直接赋值,等号两边不加空格
echo count //变量调用时要带 $ 符号指示变量
echo $count
变量种类
用户自定义变量
- 删除变量 unset命令
位置变量即命令行参数
- $0:与键入的命令行一样,包含脚本文件名
- $1,$2,······$9:分别包含第一个到第九个命令行参数
- $# :包含命令行参数的个数
- $@ :包含所有命令行参数
- $? :包含前一个命令的退出状态
- $ *: 包含所有命令行参数
- $$ :包含正在执行进程的ID号
- 预定义变量
- 环境变量
- export ;env查看环境变量
常用环境变量 | 说明 |
---|---|
HOME | /etc/passwd文件中列出的用户主目录 |
IFS | Internal Field Separator,默认为空格,tab及换行符 |
PATH | shell搜索路径 |
PS1、PS2 | 默认提示符($)及换行提示符(>) |
TERM | 中断类型,常用的有vt100,ansi,vt200,xterm等 |
功能语句
- 说明性语句:以#号开始,按行计
- 功能性语句:任意的shell命令、用户程序或其它shell程序
- 结构性语句:条件测试语句、分支语句、循环语句、循环控制语句
常用功能性语句
- read 从标准输入读入一行,并赋值给后面的变量变量数和输入之间的匹配
- expr 整数运算 A=`expr 3 + 5` 命令结果赋值给变量时要进行转换,且变量赋值不应有空格,运算表达式应有空格
- test 测试对象:
- 字符串:常用命令参数
表达式 | 含义 |
---|---|
s1 = s2 | 测试两个字符串的内容是否完全一样 |
s1 != s2 | 测试两个字符串的内容是否有差异 |
-z s1 | 测试s1字符串的长度是否为0 |
-n s1 | 测试s1字符串的长度是否不为0 |
-
- 整数:常用命令参数
表达式 | 含义 |
---|---|
a -eq b | 测试a与b是否相等 |
a -ne b | 测试与b是否不相等 |
a -gt b | 测试a是否大于b |
a -ge b | 测试a是否大于等于b |
a -lt b | 测试a是否小于b |
a -le b | 测试a是否小于等于b |
-
- 文件属性:常用命令参数
表达式 | 含义 |
---|---|
-d name | 测试name是否为一个目录 |
-e name | 测试一个文件是否存在 |
-f name | 测试name文件是否为普通文件 |
-L name | 测试name文件是否为符号链结 |
-r name | 测试name文件是否存在且为可读 |
-w name | 测试name文件是否是否存在且为可写 |
-x name | 测试name文件是否存在且为可执行 |
-s name | 测试name文件是否存在且其长度不为0 |
f1 -nt f2 | 测试文件f1是否比文件f2更新 |
f1 -ot f2 | 测试文件f1是否比文件f2更旧 |
echo $? 输出上条命令的结果