变量和引用

变量和引用

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.mzph.cn/news/190968.shtml

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

相关文章

蓝桥杯每日一题2023.12.2

题目描述 蓝桥杯大赛历届真题 - C 语言 B 组 - 蓝桥云课 (lanqiao.cn) 题目分析 答案:3598180 由题目分析可以知道,给小明发的牌一共有13种类型,每种类型的牌一共有四张。对于每种牌,我们都有5种选择,不拿、拿一张、…

LeetCode - 965. 单值二叉树(C语言,二叉树,配图)

二叉树每个节点都具有相同的值,我们就可以比较每个树的根节点与左右两个孩子节点的值是否相同,如果不同返回false,否则,返回true。 如果是叶子节点,不存在还孩子节点,则这个叶子节点为根的树是单值二叉树。…

FFmpeg命令行使用小结

文章目录 前言一、视频1.1 修改格式转码1.2 截取片段1.3 合并多个视频1.4 裁剪区域1.5 修改分辨率1.6 翻转视频1.7 调整速度1.8 多个视频拼接1.9 添加字幕1.10 修改文件封面1.11 添加文字水印1.12 制作画中画1.13 音视频混合/分离1.14 视频直播推流1.15 m3u8切片 二、音频2.1 视…

Spring Boot 最核心的 25 个注解

1、SpringBootApplication 这是 Spring Boot 最最最核心的注解,用在 Spring Boot 主类上,标识这是一个 Spring Boot 应用,用来开启 Spring Boot 的各项能力。 其实这个注解就是 SpringBootConfiguration、EnableAutoConfiguration、Componen…

分析实现HarmonyOS中的Linux内核架构模式

在当今的科技领域,操作系统是各种智能设备运行的关键所在。而在这方面,华为的鸿蒙系统备受瞩目。那么,鸿蒙系统技术架构是怎样的呢?本文将为您揭开这一神秘面纱。 首先,我们需要了解鸿蒙系统的基本架构。鸿蒙系统采用…

mysql中除了InnoDB以外的其它存储引擎

参考资料:https://dev.mysql.com/doc/refman/8.0/en/storage-engines.html MyISAM存储引擎 https://dev.mysql.com/doc/refman/8.0/en/myisam-storage-engine.html MyISAM 存储引擎是基于比较老的ISAM存储引擎(ISAM已经不再可用)&#xff…

shell编程系列(11)-使用grep查找文本

文章目录 前言grep的使用根据关键字查找反向查找 结语 前言 grep命令也是我们在日常使用linux,编写shell脚本中会用到的一个高频命令,grep主要是帮助我们查找我们想要的内容,类似于我们在office word里面的 Ctrl f 查找功能,但是…

SLURM资源调度管理系统REST API服务配置,基于slurm22.05.9,centos9stream默认版本

前面给大家将了一下slurm集群的简单配置,这里给大家再提升一下,配置slurm服务的restful的api,这样大家可以将slurm服务通过api整合到桌面或者网页端,通过桌面或者网页界面进行管理。 1、SLURM集群配置 这里请大家参考&#xff1…

使用C语言创建高性能爬虫ip网络

之前写的python和GO语言的爬虫ip池的文章引起很大反响,这次我将以C语言来创建爬虫IP池,但是因为其复杂性,可能代码并非完美。但是最终也达到的想要的效果。 因为在C语言中创建代理IP池可能会比较复杂,且C语言并没有像Python那样的…

07-原型模式-C语言实现

原型模式: Specify the kinds of objects to create using a prototypical instance,and create new objects by copying this prototype.(用原型实例指定创建对象的种类, 并且通过拷贝这些原型创建新的对象。 ) UML图&#xff1…

关于 Kubernetes中Admission Controllers(准入控制器) 认知的一些笔记

写在前面 工作中遇到,简单整理记忆博文为官方文档整理涉及内置准入控制的分类理解理解不足小伙伴帮忙指正 人活着就是为了忍受摧残,一直到死,想明了这一点,一切事情都能泰然处之 —— 王小波《黄金时代》 为什么需要准入控制器 准…

非得让你会之MyBatis插件与Java动态代理

引言 咱们今天聊聊Java动态代理,这东西在开发中真的太常见了。比如Spring AOP、RPC,它们都离不开动态代理。然后,咱们再来说说MyBatis插件,这可是MyBatis框架中的一个超实用的功能,它就像是给MyBatis加了个“超能力”…

『测试基础』| 如何理解测试用例管理和缺陷管理?

『测试管理攻略』| 如何理解测试用例管理和缺陷管理? 1 测试用例定义2 测试用例设计原则3 测试用例的评审4 测试如何维护?5 用例的作用6 用例管理工具7 缺陷关注的重点8 缺陷分析9 缺陷管理工具 1 测试用例定义 测试用例(TestCase&#xff0…

西南科技大学(数据结构A)期末自测练习四

一、填空题(每空1分,共10分) 1、树最适合用来表示( C ) A.有序数据元素 B.无序数据元素 C.元素之间具有层次关系的数据 D.元素之间具有多对多关系的数据 2、根据二叉树的定义可知二叉树共有( B)种不同的基本形态…

react 面试题 50题 大公司常问的面试

1. 请解释 React 是什么以及它的主要特点。 2. 请解释 React 中的虚拟 DOM(Virtual DOM)以及它的工作原理。 3. 请解释 React 中的组件(Components)以及它们如何工作。 4. 请解释 React 中的生命周期方法(Lifecycle Me…

Zabbix监控openstack系统资源

一、简介 随着信息技术的不断发展,作为基础平台,封闭架构带来不兼容性,无法支持异构虚拟机系统,也难以支撑开放合作的产业链需求。随着云计算时代的来临,虚拟化管理平台向开放平台架构转变,多种厂家的虚拟机可以在开放的平台架构下共存,不同的应用厂商可以基于开放…

12.1平衡树(splay),旋转操作及代码

平衡树 变量定义 tot表示结点数量,rt表示根的编号 v[i]表示结点i的权值 fa[i]表示结点i的父亲节点 chi[i][2]表示结点i的左右孩子 cnt[i]表示结点i的权值存在数量,如1123,v[3]1,则cnt[3]2;就是说i3的三号结点的权值为1&…

备忘录模式-C++实现

备忘录是一种行为型设计模式,它允许在不破坏封装性的前提下捕获和恢复一个对象的内部状态。它将对象的内部状态保存到备忘录对象中,并在需要的时候从备忘录中取出恢复状态,实现了状态的保存和恢复。 备忘录有以下三个角色: 1、发…

Mybatis-Plus条件构造器Wrapper

常用的两种条件构造器分别是 QueryWrapper 和 LambdaQueryWrapper QueryWrapper Autowiredprivate StudentMapper studentMapper;Testpublic void test() {//条件分页查询学生,性别为2(代表女),年龄大于等于12的学生QueryWrapper&…

树和二叉树的基本概念和堆的实现

树的概念及结构 树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 1.有一个特殊的结点&#…