变量和引用

news2024/12/24 9:03:47

变量和引用

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.coloradmin.cn/o/1277672.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android 获取应用签名

Android 获取应用签名 本文主要讲下在android中如何获取应用签名. 也方便平时用来区分一个应用是不是原包应用. 1: 通过PackageManager获取签名信息 首先,通过packageManager获取到指定应用的PackageInfo. 这里需要传入的flag是PackageManager.GET_SIGNATURES /*** {link P…

scrapyd及gerapy的使用及docker-compse部署

一、scrapyd的介绍 scrapyd是一个用于部署和运行scrapy爬虫的程序,它允许你通过JSON API(也即是web api)来部署爬虫项目和控制爬虫运行,scrapyd是一个守护进程,监听爬虫的运行和请求,然后启动进程来执行它们 scrapyd的安装 scr…

蓝桥第一期模拟总结

文章目录 1.动态的 Tab 栏2.地球漫游3.迷惑的this4.燃烧卡路里5.魔法失灵了6.年龄统计 所有题目链接 1.动态的 Tab 栏 本题要实现一个tab栏固定效果,看见题目就想到css中的 position: fixed; 尝试了很久都没能实现效果,后来又想到了粘性定位 position: …

网络编程之套接字

端口 && IP 在学习套接字编程之前,我们必须了解一下前缀知识。首先是IP和端口的作用。 在这之前,我们要明白一件事。那就是把数据从一台主机发送到另一台主机,是目的吗???当然不是!&a…

TOP-K问题和向上调整算法和向下调整算法的时间复杂度问题的分析

TOP-K问题 TOP-K问题:即求数据结合中前K个最大的元素或者最小的元素,一般情况下数据量都比较大 比如:专业前10名、世界500强、富豪榜、游戏中前100的活跃玩家等 对于Top-K问题,能想到的最简单直接的方式就是排序,但是…

聊聊测试for Jeffky

什么是测试 测试是一个系统性的过程,它涉及到在已开发的软件中执行程序、应用工具和技术来评估其质量、功能和性能。这个过程的目的是发现并纠正程序中的错误,提高软件的可靠性和稳定性,以满足用户的需求。 测试的分类 什么是自动化测试 自动…

Android Termux 安装Kali Linux 或 kali Nethunter史诗级详细教程

Android Termux 安装Kali Linux 或 kali Nethunter史诗级详细教程 一、Termux配置1、下载安装2、配置存储和换源3、基本工具安装 二、Kali Linux安装1、下载安装脚本2、更换apt源3、图形化安装 三、Kali Nethunter安装1、下载安装脚本2、更换apt源3、图形化连接 四、报错汇总1、…

五、关闭三台虚拟机的防火墙和Selinux

目录 1、关闭每台虚拟机的防火墙 2、关闭每台虚拟机的Selinux 2.1 什么是SELinux

《第一行代码:Android》第三版4.2常用控件的使用方法(1)

概述 本文主要讲解常用控件的使用&#xff0c;包括&#xff1a;TextView、Button、EditText、ImageView、ProgressBar、AlertDialog。 布局文件 布局文件是activity_main.xml,内容如下&#xff1a; <?xml version"1.0" encoding"utf-8"?> <…

Spring Cloud笔记 —— 什么是Spring Cloud?

引言&#xff1a; 在写这篇博客之前&#xff0c;其实吧&#xff0c;博主很久之前有过一段时间的Spring Cloud的案例项目开发经验&#xff0c;就是一个案例项目开发而已&#xff0c;也说不上有多高大上&#xff0c;那个时候&#xff0c;我其实也是从众而已罢了&#xff0c;毕竟现…

Asp.Net Core Web Api内存泄漏问题

背景 使用Asp.Net Core Web Api框架开发网站中使用到了tcp socket通信&#xff0c;网站作为服务端开始tcp server&#xff0c;其他的客户端不断高速给它传输信息时&#xff0c;tcp server中读取信息每次申请的byte[]没有得到及时的释放&#xff0c;导致内存浪费越来越多&#…

WEBAPI返回图片显示在VUE前端

WEBAPI部分 通过nuget安装Opencvsharp &#xff0c;这部分用来做图像处理 在controller中写如下方法&#xff0c;我要对原图进行旋转使用了Opencv&#xff0c;如果不需要旋转可以用注释的代码 [HttpGet(Name "ShowImage")]public async Task<IActionResult> …

基于Java+Swing+Mysql图书管理系统(含实训报告)

基于JavaSwingMysql图书管理系统-含实训报告 一、系统介绍二、功能展示1.用户登陆 四、其他系统实现五、获取源码 一、系统介绍 该系统实现了查看登录界面、主页界面、图书类别管理、用户借阅记录、用户图书查询、用户图书归还、用户信息修改。 运行环境&#xff1a;idea、jd…

selenium三猛士

selenium包括三个项目&#xff0c;分别是&#xff1a;Selenium WebDriver,Selenium IDE&#xff0c;Selenium Grid。 Selenium WebDriver Selenium WebDriver是客户端API接口&#xff0c;测试人员通过调用这些接口&#xff0c;来访问浏览器驱动&#xff0c;浏览器再访问浏览器…

亚马逊云科技 re:Invent 2023:科技前沿风向标,探索未来云计算之窗

文章目录 一、前言二、什么是亚马逊云科技 re:Invent&#xff1f;三、亚马逊云科技 re:Invent 2023 将于何时何地举行四、亚马逊云科技 re:Invent 2023 有什么内容&#xff1f;4.1 亚马逊云科技 re:Invent 2023 主题演讲4.2 亚马逊云科技行业专家探实战 五、更多亚马逊云科技活…

竞赛选题 : 题目:基于深度学习的水果识别 设计 开题 技术

1 前言 Hi&#xff0c;大家好&#xff0c;这里是丹成学长&#xff0c;今天做一个 基于深度学习的水果识别demo 这是一个较为新颖的竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-senior/pos…

深入解析SpringBoot的请求响应机制

SpringBootWeb请求响应 前言1. 请求1.1 Postman介绍 1.2 简单参数1.2.1 原始方式1.2.2 SpringBoot方式1.2.3 参数名不一致 1.3 实体参数1.3.1 简单实体对象1.3.2 复杂实体对象 1.4 数组集合参数1.4.1 数组1.4.2 集合 1.5 日期参数1.6 JSON参数1.7 路径参数 2. 响应2.1 Response…

SATA模块物理层OOB信号分析总结(三)

目录 一、简介二、总体解析2.1 OOB作用2.2 OOB信号的组成2.3 总体phy link过程2.4 整体PHY LINK Trace2.5 PHY LINK状态查询 三、其他相关链接1、SATA模块之HBA卡开发总结&#xff08;一&#xff09;2、SATA信息传输FIS结构总结&#xff08;二&#xff09;3、PCIe物理层总结-PC…

【前端】利用正则生成目录,附加解决a链接锚点偏移

前言 从html字符串中提取出来目录。 目标和源内容都很明确&#xff0c;源内容是html字符串&#xff0c;提取目标是html字符串中h1~h6元素和其闭合标签中间的内容。 思路 分析 获取html字符串 第一步要获取html字符串内容。 观察html字符串 第二步&#xff0c; 观察html字…

分享85个节日PPT,总有一款适合您

分享85个节日PPT&#xff0c;总有一款适合您 85个节日PPT下载链接&#xff1a;https://pan.baidu.com/s/1FTbSj2Baix-Cj6n42Cz26g?pwd6666 提取码&#xff1a;6666 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易。…