Shell 学习笔记 - 变量的类型 + 变量的赋值

1.6 Shell 变量的类型

Shell 变量分为四类,分别是

  • 自定义变量
  • 环境变量
  • 位置变量
  • 预定义变量

根据工作要求临时定义的变量称为自定义变量

环境变量一般是指用 export 内置命令导出的变量,用于定义 Shell 的运行环境,保证 Shell 命令正确执行,如 $0、$1、$#;

从命令行、函数或脚本执行等传递参数时,$0、$1 称为特殊位置变量

预定义变量是在 bashLinux 系统的默认 Shell)中已有的变量,可以直接使用,如 **$@、$***等。

1.6.1 自定义变量

自定义变量可以理解为局部变量或普通变量,只能在创建它们的 Shell 函数或 Shell 脚本中使用。

自定义变量的说明如下:

自定义变量表的说明
定义自定义变量变量名=变量值
变量名必须以字母或下画线开头,区分大小写。
IP1=192.168.2.115
使用自定义变量$变量名
查看自定义变量echo $变量名 set(所有变量:包括自定义变量和环境变量)
取消自定义变量unset 变量名
自定义变量作用范围仅在当前 Shell 中有效

1.6.2 环境变量

环境变量也可以称为全局变量,可以在创建它们的 Shell 及其派生出来的任意子进程 Shell 中使用。

环境变量的说明如下:

环境变量表说明
定义环境变量使用 export 命令声明即可。
例如,export back_dir =/home/backup
再如,export back_dir 将自定义变量转换为环境变量
使用环境变量$变量名${变量名}
查看环境变量echo $变量名,或 env
例如,`env
取消环境变量unset 变量名
环境变量作用范围在当前 Shell 和子 Shell 中有效

1.6.3 位置变量

在 Shell 中存在一些位置变量。位置变量用于在命令行,函数或脚本中传递参数,其变量名不用自己定义,其作用也是固定的。执行脚本时,通过在脚本后面给出具体的参数(多个参数用空格隔开)对应的位置变量进行赋值。

$0 代表命令本身,$1~$9 代表接收的第 1 ~ 9 个参数,$10 以上需要用 {} 括起来,如 ${10} 代表接收的第 10 个参数。

1.6.4 预定义变量

预定义变量在 Shell 中可以直接使用,位置变量也是预定义变量的一种。

  • 预定义变量的说明如下:

    预定义变量说明表
    $0脚本名
    $*所有参数列表,将所有参数当作一个单词。
    `$@所有参数列表,每个参数视为一个独立的字符串。
    $#参数的个数
    $$当前进程的 PID
    $!上一个后台进程的 PID
    $?上一个命令的返回值,0 表示成功
  • 预定义变量示例脚本如下:

    #!/bin/bash# 打印脚本名
    echo "脚本名: \$0"# 打印所有参数作为一个单词
    echo "所有参数作为一个单词(\$*): $*"# 打印每个参数作为一个独立的字符串
    echo "每个参数作为一个独立字符串(\$@): $@"# 打印参数个数
    echo "参数个数(\$#): $#"# 打印当前进程ID
    echo "当前进程ID(\$$): $$"# 打印上一个后台进程的进程ID
    echo "上一个后台进程的进程ID(\$!): $!"# 打印上一个命令的退出状态
    echo "上一个命令的退出状态(\$?): $?"

1.7. Shell 变量的赋值

Shell 变量赋值方式有五种:

  • 直接赋值
  • 从键盘读入赋值
  • 使用命令行参数赋值
  • 利用命令的输出结果赋值
  • 从文件中读入数据赋值

直接赋值也就是定义变量

从键盘读入赋值是指将 bash 的内置命令 read 读入的内容赋值给变量

在命令行 Shell 下输入的参数内容称为使用命令行参数赋值

利用命令的输出结果赋值是指将命令行的执行结果赋值给变量

从文件中读数据赋值就是把文件内容赋值给变量

1.7.1 直接赋值

在 Shell 中,当第一次使用某变量名时,实际上就已经给变量赋值了。

直接赋值的格式为 变量名=变量值,如,name=tinyun。为了避免歧义,直接赋值时禁止在等号两边添加空格,这跟常见的编程语言有所不同。

直接赋值举例如下:

a=3

上面语句中的 = 不是数学中的等号,而是赋值运算符,它的作用是将复制运算符右侧的值赋给左侧,其中,右侧的 3 就是变量的值,左侧的 a 就是变量名,a 被赋值后,a 就代表了 3.

1.7.2 从键盘读入赋值

在 Shell 脚本中, Shell 变量可以通过从键盘读入输入的内容来赋值。

命令格式为:

read -p [提示信息][变量名]

示例脚本如下:

#!/bin/bash# 使用 -p 参数提示用户输入姓名并存储到变量中
read -p "请输入您的姓名:" name# 使用 -p 参数提示用户输入年龄并存储到变量中
read -p "请输入您的年龄:" age# 输出用户输入的姓名和年龄
echo "您输入的姓名是:$name"
echo "您输入的年龄是:$age"

1.7.3 使用命令行参数赋值

使用命令行参数赋值是直接在命令后面跟参数,系统用 $1 来调用第一个参数,用 $2 调用第二个参数,这种赋值方法适用于参数经常变化且不需要交互的情况。

示例脚本如下:

#!/bin/bash# 输出第一个和第二个命令行参数
echo "第一个参数是:\$1"
echo "第二个参数是:\$2"

1.7.4 利用命令的输出结果赋值

在 Shell 程序中,可以将一个命令的输出结果当作变量的值,不过需要在赋值语句中使用反向单引号。

这种赋值方法可以直接处理上一个命令产生的数据。在生产环境中,把命令的结果作为变量的内容进行赋值的方法,在脚本开发时很常见。

示例脚本如下:

#!/bin/bash# 使用反引号将命令的输出结果赋值给变量
output=`ls -l`
echo "使用反引号赋值的结果:"
echo "$output"# 使用 $() 将命令的输出结果赋值给变量
output2=$(pwd)
echo "使用 `$变量名` 赋值的结果:"
echo "$output2"

1.7.5 从文件中读入

import pandas as pd# 读取 Excel 文件
df = pd.read_excel('example.xlsx', sheet_name='Sheet1')# 打开一个新的文本文件,准备写入数据
with open('output.txt', 'w') as file:# 遍历 DataFrame 的每一行,将每行的数据写入文件for index, row in df.iterrows():file.write(','.join(map(str, row.values)))file.write('\n')print("数据已成功写入 output.txt 文件")

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

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

相关文章

Vue51-插件

一、插件的定义 vue里面的插件,类似于游戏的外挂。 vue中插件的本质:一个对象,里面必须包含install方法。 二、插件的使用 2-1、创建一个插件js文件(写在src中plugins.js) 2-2、应用插件:Vue.use(插件) …

外键的基本概念

外键的基本概念 外键(FOREIGN KEY):外键是一个或多个列,其值必须在另一个表中对应列的值中存在。外键用于维护两个表之间的关系,并确保引用的完整性。 外键在示例表结构中的应用 假设外键约束如下: FOR…

vue框架学习-----vue简介vue.js安装第一个vue程序部分vue指令

什么是vue? Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面&#xf…

微信小程序获取用户信息流程

微信小程序获取用户信息的流程可以分为以下几个步骤,下面将结合参考文章中的信息进行详细解释: 配置权限: 在小程序的app.json文件中配置scope.userInfo,以确保小程序可以请求用户信息授权。创建触发授权的交互元素: …

大学生计算机基础题(一)

嗨,大家好,我是异星球的小怪同志 一个想法有点乱七八糟的小怪 如果觉得对你有帮助,请支持一波。 希望未来可以一起学习交流。 一、单选题(20小题,共30分) 1、下列关于列表的说法中,错误的是…

机器真的能思考、学习和智能地行动吗?

In this post, were going to define what machine learning is and how computers think and learn. Were also going to look at some history relevant to the development of the intelligent machine. 在这篇文章中,我们将定义机器学习是什么,以及…

【Java03】Java中数组在内存中的机制

1. 内存中的数组 Java中的数组是一种引用类型,数组变量(引用)和数组元素在内存中是分开的。 Java中的数组变量其实就是指针。 如果想要访问数组元素,只能通过这个数组的引用变量(指针)来访问。 实际数组对…

杀戮尖塔游戏

Java 你正在玩策略卡牌杀戮尖塔游戏,轮到你出牌,手里N张攻击卡,每张都需要花金币coust[i]和获得伤害dmager[i]。 最多花3金币能造成的最大伤害是多少? class Solution{public int calc(int[] cost, int[] dmager, N){int[][] db …

【stm32-新建工程】

stm32-新建工程 ■ 下载相关STM32Cube官方固件包(F1,F4,F7,H7)■ 1. ST官方搜索STM32Cube■ 2. 搜索 STM32Cube■ 3. 点击获取软件■ 4. 选择对应的版本下载■ 5. 输入账号信息■ 6. 出现下载弹框,等待下载…

刚入职,写接口用了PUT和DELETE方法,结果被同事喷了,感觉自己被针对了

事情是这样,某社交平台上有个兄弟发帖,说自己刚入职国企,写了个借口,用了PUT和DELETE方法,前段说不能用这两个,这位仁兄感觉很委屈,特地发帖吐槽。 其实站在安全的角度来说,真没冤枉…

MySQL 示例数据库大全

前言: 我们练习 SQL 时,总会自己创造一些测试数据或者网上找些案例来学习,其实 MySQL 官方提供了好几个示例数据库,在 MySQL 的学习、开发和实践中具有非常重要的作用,能够帮助初学者更好地理解和应用 MySQL 的各种功…

简单看看langchain中的一点qwen源码

文章目录 前言导入Tongyi类配置Tongyi类读取api-keyos配置env配置streamlit配置 PromptTemplateLLMChain更换掉LLMChain(可选)StuffDocumentsChain ConversationBufferMemory 前言 本文主要是继续深挖Tongyi类,并进一步探究详细的流程。个人…

云计算【第一阶段(14)】Linux的目录和结构

一、Liunx目录结构 1.1、linux目录结构 linux目录结构是树形目录结构 根目录(树根) 所有分区,目录,文件等的位置起点整个树形目录结构中,使用独立的一个"/",表示 1.2、常见的子目录 必须知道 目录路径目…

【探索Linux】P.34(HTTPS协议)

阅读导航 引言一、HTTPS是什么1. 什么是"加密"2. 为什么要加密3. 常见的加密方式(1)对称加密(2)非对称加密 二、证书认证1. CA认证 三、HTTPS的加密底层原理✅非对称加密对称加密证书认证 温馨提示 引言 在上一篇文章中…

阿里云服务器-Linux搭建fastDFS文件服务器

阿里云官网购买服务器,一般会有降价活动,这两天就发现有活动,99计划活动(在活动期内,续费都是99元) 阿里云官网-云服务器ECS 在这里,我购买了这台服务器,活动期内续费每年99元&…

[FFmpeg学习]windows环境sdl播放音频试验

参考资料: FFmpeg和SDL2播放mp4_sdl 播放mp4 声音-CSDN博客 SimplePlayer/SimplePlayer.c at master David1840/SimplePlayer GitHub 在前面的学习中,通过获得的AVFrame进行了播放画面, [FFmpeg学习]初级的SDL播放mp4测试-CSDN博客 播放…

仲恺ZK——信计专业《软件体系结构》24年试卷回忆

以下是我在总结的复习内容,有需要可以参考借鉴一下。我的主页还有另外一篇复习总结《仲恺ZK——信计专业《软件体系结构》,两者结合起来复习,帮助你轻松过考试😊。总的来说,考试不会太难,只要你了解了各类设…

【Python】深入了解 DeepForest:基于深度学习的森林检测工具

我们都找到天使了 说好了 心事不能偷藏着 什么都 一起做 幸福得 没话说 把坏脾气变成了好沟通 我们都找到天使了 约好了 负责对方的快乐 阳光下 的山坡 你素描 的以后 怎么抄袭我脑袋 想的 🎵 薛凯琪《找到天使了》 在计算机视觉领域中&#x…

Dockerfile 自定义镜像

大家好 , 今天我要和大家分享一个现代软件开发中不可或缺的工具 - Docker . 在这个快速发展的技术时代 , 我们经常面临着应用部署的复杂性、环境差异以及不同操作系统之间的兼容性问题 . 这些问题不仅消耗大量时间 , 还可能导致项目延期和成本增加 . Docker 的出现解决了我们在…

鸿蒙开发电话服务:【@ohos.telephony.sim (SIM卡管理)】

SIM卡管理 说明: 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import sim from ohos.telephony.sim;sim.isSimActive7 isSimActive(slotId: number, callback: AsyncCallback): void 获…