变量和引用

news/2024/3/5 5:44:39/文章来源:https://blog.csdn.net/2302_77035737/article/details/134715778

变量和引用

2.1.深入认识变量

2.1.1.什么是变量

        变量是在程序中保存用户数据的一段内存存储空间,变量名是内存空间的首地址

        变量三要素:名称、类型、值

2.1.2.变量的名称

        组成: 字母数字下划线组成,不能以数字开头
        变量名称的长度,shell没有明确规定,但是为了增加可读性,建议使用较短的、见名知意的名称命名

则:
        首字符必须为字母:a-z,A-Z
        中间不能由空格,可以使用下划线 ()
        不能使用标点符号
        不能使用bash中关键字,输入help查看bash的保留字

例:下面的变量名都是很好的选择

        [root@server ~]# JAVA_HOME=/usr/bin/jvm/jre-1.6.0-openjdk.x86_64

        [root@server ~]# SUM=0
        [root@server ~]# back_up=/root

2.1.3.变量的类型

        原则:shell是一种动态类型语言和弱类型语言,变量是不分数据类型的,统一都使用字符串存储,但根据变量的上下文环境,允许程序执行一些不同的操作,如:比较、整数加减

        shell的变量数据类型

[root@server ~]# vim test1.sh
        x=123

        let x+=1

        echo "x=$x"
[root@server ~]# bash  test1.sh

        x=124

2.1.4.变量的定义

        原则:直接使用,不需要变量声明。格式:变量名=变量的值
例:

[root@server ~]# vim test2.sh

        a=1

        b="hello"

        c="hello world"

        bak_dir=/mnt
[root@server ~]# bash test2.sh 

前后不能收空格
[root@server ~]#
a= 3
        bash: 3: command not found...

[root@server ~]# b =5

        bash: b: command not found...
字符串类型建议使用双引好作为定界符引起,尤其是字符串中有空格
[root@server ~]#
stu_name=zhang

        sanbash: san: command not found...

[root@server ~]# stu_name="zhang san'

[root@server ~]# stu_name='zhang san

2.1.5自定义变量

        概念:上述以赋值形态形成的变量定义形式称为自定义变量
        引用变量的值
        $变量名
        ${表达式或变量名)

例:

        [root@server ~]# a=1024
        [root@server ~]# echo $a

        1024
        [root@server ~]# echo {$a}
        {1024}
        [root@server ~]# echo ${a}
        1024

查看变量

[root@server ~]# set |more |grep a=

2.1.6.环境变量(全局变量)

        环境变量又称为全局变量,可以在任意子shell生效,环境变量又分为自定义环境变量和bash内置的环境变量,用户退出命令后改变量会丢失,若需要永久保存就必须写在文件中

        定义环境变量

例:

bash自带的全局变量:

[root@server ~]# vim /etc/profile
[root@server ~]# echo $PATH 

/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
[root@server ~]# echo $SHELL
/bin/bash      

自定义全局变量 :

        法一:export   环境变量=值

        [root@server ~]#  export back_dir1=/home/fox

        法二:

                变量名=值

                export 变量名

        [root@server ~]# NAME=zhangsan
        [root@server ~]# export NAME

 

        法三:declare    -X   变量名=值

        [root@server ~]# declare -x AGE=20

显示全局变量:

        [root@server ~]# env               

        [root@server ~]# printenv 

        [root@server ~]# export

        注意:以上三者效果一样

        注意:以上定义的环境变量都是临时的,重启后会失效,若要永久生效,则需要写入到配置文件中

2.1.7 shell 环境变量存储的文件

bash shell 初始化文件有: /etc/profile、 ~/.bash_profil、 ~/bash_login、~/.profile、 ~/.bashrc、/etc/bashrc

        /etc/profile: 存放一些全局 (共有)变量,不管哪个用户,登录时都会读取该文件。通常设置一些Shell变量PATH,USER,HOSTNAME和HISTSIZE等

        ~/.bash_profile: (每个账户都有,只针对当前账户)每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时该文件仅仅执行一次,默认情况下,此文件通过脚本执行同目录下用户的.bashrc文件

        ~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取(每个账户都有,只针对当前账户,当前账户专用的变量)
        /etc/bashrc: 为每一个运行bash shell的用户执行此文件当bash shell被打开时,该文件被
读取
/etc/inputrc文件为特定的情况处理键盘映射执行顺序:

        /etc/profile-->/etc/profile.d/*.sh--> ~/.bash profile -->/etc/bashrc-.>~/bashrc

2.1.8.位置变量

        概念:当一条命令或脚本执行时,后面可以跟多个参数,可以使用位置变量来表示该参数

 bash  testl.sh hel1o world 123 456

        当执行test1.sh 脚本时,第一个参数为hello到第四个参数可以使用特殊的符号表示,如:$1$2$3.....

        常见的位置变量
                $0 : 脚本名
                $1-$9 : 1-9个参数
                $[10} :10以上的参数需要大花括号括起
                $* : 所有参数
                $@ : 所有参数
                $#:参数个数
                $$:当前进程的PID
                $! : 上一个后台进程的PID
                $? : 上一个命令的返回值状态码,0为成功
[root@server ~]# vim test3.sh


echo "第一个位置的参数是:$1"
echo "第二个位置的参数是:$2"
echo "第四个位置的参数的:$4"
echo "所有参数是:$*"
echo "所有参数的:$@"
echo "参数个数是:$#"
echo "当前脚本的进程PID值:$$"
echo "当前脚本的文件名$0"

[root@server ~]# bash  test3.sh  a b c d e f g 

$* 与 $@区别:

        当S* 和 S @没有被引用的时候,它们确实没有什么区别,都会把位置参数当成一个个体,"$*"会把所有位置参数当成一个整体(或者说当成一个单词),如果没有位置参数,则"S* "为空,如果有两个位置参数并且IFS为空格时,"$*"相当于"$1 $2"

        "$@"会把所有位置参数当成一个单独的字段,如果没有位置参数 (S#为0),侧”S@"展开为空(不是空字符串,而是空列表),如果存在一个位置参数,则"S@"相当于"S1",如果有两个参数,则"S@"相当于"$1" "$2"等等

2.2.变量赋值和作用域

2.2.1.显示赋值:变量名=变量值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ldbm.cn/p/262997.html

如若内容造成侵权/违法违规/事实不符,请联系编程新知网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式事务有哪些解决方案?

本文我们来讨论下分布式事务的相关知识点。 分布式事务是分布式系统中非常重要的一部分,最典型的例子是银行转账和扣款,A 和 B 的账户信息在不同的服务器上,A 给 B 转账 100 元,要完成这个操作,需要两个步骤&#xff0…

【WinForm.NET开发】创建 Windows 窗体应用

本文内容 创建项目创建应用程序运行应用程序 本文演示创建一个具有基于 Windows 的用户界面 (UI) 的简单 C# 应用程序。 1、创建项目 首先,创建 C# 应用程序项目。 项目类型随附了所需的全部模板文件,无需添加任何内容。 打开 Visual Studio。在“开…

buuctf [极客大挑战 2019]Havefun1

解题思路: 小习惯 本题先看看源码或者检查一下,可能这是俺的一个小习惯。 源码里面都看到了php的代码 php代码解析: $cat$_GET[cat]; echo $cat; if($catdog){ echo Syc{cat_cat_cat_cat}; } 1.$ca…

服务器数据恢复—V7000存储raid5崩溃导致上层卷无法使用的数据恢复案例

服务器数据恢复环境: 某品牌V7000存储中有一组由几十块硬盘组建的raid5阵列。上层操作系统为windows server,NTFS分区。 服务器故障: 有一块硬盘出现故障离线,热备盘自动上线替换离线硬盘。在热备盘上线同步数据的过程&#xff0c…

Java Web——动态Web开发核心-Servlet

目录 1. 官方文档 2. Servlet概述 3. Servlet基本使用 3.1. 浏览器调用Servlet的流程 3.2. Servlet生命周期 3.3. Get/Post请求的分发处理 4. Servlet继承结构 5. 继承HttpServlet开发Servlet 5.1. HttpServlet介绍 5.2. 使用相关代码测试 5.3. HttpServletRequest …

6-49.自定义的学生类

本题要求定义一个简单的学生类,数据成员仅需要定义学号和姓名,函数成员的原型见给出的代码,请给出函数成员的类外完整实现。 其中m_id和m_name分别表示学生的学号和姓名,类型已经定义好。类内声明了3个成员函数,分别表…

ZooKeeper 如何保证数据一致性?

在分布式场景中,ZooKeeper 的应用非常广泛,比如数据发布和订阅、命名服务、配置中心、注册中心、分布式锁等。 ZooKeeper 提供了一个类似于 Linux 文件系统的数据模型,和基于 Watcher 机制的分布式事件通知,这些特性都依赖 ZooKee…

手机爬虫用Fiddler详细教程

如果你正在进行手机爬虫的工作,那么一款强大而又实用的网络调试工具Fiddler将会是你的好帮手。今天,我将和大家分享一份详细的Fiddler教程,教你如何使用它来轻松捕获和分析手机App的网络请求。让我们一起来探索Fiddler的功能和操作&#xff0…

JDK中lock锁的机制,其底层是一种无锁的架构实现的,公平锁和非公平锁

简述JDK中lock锁的机制,其底层是一种无锁的架构实现的,是否知道其是如何实现的 synchronized与lock lock是一个接口,而synchronized是在JVM层面实现的。synchronized释放锁有两种方式: 获取锁的线程执行完同步代码,…

十大经典系统架构设计面试题

十大经典系统架构设计面试题_架构_程序员石磊_InfoQ写作社区翻译自:https://medium.com/geekculture/top-10-system-design-interview-questions-10f7b5ea123d在我作为微软和Facebhttps://xie.infoq.cn/article/4c0c9328a725a76922f6547ad 任何 SDI 问题的提示 通过…

Linux基础项目开发1:量产工具——输入系统(三)

前言: 前面我们已经实现了显示系统,现在我们来实现输入系统,与显示系统类似,下面让我们一起来对输入系统进行学习搭建吧 目录 一、数据结构抽象 1. 数据本身 2. 设备本身: 3. input_manager.h 二、触摸屏编程 t…

Java(十)(网络编程,UDP,TCP)

目录 网络编程 两种软件架构 网络通信的三要素 IP IPv4的地址分类 特殊IP 端口号 协议 用UDP协议发送数据 用UDP接收数据 TCP接收和发送数据 TCP通信--支持与多个客户端同时通信 网络编程 可以让设备中的程序与网络上其他设备的程序进行数据交互(实现网络通信) 两…

ganache部署智能合约报错VM Exception while processing transaction: invalid opcode

这是因为编译的字节码不正确,ganache和remix编译时需要选择相同的evm version 如下图所示: remix: ganache: 确保两者都选择london或者其他evm,只要确保EVM一致就可以正确编译并部署, 不会再出现VM Exception while processing…

山西电力市场日前价格预测【2023-12-04】

日前价格预测 预测说明: 如上图所示,预测明日(2023-12-04)山西电力市场全天平均日前电价为179.48元/MWh。其中,最高日前电价为362.01元/MWh,预计出现在18:00。最低日前电价为0.00元/MWh,预计出…

rdf-file:SM2加解密

一:SM2简介 SM2是中国密码学算法标准中的一种非对称加密算法(包括公钥和私钥)。SM2主要用于数字签名、密钥交换和加密解密等密码学。 生成秘钥:用于生成一对公钥和私钥。公钥:用于加密数据和验证数字签名。私钥&…

免费WordPress站群插件-批量管理站群的免费软件

WordPress站群插件:让文章管理如丝般顺滑 在众多网站建设工具中,WordPress一直以其简便易用、丰富的插件生态而备受青睐。对于站群管理者而言,如何高效地更新、发布和推送文章是一项不可忽视的任务。本文将专注分享一款WordPress站群插件&am…

解读Java虚拟机垃圾回收器:探究经典算法背后的奥秘

目录 一、GC分类与性能指标 (一)垃圾回收器分类 (二)性能指标 (三)不可能三角 二、不同的垃圾回收器概述 三、Serial回收器:串行回收 四、ParNew回收器:并行回收 五、Parall…

【探索Linux】—— 强大的命令行工具 P.18(进程信号 —— 信号捕捉 | 信号处理 | sigaction() )

阅读导航 引言一、信号捕捉1. 内核实现信号捕捉过程2. sigaction() 函数(1)函数原型(2)参数说明(3)返回值(4)函数使用 二、可重入函数与不可重入函数1. 可重入函数条件2. 不可重入函…

[英语学习][5][Word Power Made Easy]的精读与翻译优化

[序言] 今日完成第18页的阅读, 发现大量的翻译错误以及不准确. 需要分两篇文章进行讲解. [英文学习的目标] 提升自身的英语水平, 对日后编程技能的提升有很大帮助. 希望大家这次能学到东西, 同时加入我的社区讨论与交流英语相关的内容. [原著英文与翻译版对照][第18页] Wh…

软件工程期末复习(选择+填空+判断)

文章目录 软件工程期末复习一、 选择题 软件工程期末复习 一、 选择题 1.“软件危机”的表现不包括:(c) A、软件产品不能按期交付 B、用户对“已完成的”软件产品时常不满意 C、程序员越来越供不应求 D、软件项目难以管理,维护困…