Linux学习[15]bash学习深入1---bash的功能---变量详解

文章目录

  • 前言:
  • 1. bash功能
  • 2. 变量
    • 2.1 变量赋值
    • 2.2 unset取消变量
    • 2.3 环境变量
  • 总结

前言:

之前在学树莓派相关内容的时候,对bash脚本的简单上手做了一个总结,并且归纳到下面三个博客。
当时参考的书为《从树莓派开始玩转linux》,后面这个linux学习系列相关是基于《鸟哥的linux私房菜基础学习篇》。后者比前者更加详细,因此接下来几篇博客算是对之前的3,4,5三篇的补充。


Linux学习[3]—shell脚本之bash脚本—变量赋值引用&数学运算&简易脚本编写
Linux学习[4]—shell脚本之bash脚本—简单函数与调用
Linux学习[5]—shell脚本之bash脚本—判断&选择&循环


1. bash功能

我们在linux控制台中,按↑ ↓ 的时候,就可以在之前输入过的指令中进行切换,这是由于bash具有命令编修能力,即history功能。

我们如果要进入/home/abcdefghijklmn/这个目录,我们我们其实只需要输入/home/abcd+[tab],那么后面的目录名称就会自动补全。如果目录有多个abcd开头的,你可能需要按几次tab键,把所有可以补全的备选项列出来,然后再输入几个字符,按tab补全。
这个补全的功能其实也是bash强大功能的一种。

我们通过ls -al列出当前目录下的所有文件的详细信息,包含隐藏文件。这个命令的本体是ls,后面跟了两个选项-a,-l。我们完全可以把这一个整体命名为lm,例如:alias lm='ls -al'。这样设置以后,后面的输入lm之后,就相当于输入了ls -al。这个指令比较短,可能看不出来有什么好的,但是如果涉及到一些长长的指令,并且后期还需要经常用到话,取个别名效果还是非常显著的。

我们运行某一个程序的时候,如果中途想停止,使用ctrl+c即可停止。这是bash控制功能的体现。

我之前写的简单的bash脚本,其实就是shell scripts的一种,也是bash的程序化脚本功能。

后面bash涉及到一些管线命令,那么万用字符就能起到非常大的作用。其实我们平常接触到的很多代码都有万用字符的体现,比如*表示任意0~无穷个字符。

bash的一些小技巧:

1.比如我们用cd指令进入到一个非常非常多层的目录中去,往往一行写起来比较密整体也比较乱。那我们可以通过\+[enter]的方式,进行换行输入。
下面的效果就等效于cd xxxxxxxxxx/yyyy-xilinx-5.24/gcc-linux-ar,当然可以多分几行,这样显得更加规整一些。
在这里插入图片描述2.另外,当你所需要下达的指令特别长,或者是你输入了一串错误的指令时,你想要快速的将这串指令整个删除掉,一般来说,我们都是按下删除键的。

组合键功能
[ctrl]+u/[ctrl]+k分别是从光标处向前删除指令串 ([ctrl]+u) 及向后删除指令串 ([ctrl]+k)
[ctrl]+a/[ctrl]+e分别是让光标移动到整个指令串的最前面 ([ctrl]+a) 或最后面 ([ctrl]+e)

2. 变量

2.1 变量赋值

用echo来输出变量,变量前加一个$来取得变量的值。
例如我们常用的指令:echo $PATH
在这里插入图片描述

但是这个指令的$符号后面跟的是一个变量名称,变量名称后面不可以直接接字符,如果输出PATH变量的值再加上IS
echo $PATHIS是不对的,这表示输出PATHIS变量的值。
所以针对于这种情况我们一般输出变量都需要加上{}
比如下面的echo ${PATH}IS
在这里插入图片描述


变量的赋值一般是用等号赋值,赋值的时候有很多应用场景,这里列个表,方便查看。

实例备注/说明
myname=edwinwzy给变量myname赋值edwinwzy
错误示例:myname = edwinwzy等号两边不能直接接空白字符
错误示例:1myname=edwinwzy变量名称只能是英文字母与数字,但是开头字符不能是数字
myname=edwinwzy\$这里给myname赋值edwinwzy$,但是$为特殊字符,所以需要用\来进行转换,将其转为一般字符
myname=$(uname -r)我们也可以把一个指令的输出内容作为变量的值,用$来取值
PATH=${PATH}:/home/bin我们在linux中对环境变量进行添加的时候,可以采用这样的赋值方式进行累加,即在原有的PATH加上后面的内容。
export myname变量赋值之后我们可以通过export使得变量变成环境变量,这样别的bahs脚本就可以使用这个变量

2.2 unset取消变量

对于一些变量如果设置错了,不想用了,可以使用unset来取消。
一般用法就是unset 变量名
例如:unset myname


2.3 环境变量

环境变量我个人的理解就是在你在终端输入一个命令,系统能够知道你这个指令对应的是用的什么功能。
比如自己手动装一个交叉编译链的工具,那么GCC和GDB其实都要手动添加到环境变量PATH (可执行文件的搜索路径)中去的,这样你在控制台输入gcc -v的时候,系统才会知道你想查看gcc的版本。

查看环境变量用到的指令是env
例如我们可以在虚拟机里面输入env来查看当前的shell环境的所有变量与其内容。
下面是输入env之后的内容截取部分,可以看到PATH也是环境变量的一种。
在这里插入图片描述

在这里插入图片描述
其中部分字段解释如下:

字段名含义
HOME使用者的主文件夹
SHELL当前的环境使用的SHELL是哪一个程序,即是/bin/bash脚本还是其他脚本程序
HISTSIZE与历史有关的指令,系统保存我们曾经输入过的值的数量就是由这个决定
PATH可执行文件的搜索路径,目录与目录之间用:分隔
LANG语系。我这里的ubuntu默认是en_US.UTF-8,不同语系对应的编码方式是不一样的。比如A编码是AaBbCc…Zz;B编码是ABCD…Zabcd…z,编码的不同就会在程序代码写法上有区别。

{变量范围}

我们自定义的变量就成为自定变量。
用C语言里面的变量类比一下,环境变量和自订变量的区别大概就是全局变量和局部变量的区别。

自定变量通过export就可以变成环境变量,就能够被子程序引用。


总结

这篇博客节选了书中关于bash变量的部分内容并结合自己的学习体验进行了记录,有些不常用的用法我这里没做一定的记录。

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

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

相关文章

LwIP RAW API 实现UDP多播收发

LwIP RAW API 实现UDP多播收发实现 1、初始化 static struct udp_pcb *multicast_pcb NULL; static ip_addr_t mutlcast_send_ip; static ip_addr_t mutlcast_recv_ip;static void udp_recv_multicast(void *arg, struct udp_pcb *pcb, struct pbuf *p,const ip_addr_t *add…

结构化GPT用例,在CSDN私密社区中死磕@ada 探索SpringBoot

在CSDN私密社区中死磕ada 探索SpringBoot Q: Spring的核心概念是哪些?Q: Spring MVC的核心概念是哪些?Q: SpringBoot的核心概念有哪些?Q: 介绍下SpringBoot AutoConfiguration的机制。Q: SpringBootConfiguration 和 Configuration 的区别是&…

C# 学习(一)概述

今天开始学习 C#,所有学习资料来源于: 菜鸟教程 一、C# 简介 C# 是 .NET 框架的一部分,随之创造出来的语言,所以了解 C# 前,需要知道 .NET 是个什么东西。 1.1 .NET 框架介绍 .NET 是微软提出的 Web 的一种软件开发…

【每日一题】LCP 41. 黑白翻转棋

【每日一题】LCP 41. 黑白翻转棋 LCP 41. 黑白翻转棋题目描述解题思路 LCP 41. 黑白翻转棋 题目描述 在 n*m 大小的棋盘中,有黑白两种棋子,黑棋记作字母 “X”, 白棋记作字母 “O”,空余位置记作 “.”。当落下的棋子与其他相同颜色的棋子在…

JavaScript ES10新特性

文章目录 导文Array.prototype.flat()和Array.prototype.flatMap()Object.fromEntries()String.prototype.trimStart()和String.prototype.trimEnd()格式化数字动态导入可选的catch绑定BigIntglobalThis 导文 JavaScript ES10,也被称为ES2019,引入了一些…

【07】STM32·HAL库开发-新建寄存器版本MDK工程 |下载STM32Cube固件包 | 新建MDK工程步骤

目录 1.新建工程前的准备工作(了解)1.1下载相关STM32Cube 官方固件包(F1/F4/F7/H7) 2.新建寄存器版本MDK工程步骤(熟悉)2.1新建工程文件夹2.1.1Drivers文件夹2.1.2Middlewares文件夹2.1.3Output文件夹2.1.4Projects文件…

SpringMvc学习——在idea中新建springWeb项目 浏览器请求 和 服务器响应 SpringMvc文件相关

目录 引出基础知识:三层架构和MVC1. 三层架构2.MVC模型 springWeb项目IDEA搭建1.新建一个普通的maven项目2.导入包,pom.xml文件3.写主启动类Main.java文件SpringBootApplication4.写application.yml文件spring的配置文件5.启动,运行main.java…

Spark大数据处理学习笔记(3.8.3) Spark RDD典型案例-利用RDD实现分组排行榜

该文章主要为完成实训任务,详细实现过程及结果见【http://t.csdn.cn/Twpwe】 文章目录 一、任务目标二、准备工作2.1 在本地创建成绩文件2.2 将成绩文件上传到HDFS上指定目录 三、完成任务3.1 在Spark Shell里完成任务3.1.1 读取成绩文件得到RDD3.1.2 利用映射算子生…

Spring Cloud Alibaba Seata(一)

目录 一、Seata 1、分布式事务简介 1.1、分布式事务理论 1.2、分布式事务解决方案 2、Seata简介 3、Seata安装 一、Seata 1、分布式事务简介 基础概念:事务ACID A(Atomic):原子性,构成事务的所有操作&#xf…

27-2BP_Adaboost强分类器公司财务预管建模——强分类器和弱分类器(附matlab程序)

1.简述 Adaboost算法的思想是合并多个“弱”分类器的输出以产生有效分类。其主要步骤为:首先给出弱学习算法和样本空间(x,y),从样本空间中找出m组训练数据,每组训练数据的权重都是1/m。然后用弱学习算法迭代运算T次&am…

爬虫小白应该如何学习爬虫

什么是Python3网络爬虫? 定义: 网络爬虫(Web Spider),又被称为网页蜘蛛,是一种按照一定的规则,自动地抓取网站信息的程序或者脚本。爬虫其实是通过编写程序,模拟浏览器上网&#x…

Flutter 库:强大的工具及扩展——nb_utils

Flutter 库:强大的工具及扩展——nb_utils 文章目录 Flutter 库:强大的工具及扩展——nb_utils一、概述1、简介2、功能3、官方资料 二、基本使用1、安装2、基本使用第一步:在 main.dart 中初始化第二步:在您的 MaterialApp 或 Cup…

SpringBoot中@ControllerAdvice的三种使用场景

一、全局异常处理 代码示例如下: /*** author qinxun* date 2023-06-14* Descripion: 业务层异常枚举*/ public enum ServiceExceptionEnum {SUCCESS(0, "成功"),ERROR(1, "失败"),SYS_ERROR(1000, "服务端发生异常"),MISSING_REQUEST_PARAM_E…

微信小程序自定义模块

自定义wxs并引入 新建一个tools.wxs 创建一些function,并使用moule.exports {}导出 使用 <wxs>标签 并填写正确src 书写module名称 之后在其他标签内&#xff0c;使用 {{自定的module名称.自定义的一个function并传入对应参数}}就可以实现参数在自定义function中的导入…

用docker搭建selenium grid分布式环境实践

目录 前言&#xff1a; selenium jar包直接启动节点 用docker命令直接启动 docker-compose 启动 Hub和node在一台机器上 Hub和node不在一台机器上 遗留问题 总结 前言&#xff1a; Selenium是一个流行的自动化测试工具&#xff0c;支持多种编程语言和多种浏览器。Sele…

SpringCloudAlibaba之Sentinel源码分析--protoc-3.17.3-win64

Sentinel源码分析 文章目录 Sentinel源码分析1.Sentinel的基本概念1.1.ProcessorSlotChain1.2.Node1.3.Entry1.3.1.自定义资源1.3.2.基于注解标记资源 1.4.Context1.4.1.什么是Context1.4.2.Context的初始化1.4.2.1.自动装配1.4.2.2.AbstractSentinelInterceptor1.4.2.3.Contex…

【linux kernel】linux media子系统分析之media控制器设备

文章目录 一、抽象媒体设备模型二、抽象媒体设备三、Entity四、Interfaces五、Pad六、Link七、Media图遍历八、使用计数和电源处理九、link设置十、Pipeline和Media流十一、链接验证十二、媒体控制器设备的分配器API 本文基于linux内核 4.19.4&#xff0c;抽象媒体设备模型框架…

chatgpt赋能python:Python如何查找特定名称文件

Python如何查找特定名称文件 在计算机文件管理和互联网网络应用程序中&#xff0c;查找特定文件往往是一项必要的任务。在使用Python编程时&#xff0c;我们可以使用Python内置的os模块来查找特定名称的文件。本文将介绍如何使用Python查找特定名称的文件&#xff0c;并提供实…

013:解决vue中不能加载.geojson的问题

第013个 查看专栏目录: VUE — element UI 本文章目录 问题状态造成这个结果的原因&#xff1a;解决办法Vue Loader 其他特性&#xff1a;专栏目标 问题状态 在做vue项目的时候&#xff0c;碰到这样一个问题&#xff0c;vue页面中引用一个.geojson文件&#xff0c;提示如下错误…

【C++篇】字符串:标准库string类

友情链接&#xff1a;C/C系列系统学习目录 知识总结顺序参考C Primer Plus&#xff08;第六版&#xff09;和谭浩强老师的C程序设计&#xff08;第五版&#xff09;等&#xff0c;内容以书中为标准&#xff0c;同时参考其它各类书籍以及优质文章&#xff0c;以至减少知识点上的…