变量分类
1.用户自定义变量
2.环境变量:主要保存的是和系统操作环境相关的数据。
变量可以自定义,但是对系统生效的环境变量名和变量作用是固定的。
3.位置参数变量:主要用来向脚本文件传递参数或数据。
变量名不能自定义,作用也固定。
4.预定义变量
用户自定义变量
定义变量
变量名=变量值 (如:a=4 b="csdn")
注意:=等号两边不能有空格
变量叠加
x=123
x="$x"456
那么echo $x的值就是123456
删除变量
unset 变量名
环境变量
执行bash命令,即进入当前shell的子shell。执行pstree可查看进程树,即可看出两个shell的"父子关系"
环境变量在两个shell中都是生效的,但是任一个shell中定义的用户自定义变量都是只在该shell中有效。环境变量相当于全局变量,自定义变量相当于局部变量。
声明环境变量(全局变量)
export 变量名=变量值
Tips:set #查看所有变量 env #查看环境变量
位置参数变量
参数变量: $n
作用:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十及以上的参数需要使用大括号包含,如${10}
比如:执行命令 ./test.sh 5 7
(test.sh将作为$0传入到.sh文件中,5将作为$1传入到.sh文件中,7将作为$2传入)
test.sh内容:
#!/bin/bash
num1=$1
num2=$2
sum=$(($num1+$num2))
echo $sum
那么脚本执行结果就为12。注意要将两个相加数求和,必须用$(())包括才行。
参数变量:$*
作用:代表命令行中的所有参数,并把所有参数看成一个整体
参数变量:$@
作用:代表命令行中的所有参数,不过区分每个参数
参数变量:$#
作用:代表命令行中所有参数的个数
参数变量:$*与$@的区别
#!/bin/bash
for i in "$*"
#$*中的所有参数被看成一个整体,所以循环只有一次
do
echo "Parameter is :$i"
done
for x in "$@"
#$@
中每个参数都被看成是独立的,所以$@中有几个参数就循环几次
do
echo "Parameter is :$x"
done
预定义变量
变量$?
作用:存储最后一个执行的命令的返回状态。若为0,则表明上一个命令正确执行;若非0(具体是多少,看错误是什么),则表明上一个命令执行不正确。
变量$$
作用:存储当前进程的PID
变量$!
作用:存储后台运行的最后一个进程的PID
接收键盘输入
命令格式:read [选项] [变量名]
——选项 -p: "提示信息",等read输入时,输出提示信息
-t: 指定输入的等待时间
-s: 隐藏输入的数据,适用于机密信息的输入
-n: 字符数,read命令只接受指定字符数的参数就会执行
例子: #!/bin/bash
read -p "input your name :" -t 30 name
echo $name
echo -e "\n" #换行
read -p "input your password:" -s pwd
echo $pwd
echo -e "\n"
read -p "input your sex[M/F]: " -n 1 sex
echo $sex