一、用户自定义变量
1. 什么是变量
变量是计算机内存的单元,其中存放的值可以改变。当Shell脚本需要保存一些信息时,如一个文件名或者一个数字,就把它存放在一个变量中。每个变量都要有一个名字,以便用来引用。使用变量可以保存有用信息,使系统获知用户相关设置,变量也可以用来保存暂时信息。
2. 变量设置规则
(1)变量名称可以由字母、数字和下划线组成,但不能以数字开头。
(2)在Bash中,变量的默认类型都是字符串型,如果要进行数字运算,需要指定变量的类型。
(3)设置变量时,变量用等号连接值,等号左右两侧不能有空格。如:name=zhongguo
(4)变量的值如果有空格,则需要用单引号或双引号括起来。如:name="Zhong Guo"
(5)在变量值中,可以使用转义符“\”。
(6)如果需要增加变量的值,那么可以进行变量值的增加。不过变量需要用双引号包含"$变量名"或者用${变量名}包含。
(7)如果把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令
(8)环境变量名称建议大写,以便区分。
3. 变量分类
(1)用户自定义变量:由用户定义变量名,变量的值以及变量的作用,也叫作本地变量。
(2)环境变量:这种变量中主要保存的是和系统操作环境相关的数据。系统允许用户自己添加新的环境变量。
(3)位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
(4)预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
4.我们可以用set来查看所有变量的值,用 unset 变量名 来删除变量的值。
二、环境变量
1. 环境变量是什么
用户自定义变量只在当前的Shell中生效,而环境变量会在当前Shell和这个Shell的所有子Shell中生效。如果把环境变量写入相应的配置文件,会在所有Shell中生效。可以使用pstree 命令来查看父Shell和子Shell。
2. 设置环境变量
(1)申明变量
export 变量名=变量值
(2)查询变量
env
(3)删除变量
unset 变量名
三、位置参数变量
1. 位置参数变量
位置参数变量是固定的,它的变量名和作用也是固定的。
位置参数变量 |
作用 |
$n |
n为数字,$0代表命令本身,$1~$9代表第一到第九个参数,十以上的参数需要用大括号包含,如:${10} |
$* |
这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体。 |
$@ |
这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待 |
$# |
这个变量代表命令行中所有参数的个数 |
1.1 位置参数变量 --$n
$n 的主要作用就是用来把命令行和命令的参数传递到脚本当中。如:
#!/bin/bash num1=$1 num2=$2 sum=$(($num1+$num2)) echo $sum
运行脚本可以得到:
1.2 位置参数变量 --$*、$@、$#
$*和$@都是把参数向脚本里传递,$*是把所有的参数当作一个整体传递,$@也是传递所有的参数,只是每个参数都单独传递。$#是传递所有参数的个数。如:
#!/bin/bash for i in "$*" do echo $i done for y in "$@" do echo $y done echo "参数个数为:$#"
运行脚本可以得到:
四、预定义变量
1. 预定义变量
预定义变量 |
作用 |
$? |
判断上一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数由命令决定),则证明上一个命令执行不正确。 |
$$ |
显示当前进程的进程号(PID) |
$! |
显示后台运行的最后一个进程的进程号(PID) |
1.1 预定义变量--$?
它是用来判断上一个命令的执行情况的。返回0,则命令正确执行;返回非0数,则命令错误。就如之前的逻辑与&&与逻辑或||,后面的命令就是用此来判断前一个命令是否正确执行。
1.2 预定义变量--$$与$!
$$是用来显示当前进程的进程号,$!是用来显示后台运行的最后一个进程号
#!/bin/bash echo "$$" #此进程就是执行此脚本test.sh的进程 find /root -name sum.sh & #使用find命令在root目录下查找文件 #符号&代表把此命令放入后台执行 echo "$!"
2. 接收键盘输入
语法:read [选项] [变量]
选项:-p "提示信息" 在等待read输入时,输出的提示信息。
-t 秒数 指定等待用户输入的时间,如果不指定,read会一直等待下去。
-n 字符数 指定read命令接受输入的字符数,达到指定的字符数,read就会执行
-s 隐藏输入的数据,适用于机密信息是输入。
变量:用于存放输入信息
#!/bin/bash read -t 30 -p "请输入你的命令:" name echo "你的名字是:$name" #提示输入名字并等待30秒,变量name用来保存输入信息 read -t 30 -s -p "请输入你的年龄:" age echo "你的年龄是:$age" #提示输入年龄并等待30秒,-s把输入信息给隐藏了 read -t 30 -n 1 -p "请选择你的性别[M/F]:" sex #提示输入年龄,-n 1指定只接受1个字符就会执行 echo "你的性别是:$sex"