Shell脚本语法-变量
一、注释
#
表示注释
注意:在Shell脚本中没有多行注释,只有单行注释
例如:脚本代码
#!/bin/bash
# 输出了Hello world
echo "hello world!"
二、变量
2.1 变量定义
#!/bin/bash
# 输出了Hello world
#正确写法
#name="smile2018"
#错误写法
name = "smile2018"
echo "hello world!"
注意事项:1.定义变量时,变量名不需要加$
符号
2.变量名和等号不能有空格,它和一般的语言不一样
3.变量名首字母必须是字母(a-z,A-Z)
4.变量名之间不允许有空格
5.不允许使用标点符号
…其他细节
name = "smile2018"
运行错误
![在这里插入图片描述](https://img-blog.csdn.net/20180928165940565?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d0ZGFzaw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
2.2 只读变量-类似于通常讲的常量
关键字:readonly
![在这里插入图片描述](https://img-blog.csdn.net/20180928173623304?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d0ZGFzaw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
2.3 删除变量
语法:unset
(将变量干掉)
示例:
![在这里插入图片描述](https://img-blog.csdn.net/20180929114054800?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d0ZGFzaw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
2.4 变量类型
2.4.1 类型1:本地变量
作用域整个bash进程可以使用
语法: name="Dream"
2.4.2类型2:局部变量
作用域:当前代码段
语法:local name="Andy"
2.4.3类型3:环境变量
作用域:当前shell进程以及子进程
语法:export name="Dream"
2.4.4类型4:位置变量
脚本代码
name=${0}
age=${1}
sex=${2}
echo "姓名:${name} 年龄:${age} 性别:${sex}"
执行脚本
./hello.sh Jeff 150 男
执行结果:
![在这里插入图片描述](https://img-blog.csdn.net/20180929140752537?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d0ZGFzaw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
我们发现执行有错误,赋值错位了,实际上${0}
表示的是脚本文件
修改代码
![在这里插入图片描述](https://img-blog.csdn.net/20180929140923917?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d0ZGFzaw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
2.4.5类型5 特殊变量
2.4.5.1 ${0}
文件名称
2.4.5.2 $(?)
表示返回上一个命令,执行状态返回值
0:表示执行成功
1:程序执行结果
2:表示程序状态返回码(0-255)
2.4.5.3 $#
参数个数
2.4.5.4 $*
参数列表
2.4.5.5 $@
参数列表
2.4.5.6 ${*}
和${@}
的区别
${*}
参数列表:会将所有参数组成一个字符串"Andy 200 男"
${@}
参数列表:分开展示Andy
200 男
2.4.5.7 $$
获取当前shell进程ID
2.4.5.8 $!
执行上一个指令的PID
案例测试:
![在这里插入图片描述](https://img-blog.csdn.net/20180929141913459?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d0ZGFzaw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
我们故意设置错误代码
![在这里插入图片描述](https://img-blog.csdn.net/20180929142022444?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d0ZGFzaw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
127属于系统预留错误信息
![在这里插入图片描述](https://img-blog.csdn.net/20180929153453318?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d0ZGFzaw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
GitHub代码示例