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命令的基本用法,但实际上它还有更多功能。

set -x #这个命令在我们写脚本排错的时候非常有用。它会显示我们当前执行了什么命令

set +x #取消显示当前执行了什么命令

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

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

相关文章

[MoeCTF-2022]Sqlmap_boy

title:[MoeCTF 2022]Sqlmap_boy 查看网页源代码&#xff0c;得到提示 <!-- $sql select username,password from users where username".$username." && password".$password.";; --> 用万能密码绕过&#xff0c;用’"闭合 爆数据库…

华锐双柜台系统超越快速通道!

很多朋友除了使用快速通道&#xff0c;但是一般资金量都不满足独立单元交易格&#xff0c;共享不够满足自己&#xff0c;那么是可以选择双柜台系统。我们一起来了解下&#xff01; 首先为什么我们使用华锐双柜台系统更快呢&#xff1f; 我们都知道&#xff1a;极速柜台的交易…

多模态模型和大型语言模型(LLM):概念解析与实例探究

在人工智能的世界中&#xff0c;我们经常遇到各种模型来解决不同类型的问题。最近&#xff0c;特别引人注意的是多模态模型和大型语言模型&#xff08;LLM&#xff09;。尽管这两种模型都是AI技术的当前前沿&#xff0c;但它们在功能和设计上有显著差异。本文旨在阐释这两种模型…

HOOPS Commuicator:基于Web的交互式2D/3D图形轻量化引擎

在当前数字化时代&#xff0c;Web基础的3D应用程序正在成为行业标准&#xff0c;尤其是在工程和制造领域。Tech Soft 3D公司旗下的HOOPS Communicator正是针对这一需求设计的高级解决方案&#xff0c;提供了一套全面的工具&#xff0c;旨在帮助开发者构建复杂的3D工程应用程序。…

Android 单一音量控制

1、关闭/开启单一音量控制 frameworks/base/core/res/res/values/config.xml <!-- Flag indicating whether all audio streams should be mapped toone single stream. If true, all audio streams are mapped toSTREAM_MUSIC as if its on TV platform. --><bool n…

Springboot+Vue项目-基于Java+MySQL的图书馆管理系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

RabbitMQ spring boot TTL延时消费

关于延时消费主要分为两种实现&#xff0c;一种是rabbitmq的TTL机制&#xff0c;一种是rabbitmq的插件实现。 实现一&#xff1a;TTL 1、设置队列的过期时间 2、设置消息的过期时间 添加相关maven依赖 <dependency><groupId>org.springframework.boot</grou…

【信号处理】基于CNN的心电(ECG)信号分类典型方法实现(tensorflow)

关于 本实验使用1维卷积神经网络实现心电信号的5分类。由于数据类别不均衡&#xff0c;这里使用典型的上采样方法&#xff0c;实现数据类别的均衡化处理。 工具 方法实现 数据加载 Read the CSV file datasets: NORMAL_LABEL0 , ABNORMAL_LABEL1,2,3,4,5 ptbdb_abnormalpd.…

C++:函数符(一)

正文 函数对象也叫函数符&#xff0c;函数符是可以以函数方式与()结合使用的任意对象。这包括函数名、指向函数的指针和重载了()运算符的类对象。 上面这句话的意思是指&#xff1a;函数名、指向函数的指针和重载了括号运算符的类对象与括号结合&#xff0c;从而以函数方式实…

【行为型模式】解释器模式

一、解释器模式概述 解释器模式定义&#xff1a;给分析对象定义一个语言&#xff0c;并定义该语言的文法表示&#xff0c;再设计一个解析器来解释语言中的句子。也就是说&#xff0c;用编译语言的方式来分析应用中的实例。这种模式实现了文法表达式处理的接口&#xff0c;该接口…

python高级进阶

目录 一、str字符串 1. 字符串定义 2. 获取字符串中元素 3. 遍历字符串 4. 字符串常见操作 二、set集合 1. 集合的创建 2. 遍历集合中的元素 3. 集合中添加元素 4. 集合删除元素 三、字典 1. 字典的定义 2. 字典的特点 3. 字典增删改查 4. 字典遍历 四、slice切片…

【经验总结】Ubuntu 源代码方式安装 Microsoft DeepSpeed

1. 背景介绍 使用 DeepSpeed 在多服务器上分布式训练大模型 2. 安装方法 2.1 查看显卡参数 ~$ CUDA_VISIBLE_DEVICES0 python -c "import torch; print(torch.cuda.get_device_capability())" (8, 0) ~$ CUDA_VISIBLE_DEVICES0 python -c "import torch; pr…

python常见语法

变量赋值&#xff1a; my_var 10 基本数据类型&#xff1a; 整数&#xff08;int&#xff09;、浮点数&#xff08;float&#xff09;、字符串&#xff08;str&#xff09;、布尔值&#xff08;bool&#xff09;、列表&#xff08;list&#xff09;、元组&#xff08;tuple&…

代码随想录第三十天|无重叠区间| 划分字母区间| 合并区间

今天三道都是重叠区间问题&#xff0c;重叠区间问题第一步就是先对数组进行排序&#xff0c;才能进行后续操作。 无重叠区间 这一题和昨天的最少多少支箭射爆气球的解法是相同的&#xff0c;判断相邻区间是否重叠&#xff0c;若两个区间重叠了则找出重叠区间最小右边界&#…

怎样用PHP语言实现远程控制三路开关

怎样用PHP语言实现远程控制三路开关呢&#xff1f; 本文描述了使用PHP语言调用HTTP接口&#xff0c;实现控制三路开关&#xff0c;三路开关可控制三路照明、排风扇等电器。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格 序号设备名称厂商1智能WiFi墙…

C++:模板(初级)

hello&#xff0c;各位小伙伴&#xff0c;本篇文章跟大家一起学习《C&#xff1a;模板&#xff08;初级&#xff09;》&#xff0c;感谢大家对我上一篇的支持&#xff0c;如有什么问题&#xff0c;还请多多指教 &#xff01; 如果本篇文章对你有帮助&#xff0c;还请各位点点赞…

Docker容器搭建Hadoop集群(hadoop-3.1.3)

Docker容器环境下搭建Hadoop集群&#xff08;完全分布式&#xff09; hadoop版本为hadoop-3.1.3 &#xff08;1&#xff09;安装额外的速度较快的镜像库 yum install -y epel-release &#xff08;2&#xff09;安装同步工具&#xff0c;方便在多台服务器上进行文件的传输 …

Oracle Hint 语法详解

什么是Hint Hint 是 Oracle 提供的一种 SQL 语法&#xff0c;它允许用户在 SQL 语句中插入相关的语法&#xff0c;从而影响 SQL 的执行方式。 因为 Hint 的特殊作用&#xff0c;所以对于开发人员不应该在代码中使用它&#xff0c;Hint 更像是 Oracle 提供给 DBA 用来分析诊断问…

从零学算法377

377. 组合总和 Ⅳ 给你一个由 不同 整数组成的数组 nums &#xff0c;和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。 题目数据保证答案符合 32 位整数范围。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3], target 4 输出&#xff…

【操作系统】进程同步(水果盘问题)使用Python多线程threading实现

一、进程同步&#xff08;水果盘问题&#xff09; 1、吃水果问题&#xff1a;桌子有一只盘子&#xff0c;只允许放一个水果&#xff0c;父亲专向盘子放苹果&#xff0c;母亲专向盘子放桔子 儿子专等吃盘子的桔子&#xff0c;女儿专等吃盘子的苹果。只要盘子为空&#xff0c;父…