Shell变量类型主要有:环境变量,位置变量,预定义的特殊变量以及用户自定义变量等。
(一)环境变量
环境变量时用来设置系统运行环境的变量。环境变量的名称由大写字母组成,常用的如下:
名称 | 说明 |
HOME | 用户主目录的全路径名 |
PATH | 定义了一些目录路径,用冒号(:)隔开。 |
TERM | 显示当前终端的类型 |
PWD | 显示当前工作路径的绝对路径 |
PS1 | 主提示符 |
PS2 | 辅助提示符 |
SHELL | Shell的解释器路径 |
| 当前邮箱的路径 |
LOGNAME | 登陆用户的用户名 |
UID | 当前用户的id |
添加新路径可以用
$PATH=$PATH:路径名
例,
(二)位置参数
根据出现在命令行上的参数来确定变量值,其中,$0代表当前执行的命令名或者是shell文件的文件名,$1,$2,$3,$4,$5,$6,$7,$8,$9分别代表第一个参数,当命令行中的参数多于9个时,使用shift命令来左移,
例,zzz文件内容
zzz文件内容
#! /bin/bash
Echo $0,$1,$2
输入参数为num1和test,输出$0当前执行命令名,$1赋值为num1,$1赋值为test:
#! /bin/bash
Echo $0,$1,$2
#! /bin/bash
Echo $0,$1,$2,$3,$4,$5,$6,$7,$8,$9
Shift
Echo $0,$1,$2,$3,$4,$5,$6,$7,$8,$9
Shift 3
Echo $0,$1,$2,$3,$4,$5,$6,$7,$8,$9
(三)变量的操作
- 创建变量
1. 用declare来申明变量
2. 用typeset来申明变量
3. 直接用变量名=变量值来定义变量(这个是最常用的)要是变量值有空格,用双引号就可以了
- 区分变量:可以擦用大括号来区别变量和其他字符
- 删除变量:用unset来删除变量
(四)变量赋值
- 使用read命令来读入数据:
Read命令是一个内置命令,从输入设备或者是一个文件读取数据。Read命令读取一个输入行直到遇到一个换行符为止。规则如下:
1. 多个变量之间用空格隔开
2. 若变量个数与数据个数相等,则对应赋值。
3. 若变量个数大于输入数据个数,则后面的变量赋值为空
4. 若变量个数小于输入数据个数,则多余的数据都赋值为最后一个变量。
- 直接赋值:
- 使用命令行赋值:
- 利用命令的输出结果赋值。里面的变量的赋值用反引号才可以。
- 从文件中读入数据实现赋值:
(五)变量输出端:
- echo
echo可以输出字符串也可以输出变量,例,
- Prinft格式化输出
命令格式说明:
- \”:双引号
- \\:反斜杠
- \n:回车
- \r:换行
- %%:百分号
- %d:数字
- %f:浮点数
- %s:字符
例,
%-20s表示左对齐,20个字符宽度,%20.4f表示是右对齐,20个字符,4位小数
(六)数组:
数组是一组数值的集合。
- 数组的定义:
name=(element1,element2.。。。)
或者是name[index]=element
- 数组的取值:
${name[index]}
- 数组的长度
${#name[*]}
- 数组的复制:
*和@都是提取整个数组元素
不同的是@是把原数组的内容复制到一个新数组中,生成的新数组和以前的数组是一样的,符号*是把原来的数组中所有的元素作为新数组的一个元素
all=(“$name[*]”)
list=(“${name[@]}”)
- 数组元素的长度:
${#name[i]}
(七)算术运算
Expr命令:可以进行简单的整数运算,+,-,*,\,%,运算符,命令要用反引号
Let命令:与expr可以换用,不过let命令中不用加$符号
浮点数运算可以bc和awk运算
例,