shell脚本——变量

目录

一、变量基础

1、shell脚本的变量是什么

2、变量的作用

3、变量作用范围

3.1 临时设置

3.2 永久设置,需要在/etc/profile文件里添加

4、删除变量

二、变量的类型

1、自定义变量

1.1 命令要求

1.2 定义新的变量

1.3 查看定义的变量的值

1.4 赋值时使用符号

1.5 从键盘输入内容为变量赋值

2、环境变量

2.1 常用环境变量

2.2 设置系统根据环境变量自动设置可执行程序

 3、只读变量

4、位置变量 

5、预定义变量


一、变量基础

1、shell脚本的变量是什么

变量来源于数学,是计算机语言中能储存计算结果或能表示值的抽象概念。保存将来会变化的数据,即使数据变化,直接调用变量即可,各种 Shell 环境中都使用到了“变量”的概念。

Shell 变量用来存放系统和用户需要使用的特定参数(值),而且这些参数可以根据用户的设定或系统环境的变化而相应变化。通过使用变量,Shell 程序能够提供更加灵活的功能,适应性更强。

2、变量的作用

用来存放系统和用户需要使用的特定参数(值)

  • 变量名:使用固定的名称,由系统预设或用户定义

  • 变量值:能够根据用户设置、系统环境的变化而变化

3、变量作用范围

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

  • 可以通过内部命令export将指定的变量导出为全局变量,使用户定义的变量在所有的子Shell环境中能够继续使用。

方法:

  1. 格式1:export 变量名

  2. 格式2:export 变量名=变量值

格式:
export 变量名=变量值

3.1 临时设置

3.2 永久设置,需要在/etc/profile文件里添加

vim /etc/profile
export PATH+=:/mnt
[root@localhost data]#source /etc/profile
[root@localhost data]#echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/data:/mnt

4、删除变量

格式:

unset 变量名

二、变量的类型

  • 自定义变量:由用户自己定义、修改和使用

  • 特殊变量:环境变量,只读变量,位置变量,预定义变量

环境变量:由系统维护,用于设置工作环境
只读变量:只可以读取不可以更改
位置变量:通过命令行给脚本传递参数
预定义变量:Bash中内置的一类变量,不能修改 。有些规定好的变量,放在那里让你使用。

系统内置变量:PATH,UID,HOSTNAME,USER

1、自定义变量

1.1 命令要求

  • 区分大小写

  • 不能使程序中的保留字和内置变量:如:if, for,hostname 命令 a=

  • 只能使用数字、字母及下划线,且不能以数字开头,注意:不支持短横线 “ - ”,和主机名相反

  • 不要使用内置的变量,使用英文尽量使用词义通俗易懂,PATH

  • 大驼峰 StudentFirstName

  • 小驼峰 studentFirstName

  • 下划线 student_name

1.2 定义新的变量

格式:

变量名=变量值

1.3 查看定义的变量的值

格式:

echo $变量名

1.4 赋值时使用符号

  • 双引号:允许通过$符号引用其他变量值

  • 单引号:禁止引用其他变量值, $视为普通字符

  • 反撇号:命令替换,提取命令执行后的输出结果,``和$(…)作用相同

  • {}:分隔变量值

  • 定义变量时中间有特殊字符,如空格,可以使用单引号或双引号

1.5 从键盘输入内容为变量赋值

方法一:
read -p “提示信息” 变量名
 
方法二:
#!/bin/bash
echo -n "提示信息:"
read 变量名

方法一:

方法二:

2、环境变量

  1. 由系统提前创建,用来设置用户的工作环境

  2. 可以使用env查看环境变量

  3. 配置文件:/etc/profile(全局生效)、~/.bash_profile(当前用户环境)

  4. 可以使子进程(包括孙子进程)继承父进程的变量,但是无法让父进程使用子进程的变量

  5. 一旦子进程修改从父进程继承的变量,将会新的值传递给孙子进程

  6. 一般只在系统配置文件中使用,在脚本中较少使用

2.1 常用环境变量

  • $USER 表示用户名称
  • $HOME 表示用户的宿主目录
  • $LANG 表示语言和字符集
  • $PWD 表示当前所在工作目录
  • $PATH 表示可执行用户程序的默认路径

2.2 设置系统根据环境变量自动设置可执行程序

echo $PATH						#查看当前搜索路径
PATH="$PATH:/root"				#将/root目录添加到搜索路径
export PATH="$PATH:/root"		#输出为全局环境变量
 
设置永久有效:
echo 'export PATH=$PATH:/root' >> /etc/profile			
#将全局环境变量追加到/etc/profile中

 3、只读变量

readonly命令用于定义只读shell变量和shell函数。readonly命令的选项-p可以输出显示系统中所有定义的只读变量。

格式:

readonly [选项] [参数]

  • 变量值不允许修改(重新赋值)的情况
  • 无法使用 unset 删除
  • 最快方法重启

4、位置变量 

  • 当执行命令行操作时,第一个字段表示命令名或脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量。
  • $n: n为数字,$0代表命令本身,$1- $9代表带一个到第九个参数,十以上的参数需要使用大括号表示,比如第十个参数为${10}

示例脚本1:输出对应位置内容(第2、5、10个内容)

示例脚本2:使用位置变量进行加法运算

5、预定义变量

系统直接定义好的变量,直接使用即可

$*表示所有位置参数的内容看成一个整体返回
$@表示所有位置参数的内容分割成n份,每份作为一个独立的个体返回

$?

表示前一条命令执行后的返回状态,返回值为 0 表示执行正确,返回任何非 0值均表示执行出现异常
$#表示命令行中位置参数的总个数
$0表示当前执行的脚本或程序的名称 即当前脚本的名字
$$当前进程ID
$!后台任务最后一个ID

三、整数变量的运算

(shell默认只支持整数的运算)

格式:expr 变量1 运算符 变量2 [运算符 变量3]

运算符:+ 加法、-减法、\*乘法、/除法、%取余

 3.1 let var =算术表达式

3.2 ((var=算术表达式))  和上面的等价

3.3 var =$[算术表达式]

3.4  var=$(expr arg1 arg2 arg3 ...)

3.5  var= `expr arg1 arg2 arg3 ...`

3.6   echo '算术表达式' | bc

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Confluence6+mysql5.7破j安装避坑详细记录

目录 一、前言 二、下载与安装 1、版本和安装环境 2、安装数据库 3、配置数据库 4、安装confluence 三、Pj confluence 1、选择语言和产品安装 2、Pj 3、上传mysql驱动 4、重启Confluence服务继续安装 四、Confluence重启卸载方法 重启方法 方法一 方法二 卸载…

【JSON显示】

1、效果 2、代码 <pre>{/* * networkObj&#xff1a; 要转换的对象* null: 转换结果的函数* 2&#xff1a;在返回值的JSON文本中添加缩进&#xff0c;空格和换行符&#xff0c;使其更容易阅读*/}{JSON.stringify(networkObj, null, 2)} </pre>

ubuntu1604安装及问题解决

虚拟机安装vmbox7 虚拟机操作&#xff1a; 安装增强功能 sudo mkdir /mnt/share sudo mount -t vboxsf sharefolder /mnt/share第一次使用sudo提示is not in the sudoers file. This incident will be reported 你的root需要设置好密码 sudo passwd root 输入如下指令&#x…

【Linux】Linux进程间通信

Linux进程间通信 一、进程间通信介绍1、概念2、进程间通信目的3、进程间通信的本质4、进程间通信分类 二、管道1、什么是管道2、匿名管道&#xff08;1&#xff09;匿名管道原理&#xff08;2&#xff09;pipe函数&#xff08;3&#xff09;匿名管道的使用步骤i、父进程调用pip…

Android Studio离线开发环境搭建

Android Studio离线开发环境搭建 1.下载离线和解压包2.创建工程3.创建虚拟机tips 1.下载离线和解压包 下载地址 百度网盘&#xff1a;https://pan.baidu.com/s/1XBPESFOB79EMBqOhFTX7eQ?pwdx2ek 天翼网盘&#xff1a;https://cloud.189.cn/web/share?code6BJZf2uUFJ3a&#…

JAVA 学习 面试(六)数据类型与方法

数据类型 基本数据类型 为什么float3.4报错 3.4 默认是浮点double类型的&#xff0c;如果赋值给float是向下转型&#xff0c;会出现精度缺失&#xff0c;&#xff0c;需要强制转换 Switch支持的数据类型&#xff1f; byte、short、int、char 、 enum 、 String 基本类型与包…

新年钜惠|泰迪智能科技免费协助企业完成3个行业AI案例建模

在新年到来之际&#xff0c;为了感谢各企业一直以来对泰迪智能科技的支持&#xff0c;日前我们推出了新年钜惠活动即&#xff1a;免费协助企业完成3个行业AI案例建模。我们希望通过这样的活动&#xff0c;可以帮助更多的企业迈出AI应用的第一步&#xff0c;同时我们也希望能够为…

Python使用pip命令安装外部库-项目内安装外部库-全局安装外部库

一、前言 在进行Python项目开发时需要安装一些外部库来扩展项目功能&#xff0c;因此需要了解pip命令的详细使用。 二、基本语法 1.安装库 pip install 包名 2.安装特定版本 pip install 包名版本号 3.升级库 pip install --upgrade 包名 4.卸载库 pip uninstall 包名 5.查看已…

【时间序列篇】基于LSTM的序列分类-Pytorch实现 part3 化为己用

系列文章目录 【时间序列篇】基于LSTM的序列分类-Pytorch实现 part1 案例复现 【时间序列篇】基于LSTM的序列分类-Pytorch实现 part2 自有数据集构建 【时间序列篇】基于LSTM的序列分类-Pytorch实现 part3 化为己用 在一个人体姿态估计的任务中&#xff0c;需要用深度学习模型…

HarmonyOS鸿蒙应用开发 (二、应用程序包结构理解及Ability的跳转,与Android的对比)

在进行应用开发前&#xff0c;对程序的目录及包结构的理解是有必要的。如果之前有过android开发经验的&#xff0c;会发现OpenHarmony的应用开发也很简单&#xff0c;有很多概念是相似的。下面对比android分析总结下鸿蒙的应用程序包结构&#xff0c;以及鸿蒙对比android的诸多…

学会这个考勤技术,企业管理就很牛啦!

随着科技的迅速发展&#xff0c;人脸识别技术逐渐成为现代社会中一项重要的工具&#xff0c;为各行各业带来了革命性的变革。 在这个背景下&#xff0c;三维人脸考勤系统作为人脸识别技术的一项创新应用&#xff0c;正在改变传统的考勤管理方式&#xff0c;提供了更智能、高效、…

关于网络安全 的 ARP欺骗 实验操作

实验设备&#xff1a; Windows server 2008 kali 1. vmware--上面菜单栏--虚拟机--设置--网络--NAT 模式 确定靶机与攻击机的连通性&#xff08;互相能 ping 通&#xff09; 靶机查看 arp 表&#xff08;arp -a&#xff09; 查看攻击机(kali)物理地址&#xff08;ip addr&…

计算机基础之微处理器简介

微处理器 微处理器定义 微型计算机的CPU也被称为微处理器&#xff0c;是将运算器、控制器和高速缓存集成在一起的超大规模集成电路芯片&#xff0c;是计算机的核心部件。能完成取指令、执行指令&#xff0c;以及与外界存储器和逻辑部件交换信息等操作。 微处理器发展 CPU从…

Day24_77 组合

77 组合 组合无序&#xff0c;排列有序。1~n个数中选k个数组合&#xff0c;k不确定&#xff0c;组合的方式。 &#xff08;图片来自代码随想录&#xff09;确定回溯法的三部曲&#xff1a; 递归函数的返回值和参数&#xff1a;集合n中取k个数&#xff0c;&#xff0c;每次从…

《WebKit 技术内幕》学习之十一(4):多媒体

4 WebRTC 4.1 历史 相信读者都有过使用Tencent QQ或者FaceTime进行视频通话的经历&#xff0c;这样的应用场景相当典型和流行&#xff0c;但是基本上来说它们都是每个公司推出的私有产品&#xff0c;而且通信等协议也都是保密的&#xff0c;这使得一种产品的用户基本上不可能…

EXECL 单元格字符串链接 CONCAT :应用:将一行数据转为json

源&#xff1a; 目标 函数表示 CONCAT("data", CHAR(10), "{", CHAR(10), " ", "ulAlarmId : ", A5, CHAR(10), " ", "ulAlarmLevel : ", D5, CHAR(10)," ", "bBo…

Webpack5 基本使用 - 2

常用 loader loader 是辅助打包工具。webpack 默认只能打包 js 文件&#xff0c;打包其它模块就需要配置 loader 来告诉 webpack 该怎么去打包其它文件。loader 可以将文件从不同的语言转换为 JavaScript。一类文件如果需要多个 loader 处理&#xff0c;loader 的执行顺序是从…

从零开始学Python第02课:第一个Python程序

在上一课中&#xff0c;我们对 Python 语言的过去现在有了一些了解&#xff0c;我们准备好了运行 Python 程序所需要的解释器环境。相信大家已经迫不及待的想开始自己的 Python 编程之旅了&#xff0c;但是新问题来了&#xff0c;我们应该在什么地方书写 Python 程序&#xff0…

caj在线转换成word怎么转?几种在线转换方法详解

caj在线转换成word怎么转&#xff1f;在日常的学习和工作中&#xff0c;我们常常会遇到各种各样的文件格式。其中&#xff0c;CAJ格式的文件因其专业性强&#xff0c;常常让许多用户感到困扰。如果你手头恰好有这种格式的文件&#xff0c;却苦于无法编辑&#xff0c;那么接下来…

Centos7 两种方式安装 MySQL5.7 步骤 yum 、本地 tar 文件

一、使用 yum 源方式安装 1、卸载系统自带 mariadb MariaDB Server 是最流行的开源 关系型数据库 之一。它由 MySQL 的原始开发者制作&#xff0c;并保证保持开源。 在 CentOS 7 中默认安装有 MariaDB 可忽略&#xff0c;安装完成之后可以直接覆盖掉 MariaDB。 查看并卸载系统…