6.shell变量
变量:是shell传递数据的一种方式,用来代表每个取值的符号名。当shell脚本需要保存一些信息时,如一个文件名或是一个数字,就把它存放在一个变量中。
变量设置规则:
1.变量名称可以由字母,数字和下划线组成,但是不能以数字开头,环境变量名建议大写,便于区分。
2.在bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型。
3.变量用等号连接值,等号左右两侧不能有空格。
4.变量的值如果有空格,需要使用单引号或者双引号包括。
变量分类:
Linux Shell中的变量氛围用户自定义变量和环境变量,位置参数变量和预定义变量。可以通过set命令查看系统中存在的变量。
系统变量:保存和系统变量环境相关的数据。HOME、PWD、SHELL、USER等
位置参数变量:主要用来向脚本中传递参数或数据,变量名不能自定义,变量作用固定
预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
用户自定义变量
用户自定义变量由字母或下划线开头,由字母,数字或下划线序列组成,并且大小写意义不同,变量名没有长度限制。
设置变量
习惯上用大写字母来命名变量。变量名以字母表示的字符开头,不能用数字。
变量调用
在使用变量时,要在变量名前加上前缀“$”
使用echo命令查看变量值,eg : echo $ A
变量赋值
1.定义时赋值:
变量=值 (等号两侧不能有空格)
eg :
STR=“hello world”
A=9
2.将一个命令的执行结果赋给变量
A=‘ls -la’ 反引号,运行里面的命令,并把结果返回给变量A
A=$(ls -la) 等价于反引号
eg :
aa=$((4+5))
bb=‘expr 4 + 5’
3.将一个变量赋给另一个变量
eg :
A=$STR
变量叠加
eg:#aa=123
eg:#cc="$aa"456
eg:#dd=${aa}789
单引号和双引号的区别:
现象:单引号里的内容会全部输出,而双引号里的内容会有变化
原因:单引号会将所有特殊字符脱意
NUM=10
SUM=“NUMhehe” echoSUM 输出10 hehe
SUM2=‘NUMHEHE’ echoSUM2 输出$NUM hehe
列出所有变量
set
删除变量
unset NAME
eg:
# unset A 撤销变量A
# readonly B=2 声明静态的变量 B=2,不能unset
用户自定义的变量,作用域为当前的shell环境。
环境变量
用户自定义变量旨在当前的shell中生效,而环境变量会在当前shell和其所有子shell中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的shell中生效。
export 变量名=变量值 声明变量
作用域:当前shell及其所有的子shell
位置参数变量
$n | n为数字,0代表命令本身,1- 9 代 表 第 一 到 第 9 个 参 数 , 十 以 上 的 参 数 需 要 用 大 括 号 包 含 , 如 9代表第一到第9个参数,十以上的参数需要用大括号包含,如 9代表第一到第9个参数,十以上的参数需要用大括号包含,如{10}。 |
---|---|
$* | 代表命令行中所有的参数,把所有的参数看成一个整体。以"112 … $n"的形式输出所有参数 |
$@ | 代表命令行中的所有参数,把每个参数区分对待。以"1""1"“2” … “$n” 的形式输出所有参数 |
$# | 代表命令行中所有参数的个数。添加到shell的参数个数 |
shift指令:参数左移,每执行一次,参数序列顺次左移一个位置,$# 的值减1,用于分别处理每个参数,移出去的参数不可再用
$* 和 $@ 的区别
1.*和@都表示传递给函数或脚本的所有参数,不被双引号“ ”包含时,都是“1”“2”…"$n"的形式输出所有参数
2.当它们被双引号” “包含时,”*“ 会将所有的参数作为一个整体,以”12…n“的形式输出所有参数
3.”@“ 会将各个参数分开,以”1“”2“…"n"的形式输出所有参数
$? | 执行上一个命令的返回值 执行成功,返回0,执行失败,返回非0(具体数字由命令决定) |
---|---|
$$ | 当前进程的进程号(PID),即当前脚本执行时生成的进程号 |
$! | 后台运行的最后一个进程的进程号(PID),最近一个被放入后台执行的进程 & |
read命令
read[选项] 值
read -p(提示语句) -n(字符个数) -t(等待时间,单位秒) -s(隐藏输入)
eg:
read -t 30 -p “please input your name:” NAME
echo $NAME
read -s -p “please input your age:” AGE
echo $AGE
read - n 1 -p “please input your sex [M/F]:” GENDER
echo $GENDER