5 位置变量
位置变量也称为位置参数。
使用$n表示,n为数字序列号,且必须为整数。
如:$1
、$2
、…、$9
、${10}
、${11}
。
两位数需要加花括号{},不然$10
会被识别为:$1
和0 。
示例:
[root@localhost ~]# cat weizhi.sh #!/bin/bash echo "$1" #显示位置1的参数 echo "$2" #显示位置2的参数 echo "$3" #显示位置3的参数 [root@localhost ~]# bash weizhi.sh aaa bbb ccc aaa //对应$1 bbb //对应$2 ccc //对应$3 复制代码
6 预定义变量
预定义变量是系统定义好的变量,用来保持脚本程序的执行信息。
可以直接使用这些变量,不能直接为这些变量赋值。
变量 | 作用 |
$? | 表示前一条命令执行后的返回状态。返回值为 0 表示执行正确,返回任何非 0值均表示执行出现异常。 |
$* | 表示所有位置参数的内容。当整体返回。(将输入的参数作为一个单词) |
$@ | 表示所有位置参数的内容。当个体返回。可作为数组。(将参数内容分割成n份,每份作为独立个体) |
$# | 表示命令行中位置参数的总个数。 |
$0 | 表示当前脚本名称(如果是软链接,显示当前软链接文件名)。 |
$_ | 表示在此之前执行的命令或脚本的最后一个参数。 |
$$ | 获取当前进程的PID。 |
$*
和 $@
的区别:
- 不加双引号的话,
$*
和$@
都代表脚本后面跟的所有参数。 - 加上双引号的话,"
$*
"会把所有参数当作一个整体去看待(此时参数数量为1),"$@
"会把脚本后面跟的每一个参数当作一个个体去看待。
示例:
1)测试 $? 的作用。
[root@localhost ~]# ls /opt rh [root@localhost ~]# echo $? //返回0表示执行正常 0 [root@localhost ~]# ls /xxx ls: 无法访问/xxx: 没有那个文件或目录 [root@localhost ~]# echo $? //返回非0表示执行出现异常 2 [root@localhost ~]# ls /opt /xxx ls: 无法访问/xxx: 没有那个文件或目录 /opt: rh [root@localhost ~]# echo $? 2 复制代码
2)测试 $0
、$$
、$#
、$@
的作用。
[root@localhost ~]# cat special.sh #!/bin/bash echo "当前脚本名称为:$0" echo "当前程序的PID为:$$" echo "位置参数的个数为:$#" echo "显示所有的位置参数:$@" [root@localhost ~]# bash special.sh aa bb cc 当前脚本名称为:special.sh 当前程序的PID为:4042 位置参数的个数为:3 显示所有的位置参数:aa bb cc 复制代码
7 read 从键盘输入内容为变量赋值
read可以从键盘输入变量值,即将键盘输入的内容变成变量值。
格式: read 变量名
常用选项:
- -p:后面跟提示信息,即在输入前打印提示信息。
- -s:安静模式,在输入字符时不再屏幕上显示,例如密码。
- -t:后面跟秒数,定义输入字符的等待时间。
- -n:后跟一个数字,定义输入文本的长度。
- -a:后跟一个变量,该变量会被认为是个数组。
示例:
1)赋值演示。
[root@localhost ~]# read price //为变量赋值 100 [root@localhost ~]# echo $price //查看变量值 100 [root@localhost ~]# read -p "请输入您的年龄:" age 请输入您的年龄:20 [root@localhost ~]# echo $age 20 复制代码
2)在脚本中使用。
[root@localhost ~]# cat pass.sh #!/bin/bash read -p "请输入您的姓名:" name echo "您的姓名是:$name" [root@localhost ~]# bash pass.sh 请输入您的姓名:nancy 您的姓名是:nancy 复制代码
8 四个配置文件的作用
1、/etc/profile 文件
系统级的配置文件,开机时系统自动加载该文件中的配置。
系统每次启动都会自动执行/etc/profile 文件里的命令,这个文件是对全局有效的(所有的shell环境和用户)。
2、~/.bash_ profile 文件
不同用户登录系统时,会自动执行自己家目录中的~/ .bash_ profile 文件中的命令,之后自动执行~/ . bashrc。(因为~/ .bash_ profile文件中规定了,如果~/ . bashrc是个文件,则执行该文件)。
3、~/.bashrc 文件
当前用户每切换一个shell环境都会自动加载~/ . bashrc 文件中的配置 ,之后自动执行/etc/bashrc文件。(因为~/ . bashrc文件中规定了,如果/etc/bashrc是个文件,则执行该文件)。
4、/etc/bashrc 文件
/etc/bashrc针对所有用户,用户每切换一个shell环境都会自动执行。
5、/etc/skel/ 目录
/etc/skel/是用来存放新用户配置文件的目录,当我们添加新用户的时候,这个目录下的所有文件会自动被复制到新添加的用户的家目录下。这个目录下的所有文件都是隐藏文件(以.开头的文件)。
该目录中包括 .bash_logout 、.bash_profile 、.bashrc 这三个配置文件。
9 重点总结
1、全局变量和局部变量:
- 环境变量(全局变量):在当前shell环境和子shell环境(包括孙子shell环境)中都生效。
- 局部变量:只在当前shell环境中生效,子shell环境中无效。
2、设置、查看和删除变量的命令:
- 变量赋值:
- 方法1:变量名=变量值(name=value)
- 方法2:read 变量名, 之后从键盘输入中获取变量名的值
- 设置环境变量:export name=value 或 export name
- 设置只读变量:readonly name 。只读变量不可删除或重新赋值。
- 查看变量和变量值:
- env:查看所有环境变量。
- set:查看所有变量,包括局部变量和环境变量。
- 删除变量:unset name
3、几个符号的作用:
双引号" ":强引用,识别变量,允许通过$符号引用其他变量值。会把引号的内容当成整体来看待。 单引号' ':弱引用,不会识别变量,禁止引用其他变量值,单引号内的内容都会被认为是普通字符。 反撇号` ` 和 $() :调用命令执行后输出的结果。如果存在嵌套,不能使用反撇号。 花括号{ } :定义变量范围。