shell 06(shell内置命令)

一、内置命令介绍

shell 内置命令,就是由 Bash shell 自身提供的命令,而不是文件系统中的可执行文件

使用type 来确定一个命令是否是内置命令:

type 命令

 通常来说,内置命令会比外部命令执行得更快:

  • 执行外部命令时不但会触发磁盘 I/0,还需要 fork 出一个单独的进程来执行,执行完成后再退出。
  • 执行内置命令 相当于调用当前 Shell 进程的一个函数
  • 执行内置命令 是在当前Shell环境进程内,减少了上下文切换。

1.1 alias设置命令别名

  • alisa 用于给命令创建别名 
  • 若该命令且不带任何参数,则显示当前 Shell 进程中的所有别名列表

 好处: 可以将经常操作比较复杂的命令进行设置别名,通过别名的操作提高工作效率

alias 别名="命令"

这里使用单引号或双引号都可以

删除指定的别名

unalias 别名


删除当前Shell环境中所有的别名

unalias -a

注意: 以上2种方式删除都是临时删除当前Shell的别名,如果想永久删除必须去配置文件中手动删除

举例:

alias pslist="ps -aux"  查看所有进程 

alias wn1="watch -n 1 nvidia-smi"   1s刷新一次nvidia-smi界面

1.2 echo输出字符串

  • echo 是一个 shell 内置命令,用于在终端输出字符串,并在最后默认加上换行符

默认输出换行语法

echo 字符串

输出不换行语法

echo -n  字符串

  • 用于echo输出字符串非结尾处的换行,但是默认echo无法解析/n 转义字符

echo -e "hello \nworld"  # -e 可解析转义字符

\c清除echo结尾换行 

1.3 read读取控制台输入

read 是 Shell 内置命令,用于从标准输入中读取数据并赋值给变量。

  • 如果没有进行重定向,默认就是从终端控制台读取用户输入的数据;
  • 如果进行了重定向,那么可以从文件中读取数据。

read [-options] [varl var2 ..]
  • options 表示选项,如下表所示;
  • var 表示用来存储数据的变量,可以有一个,也可以有多个
  • options 和var 都是可选的,如果没有提供变量名,那么读取的数据将存放到环境变量 REPLY 变量中
  • $REPLY保存read最后一个读入命令的数据options支持的参数

案例:读取多个字符

#!/bin/bash 
#打印每一个变量的值
#使用read命令读取数据,要有提示信息"请输入姓名,年龄,爱好:”将数据赋值给多个变量read -p “请输入姓名,年龄,爱好:” name age hobbyecho "姓名:${name}"
echo "年龄:${age}"
echo "爱好:${hobby}"

案例:读取一个字符

#!/bin/bash
# 使用read命令读取数据,要有提示信息 "您确定要删除数据吗?(请输入y/n):" 并且设置读取一个字符
read -n 1 -p "您确定要删除数据吗?(请输入y/n):" char# 打印这个字符输出
printf "\n"
echo "您输入的字符: ${char}"

案例:限制时间输入

#!/bin/bash# 使用read命令读取数据,要有提示信息"请输入密码(20秒内):" 并且设置限制时间20秒read -t 20 -sp  "请输入密码(20秒内 ):" pwd1
echo
read -t 20 -sp "请再次输入密码(20秒内):" pwd2
echo # 校验密码与再次输入的密码是否一致if [ $pwd1 == $pwd2 ]
thenecho"密码与确认密码一致,验证通过"
elseecho  "密码与确认密码不一致,验证失败"fi

s 静默模式 

1.4 exit退出

exit 用于退出当前Shell环境进程结束运行,并且可以返回一个状态码.一般使用 $? 可以获取退出状态码

正确退出

exit 

错误退出

exit 非0数字  #配合$?用于业务处理

1.5 declare设置变量

  • declare命令用于声明 shell 变量。
  • 可用来声明变量并设置变量的属性,也可用来显示shell函数。
  • 若不加上任何参数,则会显示全部的shell变量与函数(与执行set指令的效果相同)。

1.declare设置变量的属性[重要]

declare -i age=20  #设置整形变量declare +i age #取消限制declare -r age #只读变量

2.查看全部Shell变量与函数

declare  查看全部Shell变量与函数

declare -f 查询所有函数的定义
declcare -F 查询所有函数的名称列表


3.实现关联数组变量

 关联数组也称为“键值对 (key-value)”数组,键(key) 也即字符形式的数组下标,值(value) 也即元素值

declare -A 关联数组变量名=([字符串key1]=值1 [字符串key2]=值2 ...)
  • declare也可以用于定义普通索引数组,-a 参数创建普通或索引数组 -A 创建关联数组
  • declare -a 关联数组变量名=(值1 值2 ...)
  • declare -a 关联数组变量名=([0]=值1 [1]=值2 ...)

获取key值:

${关联数组变量名[key]}${关联数组变量名[*]}${关联数组变量名[@]}

1.6 test

shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试功能与[]一样

1.6.1 整数比较

if test 数字1 options 数字2
then
...
fi

 

1.6.2 字符串比较

 

test "a" == "b"; echo $?
test "a" \> "b"; echo $?

1.6.3 文件比较

 

test -e /home/w/pty.txt; echo $?
test -r /home/w/pty.txt; echo $?

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

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

相关文章

MyBatis的核心技术掌握,简单易懂(上)

目录 一.MyBatis中的动态SQL 二.MyBatis中的模糊查询 1. # 符号 2. $ 符号 ---问题 ---所以大家知道 # 和 $ 在MyBatis中的模糊查询中的区别了嘛?? 三.MyBatis 中的结果映射 1. resultType: 2. resultMap: ---问题 ---…

时序预测 | MATLAB实现PSO-KELM粒子群算法优化核极限学习机时间序列预测(含KELM、ELM等对比)

时序预测 | MATLAB实现PSO-KELM粒子群算法优化核极限学习机时间序列预测(含KELM、ELM等对比) 目录 时序预测 | MATLAB实现PSO-KELM粒子群算法优化核极限学习机时间序列预测(含KELM、ELM等对比)预测效果基本介绍模型介绍程序设计参…

React Diff算法

文章目录 React Diff算法一、它的作用是什么?二、React的Diff算法1.了解一下什么是调和?2.react的diff算法3.React Diff的三大策略4.tree diff:1、如果DOM节点出现了跨层级操作,Diff会怎么办? 5. component diff:6. e…

使用ELK(ES+Logstash+Filebeat+Kibana)收集nginx的日志

文章目录 Nginx日志格式修改配置logstash收集nginx日志引入Redis收集日志写入redis从redis中读取日志 引入FilebeatFilebeat简介Filebeat安装和配置 配置nginx转发ES和kibanaELK设置账号和密码 书接上回:《ELK中Logstash的基本配置和用法》 Nginx日志格式修改 默认…

Jenkins的流水线详解

来源:u.kubeinfo.cn/ozoxBB 什么是流水线 声明式流水线 Jenkinsfile 的使用 什么是流水线 jenkins 有 2 种流水线分为声明式流水线与脚本化流水线,脚本化流水线是 jenkins 旧版本使用的流水线脚本,新版本 Jenkins 推荐使用声明式流水线。…

ROS2 学习(五)接口,动作

接口 通信双方统一规定好接口。比如图像 img,控制运动的线速度和角速度…… 我们也不用了解具体实现,基本就是了解接口会去用就行。 $ ros2 interface list # 展示所有 interfaces $ ros2 interface show ... # 显示具体一个 interface $ ros2 package…

搭建CFimagehost私人图床,实现公网远程访问的详细指南

文章目录 1.前言2. CFImagehost网站搭建2.1 CFImagehost下载和安装2.2 CFImagehost网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测…

PMP证书的正确打开方式 get✓

在职场竞争日益激烈的今天,拥有一项专业认证成为了许多人提升自身竞争力的必备条件。而作为项目管理领域的顶级认证,PMP证书备受关注。不过,很多人对于PMP证书的费用颇有顾虑。那么,PMP证书有什么补贴政策呢?下面就为大…

RTSP/Onvif视频服务器EasyNVR安防视频云服务调用接口录像会被自动删除的问题解决方案

EasyNVR安防视频云服务是基于RTSP/Onvif协议接入的视频平台,可支持将接入的视频流进行全平台、全终端的分发,分发的视频流包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等。平台丰富灵活的视频能力,可应用在智慧校园、智慧工厂、智慧水利等…

Hugo托管到Github Pages

Github通过其Github Pages服务可以user、project或organization提供免费快速的静态托管,同时使用Github Actions自动化开发工作流和构建。 1.创建Github仓库 可见性为public。 命名为username.github.io,username为你的Github用户名。 2.添加远程仓库…

vue3-ts- element-plus新增组件-过滤

新增组件-所有值为空时过滤 <el-form-item label"家庭成员"><divclass"username-box"v-for"(item, index) in form.namelist":key"index"><div>姓名&#xff1a;<el-input v-model"item.name" placeho…

Docker的革命:容器技术如何重塑软件部署之路

引言 在过去的几年中&#xff0c;容器技术已经从一个小众的概念发展成为软件开发和部署的主流方法。Docker&#xff0c;作为这一变革的先驱&#xff0c;已经深深地影响了我们如何构建、部署和运行应用程序。本文将探讨容器技术的起源&#xff0c;Docker如何崛起并改变了软件部…

Lombok生成的Getter和Setter的名称对于“eMail”或“xAxis”等属性存在大小写转换异常

问题 最新开发中&#xff0c;遇到一个字段映射问题。我们先看问题案例&#xff1a; 明明代码中第二个字母是大写&#xff0c;结果测试接口时发现变成了小写字母。 分析 通过网上查询发现&#xff0c;这属于Lombok的bug。而且早在2015年就有人在GitHub上提出了issues。 Names o…

基于spring boot校园疫情信息管理系统/疫情管理系统

摘要 随着计算机技术&#xff0c;网络技术的迅猛发展&#xff0c;Internet 的不断普及&#xff0c;网络在各个领域里发挥了越来越重要的作用。特别是随着近年人民生活水平不断提高&#xff0c;校园疫情信息管理系统给学校带来了更大的帮助。 由于当前疫情防控形势复杂&#xff…

贪心算法:简单而高效的优化策略

在计算机科学中&#xff0c;贪心算法是一种简单而高效的优化策略&#xff0c;用于解决许多组合优化问题。虽然它并不适用于所有问题&#xff0c;但在一些特定情况下&#xff0c;贪心算法能够产生近似最优解&#xff0c;而且计算成本较低。在本文中&#xff0c;我们将深入探讨贪…

C++中机器人应用程序的行为树(ROS2)

马库斯布赫霍尔茨 一、说明 以下文章为您提供了对机器人应用程序或框架中经常使用的行为树的一般直觉&#xff1a;ROS&#xff0c;Moveit和NAV2。了解行为 Tress &#xff08;BT&#xff09; 框架的原理为您提供了在游戏领域应用知识的绝佳机会。BT可以与Unity或Unreal集成。 由…

在VS中使用格式化工具

在VS中使用格式化工具 官网地址: https://clang.llvm.org/ 最后更新时间&#xff1a;2023.8.25 这里以windows为例&#xff0c;使用的环境为VS。 &#xff08;一&#xff09;下载安装LLVM 下载地址: https://github.com/llvm安装&#xff08;自己选择安装路径&#xff09; &…

【Azure】Virtual Hub vWAN

虚拟 WAN 文档 Azure 虚拟 WAN 是一个网络服务&#xff0c;其中整合了多种网络、安全和路由功能&#xff0c;提供单一操作界面。 我们主要讨论两种连接情况&#xff1a; 通过一个 vWAN 来连接不通的 vNET 和本地网络。以下是一个扩展的拓扑 结合 vhub&#xff0c;可以把两个中…

深入理解Linux内核--Ext2和Ext3文件系统

Ext2的一般特征 类Unix操作系统使用多种文件系统。尽管所有这些文件系统都有少数POSIX API(如state())所需的共同的属性子集&#xff0c;但每种文件系统的实现方式是不同的。 Linux的第一个版本是基于MINIX文件系统的。当Linux成熟时&#xff0c;引入了扩展文件系统(Extended …

Java smslib包开发

上一篇文章我详细介绍RXTXcomm的安装方法和简单代码,如果小伙伴涉及到需要使用手机短信模块完成短信收发需求的话,可以使用到smslib进行开发。 首先还是同样的,将整个smslib包源码导入项目,并且将它所需依赖一起进行导入 导入完成之后,我们就可以对smslib包进行二次开发了 下面…