Linux 认识与学习Bash——2

1 read 从键盘读取变量的值

read 后面不带变量,那么默认会给REPLY变量赋值

#!/bin/bash
echo -n "请输入你的名字:"
read name
echo "欢迎您 $name"
echo "----------------"

echo -n "请输入你的名字2:"
read 
echo "欢迎您 $REPLY"

#!/bin/bash
#echo -n "请输入你的名字:"
#read name
read -p  "请输入你的名字:" name  #上面注释两行等于这一行
echo "欢迎您 $name"

内置变量

 

2 定义一个数组和取值

  arr=(aa bb cc dd)

  • echo ${arr[0]}       #查看数组中第1个元素
  • echo ${arr[@]} 或者 echo ${xx[*]}   #查看数组中的所有元素
  • echo ${!arr[@]}    #查看数组中所有的下标
  • echo ${#arr[@]}   #查看数组中元素的个数

declare -x liu=888  #定义的变量liu

export        #查看定义的变量

declare +x liu=888   #取消变量

declare -r liu=888  #定义一个只读的变量liu

readonly hello   #定义一个只读的变量hello  

echo "$x" #双引号会输出变量x的值

echo '$x'  #在使用单引号输出$x时,变量将不起效果,当作字符串输出

在Bash中,一旦你使用declare -r命令将变量声明为只读,就不能使用常规的unset命令来取消或删除该变量

只读变量是设计为不可更改和不可删除的,这是为了防止它们的值在脚本执行期间被意外修改。

然而,有一种高级技术可以通过使用gdb(GNU调试器)来解除变量的只读属性,但这通常不推荐,因为它涉及到对shell进程的内存进行操作,这可能会导致不稳定或不可预测的行为。如果你决定使用这种方法,请确保你完全理解可能的后果,并且在一个安全的环境中进行,例如在一个不重要的临时shell会话中1。

如果你想避免使用只读变量,最好的做法是在声明变量之前仔细考虑,确保你以后不需要更改或删除它。如果你发现自己需要修改一个只读变量,你可能需要重新考虑你的脚本设计或重新启动一个新的shell会话。

ulimit -a

3 变量内容的删除与替换

r=${xx-"abcdefg"}
r=${xx:-"abcdefg"}
r=${xx:?"abcdefg"}
r=${xx:+"abcdefg"}

在Linux中,这四个命令是参数扩展的例子,它们用于处理变量和提供默认值或其他操作。下面是每个命令的具体含义:

  • r=${xx-"abcdefg"}:如果变量xx未设置或为空,r将被赋值为"abcdefg"。如果xx已设置并且非空,r将取xx的值。
  • r=${xx:-"abcdefg"}:这与第一个命令类似,但即使变量xx被设置为空(即声明了变量但没有值),r也将被赋值为"abcdefg"。
  • r=${xx:?"abcdefg"}:如果变量xx未设置或为空,将打印出"abcdefg"并退出当前命令或脚本。如果xx已设置并且非空,r将取xx的值。
  • r=${xx:+"abcdefg"}:如果变量xx已设置并且非空,r将被赋值为"abcdefg"。如果xx未设置或为空,r将不被设置。

4 别名设置alias,unalias

ifconfig eth0 #如果觉得命令太长了,可以为其取一个别名
#取别名
alias aa="ifconfig eth0"

通过alias 命令可以查看目前shell下存在哪些别名

unalias 取消别名

unalias aa

 echo -n "123456"  #这样输出后就不会换行了

alias echo='echo -n' #这样设置后,每次使用echo输出就不会换行了

type -a echo #可以查看目前echo命令生效的是哪个echo命令

命令的查找顺序:type -a echo

5 历史命令history

在Linux系统中,history命令用于列出用户在当前终端会话中输入过的命令历史。如果你想重新执行历史列表中的某个命令,可以使用感叹号!后跟该命令在历史列表中的编号。这是一种快速重复执行先前命令的方法。

例如,如果你输入!314,它将执行历史列表中编号为314的命令。

6 bash的登录与欢迎信息

Linux登录前的提示信息存储在/etc/issue文件中

在Linux系统中,登录前的提示信息存储在/etc/issue文件中。这个文件包含在登录提示之前显示的信息或系统标识。它可能包含各种由getty支持的@字符和\字符序列。

登录后显示的信息则存储在/etc/motd(Message of the Day)文件中

这个文件在用户登录后、启动他们的shell之前显示信息。默认情况下,这个文件可能为空,但可以编辑以显示自定义消息。

更简洁的描述是:

  • /etc/issue 文件定义了用户登录前在终端上看到的系统欢迎信息。
  • /etc/motd 文件定义了用户登录后在终端上看到的日常消息或系统通知。这些文件为系统管理员提供了一种向用户展示重要信息的方式。
  • /etc/issue.net 文件仅显示给从网络连接的用户。这些横幅可以包含任何文本,包括欢迎消息、版权信息和安全警告。

例如,可以在/etc/issue中添加安全警告

                  在/etc/motd中添加系统维护通知。

可以通过编辑/etc/issue.net文件来自定义登录前的消息。在文件中添加您想要的文本,然后保存并关闭文件。

可以使用以下转义代码来扩展文本:

\\d:插入当前日期。
\\t:插入当前时间。
\\n:插入机器的节点名称(也称为主机名)。
其他转义代码,如插入操作系统的版本、系统名称等。

7 Bash的环境配置文件

login-shell

 在Linux系统中,login-shell 是用户登录时启动的shell,它会读取一系列配置文件来设置用户环境。这些配置文件包括:

  • /etc/profile:这是一个全局配置文件,它为所有用户设置环境变量和系统级别的shell行为。这个文件通常是只读的,一般不推荐去修改它,它对所有用户都有影响。
  • /etc/inputrc:这个文件定义了Readline库使用的键盘映射,它影响命令行编辑行为和快捷键。
  • /etc/profile.d:这个目录包含一系列脚本,这些脚本在登录时被/etc/profile读取并执行,用于设置特定应用程序或shell环境的变量。


登录shell读取完上述文件后,会进入用户的家目录,并执行.bash_profile文件。

.bash_profile文件用于设置用户特定的环境变量和启动程序,这些设置只在登录时执行一次,以便在用户的整个会话中保持。

no-login shell

相比之下,no-login shell 是在用户已经登录后启动的shell,通常不需要再次输入用户名和密码。这种shell不会读取/etc/profile或.bash_profile,而是读取.bashrc文件。.bashrc文件包含了特定于交互式shell会话的配置,如别名和函数,这些配置每次打开新的shell时都会被加载4。

总结来说,login-shell在用户登录时启动并读取一系列配置文件来设置环境,而no-login shell在用户已登录后启动,通常只读取.bashrc文件来加载shell会话的配置。

终端机的环境设置stty,set

stty -a
ctrl+c  #取消命令
ctrl+? #删除命令


set -u 是Linux中的一个内置shell命令,用于设置或取消设置shell选项和位置参数的值。

它就像一个主控面板,允许您设置或取消设置shell环境的值。

让我们来看一个简单的例子:

name="Anton"
echo $name
unset name
echo $name

在这个例子中,我们首先将变量name设置为“Anton”,然后打印它。接着,我们取消了变量name的设置,并尝试再次打印它。

因为我们在脚本开头使用了set -o nounset,所以尝试打印一个未设置的变量会导致shell退出。这是使用set命令的基本用法,但实际上它还有更多功能。

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

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

相关文章

VR全景:为户外游玩体验插上科技翅膀

随着VR全景技术的愈发成熟,无数人感到惊艳,也让各行各业看到了一片光明的发展前景。尤其是越来越多的文旅景区开始引入VR全景技术,相较于以往的静态风景图,显然现在的VR全景结合了动态图像和声音更加吸引人。 VR全景技术正在逐步改…

肿瘤相关成纤维细胞分型及单细胞深入研究(文献)

目录 ①六种癌症类型共有的CAF亚型(pan-CAFs) 1,六种泛CAF亚型的鉴定和分子表征 2,Pan-CAF亚型特异性转录因子和基因调控网络 3,预后分析 4,Pan-CAF亚型与肿瘤中特定分子功能的关联 ②泛癌单细胞转录…

【论文精读】Bag of Tricks for Image Classification with Convolutional Neural Networks

这篇文章比较早了,2018年的 摘要 最近在图像分类研究方面取得的大部分进展可以归功于训练程序的改进,如数据增强和优化方法的改变。然而,在文献中,大多数改进要么作为实现细节简要提到,要么只在源代码中可见。在本文中…

kafka实验部署

一、前期准备 二、kafka实验 在zookeeper后继续进行操作 2.1 为ndoe1、node2、node3作出部署 2.1.1 解压kafka压缩包(node1举例) 2.1.2 操作 将解压后的kafka移动到kafka,进入到kafka下的config中,复制文件 2.1.2.1 编辑server.pr…

C语言语法进阶

条件运算符 条件运算符是 C 语言中唯一的一种三目运算符。三目运算符代表有三个操作数;双目 运算符代表有两个操作数,如逻辑与运算符就是双目运算符;单目运算符代表有一个操作数, 如逻辑非运算符就是单目运算符。运算符也称操作符…

Elasticsearch:(二)2.安装kibana

1.环境安装介绍: 安装java环境安装Elasticsearch安装kibana安装Elasticsearch-head插件 本节文章主要讲解kibana的安装。 2.下载 下载Elasticsearch对应的版本,参考官方自身产品兼容版本:支持一览表 | Elastic 下载地址:Kibana 7.17.20 | Elastic Kibana 7.17.20 | Ela…

Linux之C编程入门

目录 第1关:第一个C程序 任务描述 相关知识 编译C程序 编程要求 答案及其步骤: 第2关:Linux编译C程序 任务描述 相关知识 gcc编译器使用方法 编程要求 答案及其步骤: 第3关:Linux之静态库编写 任务描述 相关知识 生成…

el-menu 有一级二级三级菜单

效果如下 菜单代码如下 <el-menu:default-active"menuDefaultActive"class"el-menu-box":text-color"menuTextColor":active-text-color"menuActiveTextColor":unique-opened"true"><!-- 一级菜单 --><tem…

常见排序算法(插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序,计数排序,基数排序,桶排序)

一.排序的概念 1.排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作 2.稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排…

STM32 HAL库 利用CH376进行USB文件读写

STM32 其实可以进行读取USB文件,但仅限于F4以上芯片才可以进行SUB文件读写,但在项目开发中,往往用不到此芯片,那么只能通过外挂的USB芯片进行USB文件读写,本文则是采用STM32F103的SPI与CH376进行通信,通过CH376操作指令进行操作。 1、CH376介绍 CH376芯片 是沁恒的一款文…

paho-mqtt 库揭秘

文章目录 **paho-mqtt 库揭秘**第一部分&#xff1a;背景介绍第二部分&#xff1a;paho-mqtt 是什么&#xff1f;第三部分&#xff1a;如何安装这个库&#xff1f;第四部分&#xff1a;库函数使用方法第五部分&#xff1a;场景应用第六部分&#xff1a;常见Bug及解决方案第七部…

如何批量给Word文件增加前缀序号?“汇帮批量重命名”帮助你批量给word文件增加前缀序号。

批量给Word文件增加前缀序号的过程&#xff0c;对于经常处理大量文档的人来说&#xff0c;是一项既繁琐又必要的任务。首先&#xff0c;我们需要明确为什么要给Word文件增加前缀序号。在很多情况下&#xff0c;当我们需要按照一定的顺序对多个文档进行管理和归档时&#xff0c;…

海绵结构:Hash as RO

参考文献&#xff1a; [BDPA07] Bertoni G, Daemen J, Peeters M, et al. Sponge functions[C]//ECRYPT hash workshop. 2007, 2007(9).[GPP11] Guo J, Peyrin T, Poschmann A. The PHOTON family of lightweight hash functions[C]//Advances in Cryptology–CRYPTO 2011: 31…

MBD_入门篇_19_Simulink数学运算模块

19.Simulink数学运算模块 19.1 概述 数学运算模块&#xff0c;包含了一些数学运算&#xff0c;比如最常用的加减乘除等。 19.2 Add加法模块 设置加法模块的形状&#xff0c;默认是方形的&#xff0c;推荐使用方形的。 运算符设置。 设置符号为-&#xff0c;可以理解为本来是0,…

CSS 设置空格原样显示 white-space:pre-wrap;

CSS 设置空格原样显示 问题描述 html 渲染内容时&#xff0c;对于 空格、回车、Tab 键的 默认处理方式是 &#xff1a; 无论存在多少个连续的空格&#xff0c;都只会保留一个。 结论 由于以上的特性&#xff0c;导致了我们无法直接渲染出原格式的文本。pre 标签 了解一下 &…

今日刷三题(day4):简写单词+dd爱框框+除2!

题目一&#xff1a;简写单词 题目描述&#xff1a; 比如 “College English Test”可以简写成“CET”&#xff0c;“Computer Science”可以简写为“CS”&#xff0c;“I am Bob”简写为“IAB” 输入输出描述&#xff1a; 输入&#xff1a;一个复合单词 输出&#xff1a;输…

20240330-1-词嵌入模型w2v+tf-idf

Word2Vector 1.什么是词嵌入模型&#xff1f; 把词映射为实数域向量的技术也叫词嵌⼊ 2.介绍一下Word2Vec 谷歌2013年提出的Word2Vec是目前最常用的词嵌入模型之一。Word2Vec实际是一种浅层的神经网络模型&#xff0c;它有两种网络结构&#xff0c;分别是连续词袋&#xff…

C++ stl容器stack,queue,priority_queue的底层模拟实现

目录 前言&#xff1a; 文档借鉴&#xff1a;Reference - C Reference 1.deque a.deque的结构特点&#xff1a; b.deque的迭代器结构&#xff1a; c.面试题&#xff1a; 2.stack 3.queue 4.仿函数 5.priority_queue 总结&#xff1a; 前言&#xff1a; 本篇一共简单…

Hive 中常用的函数以及数据类型

数据类型 1.基本数据类型: 数据类型大小范围示例TINYINT1byte-128 ~ 127100YSMALLINT2byte-32768 ~ 32767100SINT4byte-2^32~ 2^32-1100BIGINT8byte-2^64~ 2^64-1100LFLOAT4byte单精度浮点数5.21DOUBLE8byte双精度浮点数5.21DECIMAL-高精度浮点数DECIMAL(9,8)BOOLEAN-布尔型tr…

VF02 XBLNR增强将不可编辑状态改为可编辑状态

VF02 XBLNR增强将不可编辑状态改为可编辑状态 一、业务界面展示 二、在程序SAPMV60A的INCLUDE程序MV60AF0F_FELDAUSWAHL_SONDERREG增强 *$*$-Start: ZEN_POINT_TEST1---------------------------------------------------------------------$*$* ENHANCEMENT 1 ZFI_TEST01.…