当前位置: 首页 > news >正文

变量和引用

变量和引用

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.显示赋值:变量名=变量值

相关文章:

  • 外包干了2年,技术退步明显。。。
  • RocketMQ消息过滤机制源码详解
  • 【工具】Zotero|使用Zotero向Word中插入引用文献(2023年)
  • 采集工具-免费采集器下载
  • 华为1+x网络系统建设与运维(中级)-练习题2
  • 第七章 前端
  • nvm for windows使用与node/npm/yarn的配置
  • 封装hook函数【便于复用】
  • Webshell混淆免杀的一些思路
  • 说说你对Vue的理解
  • C#拼夕夕自动化登录,电商网页自动化操作。WebView2
  • 代码随想录算法训练营第三十九天| 62 不同路径 63 不同路径 ||
  • QT 中使用 QTableView 和 QStandardItemModel 实现将数据导出到Excel 和 从Excel导入到 QTableView 的功能
  • AI创作ChatGPT源码+AI绘画(Midjourney绘画)+DALL-E3文生图+思维导图生成
  • solidity案例详解(五)能源电力竞拍合约
  • 《Java编程思想》读书笔记-对象导论
  • 【面试系列】之二:关于js原型
  • CSS实用技巧干货
  • FastReport在线报表设计器工作原理
  • Median of Two Sorted Arrays
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Python 反序列化安全问题(二)
  • React as a UI Runtime(五、列表)
  • tab.js分享及浏览器兼容性问题汇总
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • Windows Containers 大冒险: 容器网络
  • 闭包--闭包作用之保存(一)
  • 编写高质量JavaScript代码之并发
  • 代理模式
  • 七牛云假注销小指南
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • # Panda3d 碰撞检测系统介绍
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (a /b)*c的值
  • (LeetCode C++)盛最多水的容器
  • (solr系列:一)使用tomcat部署solr服务
  • (多级缓存)多级缓存
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (黑马C++)L06 重载与继承
  • (十)T检验-第一部分
  • (四)库存超卖案例实战——优化redis分布式锁
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)fock函数详解
  • (转)VC++中ondraw在什么时候调用的
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .“空心村”成因分析及解决对策122344
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET NPOI导出Excel详解
  • .net 发送邮件
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • .net生成的类,跨工程调用显示注释