shell脚本变量

news2024/12/26 23:22:48

shell脚本变量

  • 1.变量概述
    • 1.1变量类型
    • 1.2变量的命令要求
    • 1.3 变量作用范围
    • 1.4几个符号作用
  • 2.局部变量
  • 3.环境变量
    • 3.1系统内置环境变量
  • 4. 只读变量
  • 5.位置变量
  • 6.预定义变量
  • 7.四个配置文件作用

1.变量概述

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

变量作用:
用来存放系统和用户需要使用的特定参数

  • 变量名:使用固定的名称,由系统预设或定义用户
  • 变量值:能够根据用户设置,系统环境的变化而变化

1.1变量类型

变量赋值:变量名=变量值
bash变量类型:
1.根据变量的生效范围可分为:

  • 环境变量:全局生效,在任何bash环境中都可以识别

  • 局部变量;生效范围为当前shell进程,对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效

  • 本地变量:生效范围为当前shell进程中某代码片段,通常指函数,只能在定义他们的函数、脚本内部使用
    2.根据是否由系统定义可分为:

  • 内置变量:由系统维护,用于设置工作环境

  • 自定义变量:由用户自己定义,修改和使用
    3.特殊变量:

  • 环境变量:全局生效,在任何bash环境中都可以识别

  • 只读变量:只可以读取不可以更改

  • 位置变量;通过命令行给脚本传递参数。

  • 预定义变量;用来保持脚步程序的执行信息

    -   $0:当前脚本名称
    -   $?:查看上一次命令的执行状态,返回0为正常,非0为错误
    - $*:返回所有参数,当整体返回
    - $@:返回所有参数,当个体返回
    - $#:获取当前shell命令行中参数的总个数
    - $$;获取当前进程的pid
    

1.2变量的命令要求

  • 区分大小写
  • 不使用程序中的保留子和内置变量名称:如:if ,for,hostename
  • 只能使用数字,字母及下划线,且不能以数字开头,注意:不支持短横线“-”,和主机名相反
  • 使用英文时,尽量使用词义通俗易懂

1.3 变量作用范围

默认情况下,新定义的变量只在当前隔的shell环境中有效,因此称为局部变量,当进入子程序或新的shell环境中,局部变量将无法再起作用

可以通过内部命令export将指定的变量为全局变量,使用户定义的变量在所有子shell环境中可以继续使用
1.法一,设置全局变量:
export name=value
或 declare -x name=value

2.法二,将局部变量转变为全局变量:export name
在这里插入图片描述

1.4几个符号作用

双引号" ":会把引号的内容当成整体来看待。强引用,识别变量,允许通过$符号引用其他变量值。

单引号’ ':会把引号的内容当成整体来看待。弱引用,禁止引用其他变量值,单引号内的内容都会被认为是普通字符。

反撇号 和 $() :调用命令执行后输出的结果。如果存在嵌套,不能使用反撇号。

花括号{ } :定义变量范围。 echo c o l o r {color} color{price}
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.局部变量

定义变量:变量名=变量值

引用变量; 变量名 = 变量名= 变量名={变量名}
查看变量:

  • echo $变量名:查看单个变量
  • set:产看所有变量,包括局部变量和环境变量

取消变量:unset 变量名

作用范围;仅在当前shell环境中有效,无法在子shell环境中使用

3.环境变量

3.1系统内置环境变量

1.由系统提前创建,用来设置用户的工作环境
2.使用env命令查看所有环境变量
3.需要记住的常用环境变量;

  • $PATH 表示可执行文件的默认路径
  • $USER 表示用户名称
  • $HOME 表示用户的宿主目录
  • $LANG 表示语言和字符集
  • $PWD 表示当前所在工作目录
    4.环境变量的特性
  • 可以使子进程继承父进程的变量,但是无法让父进程使用子进程的变量
  • 一旦子进程修改层父进程继承的变量,将会新的值传递给孙子进程
  • 一般只在系统配置文件中使用,在脚本中较少使用

4. 只读变量

1.我们在定义shell变量时,默认定义的变量是可以修改的,但有一种变量是不能修改的,就是只读变量
2.只读变量只能被赋值一次。只读变量在取得初始值之后,只能进行读取操作,不能重新赋值或删除

5.位置变量

位置变量也称为位置参数
使用$n表示,n为数字序号,且必须为整数

[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.预定义变量

预定义变量是系统定义好的变量,用来保持脚本程序的执行信息。

可以直接使用这些变量,不能直接为这些变量赋值。

在这里插入图片描述

$* 和 $@的区别:

  • 不加双引号的话,$* 和 $@ 都代表脚本后面跟的所有参数。
  • 加上双引号的话," ∗ " 会把所有参数当作一个整体去看待(此时参数数量为 1 ), " *"会把所有参数当作一个整体去看待(此时参数数量为1)," "会把所有参数当作一个整体去看待(此时参数数量为1),"@"会把脚本后面跟的每一个参数当作一个个体去看待。

7.四个配置文件作用

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 这三个配置文件。

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

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

相关文章

(docker)mysql镜像拉取-创建容器-容器的使用【个人笔记】

【容器的第一次创建】 容器的第一次创建,需要先下载镜像,从 镜像拉取 0、可以搜索镜像的版本 docker search mysql1、先拉取MySQL的镜像,默认拉取最新版,使用下面的命令拉取mysql镜像 docker pull mysql也可以指定mysql的版本…

日撸java_day60

文章目录 小结k近邻算法(knn)定义算法流程距离度量k值的选择总结 聚类定义k-means聚类步骤k-means算法小结 小结 k近邻算法(knn) 定义 如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别…

Llms大模型中国开源项目大全(更新至2023-08-10)

一、前言 你了解中国ChatGPT相关开源项目的情况吗? 如果想要从事chatGPT相关项目的开发和研究,有哪些可以借鉴和开源项目? 中国的chatGPT开源项目发展如何,本文将给你带来答案。 二、项目概述 数据截至到:2023年8月1…

由于目标计算机积极拒绝,无法连接。 Could not connect to Redis at 127.0.0.1:6379

项目在启动时候报出redis连接异常 然后查看是redis 连接被计算机拒绝 解决方法 打开redis安装文件夹 先打开redis-servce.exe挂着,再打开redis-cli.exe 也不会弹出被拒接的问题了。而且此方法不用每次都去cmd里输入命令。

大连交通大学813软件工程考研习题

1.什么是软件生存周期模型?有哪些主要模型? 生存周期模型:描述软件开发过程中各种活动如何执行的模型。对软件开发提供强有力的支持,为开发过程中的活动提供统一的政策保证,为参与开发的人员提供帮助和指导,是软件生存周期模型…

【雕爷学编程】Arduino动手做(07)---旋转电位器模块之结构特点、作用、参数与测量

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&#x…

jstack 使用

.、用 ps -ef | grep -i java 命令&#xff0c;找出 Java|tomcat 进程 pid&#xff0c;用于查看全格式进程。 .、用 ps -aux | grep -i java 命令&#xff0c;找出 Java|tomcat 进程 pid&#xff0c;用于查看进程。.、用 top -Hp <pid> 命令&#xff0c;找出 CPU 占用最高…

【雕爷学编程】Arduino动手做(201)---搭建行空板开发环境之SSH连接

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

关于城市地下综合管廊运维火灾风险因素的探讨

安科瑞 华楠 摘要&#xff1a;随着城市基础设施的不断完善&#xff0c;地下综合管廊作为城市生命线工程得到了快速发展&#xff0c;综合管廊后期运维周期较长&#xff0c;如何有效保障管廊内各管线安全运行显得尤为重要。本文从地下综合管廊火灾的特点出发&#xff0c;根据燃烧…

【LeetCode】144. 二叉树的前序遍历、94. 二叉树的中序遍历、145. 二叉树的后序遍历

作者&#xff1a;小卢 专栏&#xff1a;《Leetcode》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 144. 二叉树的前序遍历 144. 二叉树的前序遍历 题目&#xff1a; 给你二叉树的根节点 root &…

开放式耳机推荐品牌,开放式耳机评测

​在忙碌的生活中&#xff0c;音乐成为我们放松心灵、享受美好的方式之一。而一副出色的蓝牙耳机&#xff0c;则能为我们带来沉浸式的音乐体验&#xff0c;仿佛让我们置身于音乐的海洋中。不入耳佩戴设计&#xff0c;耳挂在耳朵上&#xff0c;更舒适稳固&#xff0c;也更加干净…

16通道AD采集FMC子卡推荐哪些?

FMC149是一款16通道65MHz采样率14位直流耦合AD采集FMC子卡&#xff0c;符合VITA57.1规范&#xff0c;可以作为一个理想的IO模块耦合至FPGA前端&#xff0c;16通道AD通过FMC连接器&#xff08;HPC&#xff09;连接至FPGA从而大大降低了系统信号延迟。 该板卡支持板上可编程采样…

Vue3 —— reactive 全家桶及源码学习

该文章是在学习 小满vue3 课程的随堂记录示例均采用 <script setup>&#xff0c;且包含 typescript 的基础用法 前言 上一篇学习了 ref 全家桶&#xff0c;在此基础上一起学习下 reactive 全家桶 一、reactive 对比 ref ref 可以接收 所有类型&#xff0c;reactive 只…

W5500-EVB-PICO 做TCP Server进行回环测试(六)

前言 上一章我们用W5500-EVB-PICO开发板做TCP 客户端连接服务器进行数据回环测试&#xff0c;那么本章将用开发板做TCP服务器来进行数据回环测试。 TCP是什么&#xff1f;什么是TCP Server&#xff1f;能干什么&#xff1f; TCP (Transmission Control Protocol) 是一种面向连…

day7 8-牛客67道剑指offer-JZ74、57、58、73、61、62、64、65、把字符串转换成整数、数组中重复的数字

文章目录 1. JZ74 和为S的连续正数序列暴力解法滑动窗口&#xff08;双指针&#xff09; 2. JZ57 和为S的两个数字3. JZ58 左旋转字符串4. JZ73 翻转单词序列5. JZ61 扑克牌顺子6. JZ62 孩子们的游戏(圆圈中最后剩下的数)迭代 模拟递归 约瑟夫环问题 找规律 7. JZ64 求123...n8…

CH342/CH343/CH344/CH347/CH9101/CH9102/CH9103/CH9104 Linux串口驱动使用教程

CH343 Linux串口驱动 ch343ser_linux 支持USB转串口芯片 ch342/ch343/ch344/ch347/ch9101/ch9102/ch9103/ch9104等 &#xff0c;同时该驱动配合ch343_lib库还提供了芯片GPIO接口的读写功能&#xff0c;内部EEPROM的信息配置和读取功能等。 芯片型号串口数量GPIO数量CH342F/K2C…

【Linux命令行与Shell脚本编程】第十九章 正则表达式

Linux命令行与Shell脚本编程 第十九章 正则表达式 文章目录 Linux命令行与Shell脚本编程 第十九章 正则表达式九.正则表达式9.1.正则表达式基础9.1.1.正则表达式的类型9.2.定义BRE模式9.2.1.普通文本9.2.2.特殊字符 9.2.3.锚点字符锚定行首^锚定行尾$组合锚点 9.2.4.点号字符\.…

全栈开发流程——数据表的分析与创建详解实战演示(一)

作者介绍 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&…

【Linux】UDP协议——传输层

目录 传输层 再谈端口号 端口号范围划分 认识知名端口号 两个问题 netstat与iostat pidof UDP协议 UDP协议格式 UDP协议的特点 面向数据报 UDP的缓冲区 UDP使用注意事项 基于UDP的应用层协议 传输层 在学习HTTP等应用层协议时&#xff0c;为了便于理解&#xff…

Al Go: 蒙特卡洛树搜索(MCTS)简介

目录 1. 前言 1.1 Minimax 1.2 剪枝 1.3 蒙特卡洛树搜索 1.4 为什么随机走子会可行呢&#xff1f; 2. vanilla Monte Carlo tree search 3. UCT-based trade-off between exploitation and exploration 4. MCTS基本算法流程 5. Efficiency Through Expert Policies 6…