Linux 认识与学习Bash——2

news2024/11/15 23:59:05

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

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

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

相关文章

我与深拷贝

前言 最近在掘金读到了一篇文章《Radash 能取代 Lodash???真幽默 - 掘金》,文章的评论区讨论起了深拷贝。"深拷贝" 我的"老朋友",还记得在学习我人生中的第二道面试题的时候认识了它,…

CSS 画一个三角形

一、前言 在前端开发的时候,我们有时候会需要用到一个三角形的形状,比如地址选择或者播放器里面播放按钮 通常情况下,我们会使用图片或者svg去完成三角形效果图,但如果单纯使用css如何完成一个三角形呢? 实现过程似…

物理学视角讲解diffusion生成模型——隐扩散模型

https://zhuanlan.zhihu.com/p/692996885 https://zhuanlan.zhihu.com/p/693255617 前面两篇文章介绍了扩散过程,同时实现了1维、2维混合高斯扩散、逆扩散,通过模型预测得分函数来实现逆扩散推理。这个章节介绍工业界使用的文本生成图扩撒模型&#xff1…

基于SSM+Jsp+Mysql的多人命题系统

开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…

frp改造Windows笔记本实现家庭版免费内网穿透

文章目录 前言frp原理Windows服务端IP检验IP固定软件下载端口放行端口映射开机启动 NAS客户端端口查询软件下载端口检验穿透测试自启设置 Ubuntu客户端软件下载后台启动 后记 前言 之前一直用花生壳远程控制一个服务器,但最近内网的网络策略似乎发生了变化&#xf…

InfiniGate自研网关实现思路二

5.HTTP请求参数解析 解析 HTTP 网络请求的参数信息,包括;GET/POST,以及应对不同 Content-Type 类型的处理。 HTTP 接口请求的参数需要解析成可以匹配到 RPC 接口的入参信息,所以通常为了方便控制一般只支持 RPC 接口单个对象入参…

「sentinel」流量控制组件的应用

「sentinel」流量控制组件的应用 Sentinel版本QPS 一、初识Sentinel1、Sentinel2、Sentinel 和 Hystrix对比3、雪崩问题 二、环境搭建1、下载安装Sentinel2、微服务整合Sentinel 三、流量控制1、簇点链路2、流控设置3、流控模式直接关联链路 4、流控效果流控效果解释 四、热点限…

C#通用类库封装实战

数据库查询 特性方式获取数据库列的别名 数据库更新 使用简单工厂配置的方式

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

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

【QT学习】8.qt事件处理机制,事件过滤器,自定义事件

1.qt事件处理机制 事件处理: 当用户移动鼠标的时候 ,创建一个 鼠标移动事件对象 然后把这个对象放到 事件队列里面去,事件管理器 从队列中 取出事件,然后 调用其对应的事件处理函数。 多态机制: &#x…

靠谱的婚恋平台有哪些?青藤之恋、二狗、百合网、珍爱网等深度测评

哇塞,恋爱和结婚对于年轻人来讲可是超级重要的大事呢!不过呀,找到一个稳稳当当的婚恋平台可不简单哟!那么,到底哪个婚恋平台最靠得住呢? 丛丛: 这可是我用了好久好久的脱单交友小程序嘞&#xf…

MySQL中explain的用法

执行结果各字段的含义 EXPLAIN SQL语句 如: EXPLAIN SELECT * FROM test 执行结果: 列名描述id在一个大的查询语句中每个SELECT关键字都对应一个 唯一的idselect_typeSELECT关键字对应的那个查询的类型table表名partitions匹配的分区信息type针对单表…

机器学习预测汽车油耗效率 MPG

流程 数据获取导入需要的包引入文件,查看内容划分训练集和测试集调用模型查看准确率 数据获取 链接:https://pan.baidu.com/s/1KeIJykbcVpsfEk0xjhiICA?pwd30oe 提取码:30oe --来自百度网盘超级会员V1的分享导入需要的包 import pandas as pd imp…

【Spring Boot】掌握Spring Boot:深入解析配置文件的使用与管理

💓 博客主页:从零开始的-CodeNinja之路 ⏩ 收录文章:【Spring Boot】掌握Spring Boot:深入解析配置文件的使用与管理 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 Spring Boot 配置文件一. 配置文…

重新总结一下以前写过的“波特率”!单片机常见的通信速率分析!

文章目录 如题以前文章新的总结如题 波特率是单片机中描述通信速率的一个单位,比如串口通信、SPI通信、IIC通信、LIN通信、CAN通信等等,现在重新总结一下涉及到波特率的一些知识点。 以前文章 上面是存储的单位换算方式 这是通信速率的换算方式 新的总结 波特率的英文是…

画家-qt-surce

void GraphicView::paintEvent(QPaintEvent *pe) { QPainter painter(viewport()); painter.setRenderHint(QPainter::SmoothPixmapTransform);//升级画家 painter.drawImage(rect(),musicImage); } 分析: 这段代码是用于绘制图形视图的部分。 1. void GraphicV…

JavaCard学习笔记: CAP Component 之 Class Component

文章目录 整体结构tag和size字段signature_pool_length和signature_pooltype_descriptor结构导入类型编码导入项签名示例导入类导入数组导入远程方法 interfaces[]interface_info结构flagsinteface_countsuperinterfacesinterface_name class_info_compact classes[]结构flagsi…

mapreduce中的ReduceTask工作机制(Hadoop)

ReduceTask 是 Hadoop 中的一个重要组件,负责对 MapTask 的输出进行合并、排序和归并,最终生成最终的输出结果。 ReduceTask 的工作机制 1. 分组(Shuffle)阶段: 在分组阶段,ReduceTask 会从多个 Mapper …

【问题处理】银河麒麟操作系统实例分享,服务器操作系统VNC远程问题分析

1.服务器环境以及配置 【内核版本】 4.19.90-23.8.v2101.ky10.aarch64 【OS镜像版本】 0518-server 2.问题现象描述 服务器通过vncserver:1.service服务启动的vnc服务后,普通用户用vnc连接时,锁屏后,然后输入登陆密码会报密码错误&…

回溯算法练习day.4

93.复原ip地址 链接:. - 力扣(LeetCode) 题目描述: 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 . 分隔。 例如:"…