Shell 脚本中的变量(下)

简介: 1 变量概述变量即在程序运行过程中它的值是允许改变的量。变量是用一串固定的字符串去表示不固定的内容。变量表示命令的内存空间,将数据放在内存空间中,通过变量名引用,获取数据。


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、几个符号的作用:

双引号" ":强引用,识别变量,允许通过$符号引用其他变量值。会把引号的内容当成整体来看待。
 单引号' ':弱引用,不会识别变量,禁止引用其他变量值,单引号内的内容都会被认为是普通字符。
 反撇号` ` 和 $() :调用命令执行后输出的结果。如果存在嵌套,不能使用反撇号。
 花括号{  } :定义变量范围。
相关文章
|
19天前
|
分布式计算 Hadoop Shell
使用shell脚本实现自动SSH互信功能
使用shell脚本实现自动SSH互信功能
25 1
|
3天前
|
存储 算法 安全
shell 脚本之 函数与数组
shell 脚本之 函数与数组
|
3天前
|
机器学习/深度学习 Shell Perl
shell 脚本循环语句
shell 脚本循环语句
|
3天前
|
机器学习/深度学习 Ubuntu Shell
shell 脚本 条件语句
shell 脚本 条件语句
|
3天前
|
监控 搜索推荐 Shell
|
19天前
|
Shell Linux Perl
Linux|如何允许 awk 使用 Shell 变量
Linux|如何允许 awk 使用 Shell 变量
26 2
|
19天前
|
Unix Shell Linux
轻松编写 AIX Shell 脚本
轻松编写 AIX Shell 脚本
15 1
|
19天前
|
监控 关系型数据库 Shell
Shell脚本入门:从基础到实践,轻松掌握Shell编程
Shell脚本入门:从基础到实践,轻松掌握Shell编程
|
19天前
|
关系型数据库 MySQL Shell
在Centos7中利用Shell脚本:实现MySQL的数据备份
在Centos7中利用Shell脚本:实现MySQL的数据备份
|
19天前
|
Shell Linux 编译器
C语言,Linux,静态库编写方法,makefile与shell脚本的关系。
总结:C语言在Linux上编写静态库时,通常会使用Makefile来管理编译和链接过程,以及Shell脚本来自动化构建任务。Makefile包含了编译规则和链接信息,而Shell脚本可以调用Makefile以及其他构建工具来构建项目。这种组合可以大大简化编译和构建过程,使代码更易于维护和分发。
32 5