bash变量的命名
- 变量名称可以由字母,数字和下划线组成,但是不能以数字开头。
- 在bash中,变量的默认类型都是字符串类型,如果要进行数值运算,则必须指定类型为数值型。
- 变量用等号连接值,等号左右不能有空格
- 变量的值如果有空格,需要使用单引号或双引号。
- 可以使用反引号包含命令或者$(命令)赋制给变量 name= $(date)
bash变量的分类
- 用户自定义变量
- 只在当前的shell中有效 - 环境变量
- 这种变量主要用来保存和系统操作环境相关的数据会在当前的shell和这个shell的所有子shell当中生效,
- 如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的shell中生效。
- 系统常见的环境变量PATH,系统查找命令的路径。如ls命令,当在命令行输入ls时,它会在$PATH下的所有可执行bin文件中查找,如果不在就报命令执行错误。
- export 用来将变量声明为全局变量 - 位置参数变量
- 这种变量主要用来向脚本当中传递参数或者数据。变量名不能自定义,变量的作用是固定的? - 预定义变量
- 是bash 中已经定义好的变量
变量叠加
通过:
实现变量的叠加
系统提示盘符的变量设置(基本没用)
位置参数变量
$n
n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含如 ${10},可以理解为传进去的参数。 类似于Java在cmd命令框中对String[] args进行传参。
测试脚本
$* 这个命令代表命令行中的所有参数, $*把所有的参数看成一个整体
测试
$@ 会把所有的参数看成一个整体,但是会将每个参数当成个体来对待
$* 和 $@的区别就是在for兑换中, $* 会将所有的参数当成一个整体即一个个体,但是 $@会将所有的参数看成一个集合即多个个体。
$# 代表参数的个数
预定义变量
$? 最后一次执行的命令的返回状态。如果这个变量的值为0,代表上一条命令正确执行;如果这个变量的值非0,则证明上一个命令执行不正确了。
$$ 当前进程的进程号(PID)
$! 后台运行的最后一个进程的进程号
read命令
#!/bin/bash
read -t 10 -p "please input your name:" name
echo "your name is $name"
# -t 秒数 read 命令会一直等待用户输入,使用此选项可以指定等待时间
# -p 提示消息 在等待read 输入时 输出提示消息
read -s -t 10 -p "pelase input your age:" age
# -s是隐藏输入的参数 适用于机密文件的输入
echo -e "\n"
echo "your age is $age"
read -n 1 -t 10 -p "pelase input your gender[M/F]:" gender
echo -e "\n"
echo "sex is $gender"
# -n 1 代表只接收一个输入字符就会执行
撤销变量 unset
我们在使用shell来定义变量时 在命令行里面设置的变量 例如 A=1,那么在该会话中,变量一直存在,我们取消变量可以使用unset命令。
unset A
声明静态变量 readonly
readonly B=3 不能使用unset撤销,除非重新开启