查看shell程序类型

如何知道自己电脑的 Shell类型是什么? 对于更高版本的macOS(从Catalina开始),默认的shell是Zsh。不同的shell类型有不同的配置文件。 阅读详情

1、查看某个用户对应的shell程序类型

cat /etc/passwd

nologin代表用户不能通过ssh登录

ps:Bourne Again SHell, 简称 “bash”

 

2、查看bash版本

bash --version

3、Shell脚本编写

3.1 shell脚本第一行

#!/bin/bash

或

#!/bin/sh

#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell

 

3.2 修改脚本权限

chmod -x 脚本名称

 

3.3 执行脚本

./脚本名称 或者 sh 脚本名称 (./代表当前目录)

sh 后面加脚本名称就是执行脚本。不加就是切换到bash里,默认的shll是bash

sh是链接到bash上的,所以sh与bash在功能上是没有区别的。

3.4 编写注意事项

1、变量名和等号之间不能有空格

name=jack

2、使用一个定义过的变量,只要在变量名前面加美元符号即可,两种格式

echo $name
echo ${name}

3、设置为只读变量 

#!/bin/bash
name=jack
#输出变量
echo $name
#设置变量为只读
readonly name
#修改只读变量,执行会报错
name=jackwang
#删除变量
#unset variable_name
:<<EOF
多行注释
多行注释
EOF 

4、参数传递

$n  n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数

$$ 脚本运行的当前进程ID号

5、运算符

expr 是一款表达式计算工具,使用它能完成表达式的求值操作 (使用反引号 `) 

如何检查 Linux 系统所使用的 Shell 类型 本文将介绍如何查看当前 Linux 系统所使用的 Shell 类型的方法,并提供相应的源代码示例。该文件包含了关于用户账户的信息,其中也包括了每个用户所使用的默认 Shell 类型。以上是几种常见的方法,可以用来确定 Linux 系统所使用的 Shell 类型。运行该命令后,会在终端窗口中显示当前正在运行的 Shell 类型。运行该命令后,会在终端窗口中显示当前系统所使用的 Shell 类型。运行以上命令后,将会显示当前用户所使用的默认 Shell 类型。,则表示系统当前使用的是 Bash Shell。 阅读详情

相关推荐

避坑指南:在Ubuntu 22.04上配置UR5e与ROS2 Humble真机通信的完整流程

本文详细介绍了在Ubuntu 22.04上配置UR5e机械臂与ROS2 Humble真机通信的完整流程,包括环境准备、网络配置、URCap安装、ROS2驱动部署及控制器状态验证等关键步骤。特别针对常见问题如网络连接失败、驱动启动错误等提供了实用解决方案,帮助工程师高效完成UR5e与ROS2的集成工作。

weixin_30790841的博客 463

如何查看当前使用的Shell类型

1. 在终端输入命令 echo $SHELL echo $SHELL 2. 在终端输入命令 echo $0(数字0,这个命令不是所有Shell都支持) echo $0  3. 在终端输入命令ps,查看当前运行的shell是什么。如图1所示,有一个进程是bash,说明shell类型是bash。 ps 图1. 运行上述三条命令 4. 输入一条不存在的命令,报错信息的开头就能看出来...

梅子微酸 - - 优快云博客 2万+

高通410随身WiFi刷OpenWRT与Debian双系统一键集成方案

本文详细介绍高通410随身WiFi设备刷入OpenWRT与Debian双系统的一键集成方案。通过虎王工作室提供的一键刷机包,用户可轻松实现双系统部署,兼顾OpenWRT的网络功能与Debian的完整应用服务,适用于网络加速、服务器部署等多种场景,并提供了硬件资源分配与系统切换的实用指南。

docker7nomad的博客 1135

查看当前shell类型一系列命令

查看当前发行版可以使用的shell 复制代码 代码如下: [root@localhost ~]$ cat /etc/shells /bin/sh /bin/bash /sbin/nologin 查看当前使用的shell方法 一、最常用的查看shell的命令,但不能实时反映当前shell 复制代码 代码如下: [root@localh

shuiyuetian02的专栏 1065

stm32控制舵机_使用URT-1控制飞特舵机上手教程(SM40BL舵机为例)

使用URT-1控制飞特舵机上手教程(SM40BL舵机为例):1,参阅URT-1使用说明.pdf2, 材料清单:① URT-1驱动板② 连接驱动板与电脑的MINI USB 连接线③ 给舵机供电的电源④ 舵机与舵机连接线⑤ 杜邦线(可选)3,将URT-1驱动板与电脑连接4,安装驱动,参阅文件CH340驱动,检查设备管理器串口号。5,舵机连接URT-1驱动板,驱动板接电源,参考下图:6,打开FD软件进行...

weixin_39564510的博客 3431

一文讲透 .claude/ 文件夹:Claude Code 团队配置指南和最佳实践

本文系统梳理了ClaudeCode配置框架,旨在解决实际落地中的常见困惑。文章从五层作用域体系(组织策略、命令行参数、本地覆盖、项目级、用户级)切入,详细解析了CLAUDE.md、rules、skills、agents等核心组件的定位与配合关系。重点强调了"确定性规则"与"概率性建议"的分层设计:权限控制和安全边界应通过settings.json和hooks实现,而工作约定和编码规范适合放在CLAUDE.md。文中提供了可直接套用的最小配置方案,并总结了10大常见踩坑

974

如何快速查看Linux系统上的Shell类型

要快速查看Linux系统上的Shell类型,可以参考本经验以下内容。 一、查看当前系统中所有可登录shell的类型 1 要查看当前系统中所有可登录shell的类型,在/etc/shells配置文件中记录了用户可以登录的shell的具体路径,因此查看这个文件的内容,即可知道当前系统中所支持的所有shell类型。 二、查看某个用户的Shell类型 1 要查看某个用户的Shell类型,可以在/etc/passwd文件的最后字段查看到某个特定用户的登录Shell类型。以roo.

glenshappy的专栏 4215

YOLOv5改进——添加SimAM注意力机制

这样可以使注意力机制看到整个backbone部分的特征图,将具有全局视野,类似于一个小的transformer结构。注意:很多改进教程都是将代码直接复制到common.py文件,如果改进机制多了容易造成混乱。在models文件夹下新建modules文件夹,在modules文件夹下新建一个py文件。这里为simam.py。在models文件夹下,复制yolov5s.yaml文件,粘贴并重命名为yolov5s-simam.yaml。运行yolo.py,出现刚刚加入的SimAM注意力机制,说明加入成功。

2302_80099075的博客 1653

以 root 账户登录 Linux 系统,查看提示符确定自己使用的 Shell 程序类型。使用 who 查看当前登录的用户列表、用户总数、系统启动时间等信息。

操作系统 (1)以 root 账户登录 Linux 系统,查看提示符确定自己使用的 Shell 程序类型。使用 who 查看当前登录的用户列表、用户总数、系统启动时间等信息。 (2)打开另外一个终端,更改 shell 程序类型为 csh,观察登录的用户列表信息的变化 情况。使用 exit 命令后,观察登录的用户列表信息变化情况。 (3)使用 man 命令查看 ls 的使用手册 (4)使用 groupadd 创建一个名为 group2021 新用户组,观察/etc/group 文件的改变情况 (5)使用 us

qq_50858629的博客 2716

开发板的使用

一、开发板使用学习大纲。 1、开发板组成、核心板资源,底板资源。 2、开发板连接、调试工具、串口参数配置。 3、开发板启动过程。 4、文件传输 1)使用串口传输。 上传/下载 2)使用网口传输。 上传/下载 5、临时/永久配置开发板IP地址。 6、开发板启动脚本。 二、开发板的组成。 核心板: CPU处理器: 芯片:S5P6818(三星) 内核: ARM cortex-A53 -> 八核处理器 运行内存:512MB*2=1G nandflash:4G 底板: 电源线:5V 串口...

qq_45633736的博客 2658

Linkage Mapper 工具参数详解——Building Network and Map Linkages

此文档用于解析使用LinkageMapper各输入输出参数详情以及可能的影响,并介绍了如何解释模型输出结果和输出参数,适合刚入手的人。篇幅很长很啰嗦,是因为每个参数都解释的万分细致。

sumuses的博客 6111

【Linux】一个小故事让你秒懂shell外壳程序

超有趣的小故事,让你秒懂shell外壳程序

这是一个非常有意思的博主 5082

YOLO26 从零到工业落地全实战:自定义训练+多场景测试+边缘部署预备,踩坑实测100%可复现

很多人觉得训练是核心,其实不是——数据集的质量,直接决定了你模型的上限。我见过太多人,标注不规范、格式错误、数据集划分混乱,然后疯狂调参,训了几百轮还是不收敛,纯属白费功夫。我这次用的是工业零件缺陷检测自定义数据集,共3个类别:划痕、毛刺、变形,总计1200张图片,给大家讲一套标准的、可复现的数据集制作流程,不管你是做工业检测、安防、交通,都能直接套用。很多人拿到数据集,直接用默认命令训练,然后抱怨精度上不去。默认参数是给COCO数据集用的,你的自定义数据集,必须针对性调参,不然根本达不到最优效果。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 569

【Linux】全面讲解 Shell 变量的那些事

多方位讲解 Linux Shell 变量,包括其数据类型、作用类型、相关命令和常见操作

运维、实施交付领域知识交流 3233

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

shell

Shell 是一个程序,一般都是放在/bin或者/usr/bin目录下,当前 Linux 系统可用的 Shell 都记录在/etc/shells文件中。/etc/shells是一个纯文本文件,你可以在图形界面下打开它,也可以使用 cat 命令查看它。 通过 cat 命令来查看当前 Linux 系统的可用 Shell: $ cat /etc/shells /bin/sh /...

baicheng1855的博客 168

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

shell学习1:shell的简单介绍

在linux/unix操作系统中存在多种多类型的shell,而多数linux/unix系统默认使用shell为bash。所谓shell,是一种解释器,也是一种脚本语言,在每个shell脚本中都包含一个或者多个命令。 在计算机科学中,shell是指为使用者提供使用界面的软件(命令解释器)。它接收来自用户的命令,然后调用相应的应用程序处理用户键入的命令。同时shell也...

天泉证道 854

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Bash编程012——理解shell

Bash编程012——理解shell Bash是shell的一种,shell是一个复杂的交互式程序。搞清楚shell进程以及它与系统之间的关系有助于我们更好地理解shell。 12.1 shell的类型 系统启动什么样的shell程序取决于你的个人配置。这一配置记录在/etc/passwd文件中。使用如下命令可以查看。 这里稍微解释一下这一命令:cat命令...

若梦的博客 189

shell脚本编程

语句来说,将它们保存在一个文件中来执行。脚本文件是普通的文本文件,可使用任何的。文件时自动生成关于脚本文件说明的注释。)作为程序文件执行(常用)对于一组需要经常重复执行的。文本编辑器查看或修改。

nianwan2157的博客 528

Linux shell

本文介绍了Linux shell的基础知识和常用操作。主要内容包括:shell提示符区别(普通用户"$",root用户"#");常用快捷键(Ctrl+w删除单词、Ctrl+u清空行等);shell的多种类型(bash、csh等)及查看方法;shell脚本编写步骤;系统环境变量文件(/etc/profile等);变量定义与引用规则;7种shell扩展方式(大括号扩展、命令替换等);以及bash选项的设置方法。文章还说明了用户登录时shell调用的脚本顺序和变量管理方法。

2501_92714560的博客 855

Linux Shell

Linux Shell

qq_52246120的博客 196

shell编程

在初步学习linux后我们知道linux有很多命令,如果我们想一次调用很多命令该怎么做呢? 在这种情况下我们便用到了shell编程 shell就是一个命令行解释器,它为用户提供了一个向linux内核发送请求以便运行程序的界面操作 用户可以用shell来启动、挂起、停止,甚至编写一些程序 在此初步介绍一些shell知识 一、相关命令: 1.#echo $SHELL 可以

cuigeng_123的博客 385

理解Shell

实践对比:history显示当前会话所有命令(含未写入文件的),cat ~/.bash_history仅显示上次 Shell 退出前的命令。history -a:将当前内存中的历史命令强制写入.bash_history文件(默认退出 Shell 时自动写入)。外部命令 独立程序文件,位于/bin、/usr/bin等目录 较慢(需创建子进程,即衍生) ps、/bin/echo。子 Shell:在父 Shell 中通过bash等命令创建的新 Shell 进程,是父 Shell 的子进程。(重复上一条命令)、!

2501_92634322的博客 535

如何查看yarn container日志 查看yarn任务所有container信息 yarn gc日志的查看和简单分析

如何使用命令行查看yarn日志和container信息及其日志,并进行简单的gc分析

sinat_25207217的博客 8003

mongoDB怎么看字段类型

go相关学习资料:https://edu.51cto.com/video/4196.htmlMongoDB字段类型查看方法 MongoDB 是一种流行的 NoSQL 数据库,它使用 BSON(一种类似于 JSON 的格式)来存储数据。在 MongoDB 中,每个文档可以包含各种类型的字段,如字符串、数字、日期等。了解字段...

weixin_36865235的博客 944

【Shell】了解shell

文章目录1. Linux和shell的关系2. 常见的shell环境以及查看shell环境命令2.1 常见shell环境2.2 查看shell环境的相关命令2.3 第一个shell程序3. 三种运行shell3.1 作为可执行程序3.2 作为解释器参数3.3 直接运行 1. Linux和shell的关系 Linux为一种操作系统,操作系统一般包括内核和用户接口,shell就是Linux的用户接口,是一个让用户通过命令行来实现和系统交互的接口 2. 常见的shell环境以及查看shell环境命令 2.1 常

weixin_44441131的博客 199

Shell - 01_shell的概述

b.作为程序设计语言:它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支 完成类似于 windows 下批处理操作,简化我们对系统的管理与应用程序的部署。a.作为应用程序: 交互式地解释、执行用户输入的命令,将用户的操作翻译成机器可以识别的语言,完成相应功能。指定的shell,如果没有则使用默认的shell。用.去执行脚本不会启动新的 shell,直接由当前的 shell 去解析执行脚本。2.用户编写,需要手动调用的:无论是系统调用的还是需要我们自己调用的,其语法规则都一样。

weixin_50920631的博客 1176
上一篇: JAVA双版本,环境变量切换问题(Windows和Linux操作系统)
下一篇: 查看tomcat版本信息
SwTesting
博客等级 码龄18年 119粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SwTesting

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值