[000-01-001].第04节:Shell中的内置命令

5、Shell内置命令:alias设置别名

目标

1.理解内置命令的含义

2.能够使用alias内置命令进行给命令定义别名

内置命令介绍

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

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

type 命令

在这里插入图片描述

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

内置命令列表

命令说明
:扩展参数列表,执行重定向操作
.读取并执行指定文件中的命令(在当前 shell 环境中)
alias为指定命令定义一个别名
bg将作业以后台模式运行
bind将键盘序列绑定到一个 readline 函数或宏
break退出 for、while、select 或 until 循环
builtin执行指定的 shell 内建命令
caller返回活动子函数调用的上下文
cd将当前目录切换为指定的目录
command执行指定的命令,无需进行通常的 shell 查找
compgen为指定单词生成可能的补全匹配
complete显示指定的单词是如何补全的
compopt修改指定单词的补全选项
continue继续执行 for、while、select 或 until 循环的下一次迭代
declare声明一个变量或变量类型。
dirs显示当前存储目录的列表
disown从进程作业表中刪除指定的作业
echo将指定字符串输出到 STDOUT
enable启用或禁用指定的内建shell命令
eval将指定的参数拼接成一个命令,然后执行该命令
exec用指定命令替换 shell 进程
exit强制 shell 以指定的退出状态码退出
export设置子 shell 进程可用的变量
fc从历史记录中选择命令列表
fg将作业以前台模式运行
getopts分析指定的位置参数
hash查找并记住指定命令的全路径名
help显示帮助文件
history显示命令历史记录
jobs列出活动作业
kill向指定的进程 ID(PID) 发送一个系统信号
let计算一个数学表达式中的每个参数
local在函数中创建一个作用域受限的变量
logout退出登录 shell
mapfile从 STDIN 读取数据行,并将其加入索引数组
popd从目录栈中删除记录
printf使用格式化字符串显示文本
pushd向目录栈添加一个目录
pwd显示当前工作目录的路径名
read从 STDIN 读取一行数据并将其赋给一个变量
readarray从 STDIN 读取数据行并将其放入索引数组
readonly从 STDIN 读取一行数据并将其赋给一个不可修改的变量
return强制函数以某个值退出,这个值可以被调用脚本提取
set设置并显示环境变量的值和 shell 属性
shift将位置参数依次向下降一个位置
shopt打开/关闭控制 shell 可选行为的变量值
source读取并执行指定文件中的命令(在当前 shell 环境中)
suspend暂停 Shell 的执行,直到收到一个 SIGCONT 信号
test基于指定条件返回退出状态码 0 或 1
times显示累计的用户和系统时间
trap如果收到了指定的系统信号,执行指定的命令
type显示指定的单词如果作为命令将会如何被解释
typeset声明一个变量或变量类型。
ulimit为系统用户设置指定的资源的上限
umask为新建的文件和目录设置默认权限
unalias刪除指定的别名
unset刪除指定的环境变量或 shell 属性
wait等待指定的进程完成,并返回退出状态码

alisa 介绍

alisa 用于给命令创建别名。

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

若该命令且不带任何参数,则显示当前 Shell 进程中的所有别名列表。
在这里插入图片描述

上面是系统为了方便命令操作默认将部分命令创建为别名 ll 的命令与ls -l的效果一样, 就是因为ll是别名

alias别名定义语法

alias 别名="命令"

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

unalias 别名删除语法

删除指定的别名

unalias 别名

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

unalias -a

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

alias演示

输出所有进行信息

ps -aux

给上面的命令起别名为psList, 并使用psList输出
在这里插入图片描述

删除psList别名

在这里插入图片描述

小结

1.理解内置命令的含义

就是Shell内部提供的命令, 可以直接使用

内置命令与外部的脚本文件执行区别

​ 内置命令: 执行速度快, 内置命令执行是当前Shell环境的一部分, 就在当前进程内执行, 减少了上下文切换

​ 外部的脚本文件: 执行速度慢, 需要磁盘I/O操作, 并且是fork一个新的进程运行脚本文件,导致进程之间上下文切换

2.能够使用alias内置命令

定义别名语法: alias 别名="命令"

删除别名: unalias 别名

6、Shell内置命令:echo输出字符串

目标

1.能够echo输出不换行的字符串

2.能够使用echo输出转义字符

echo命令介绍

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

echo输出语法

默认输出换行语法

echo 字符串

输出不换行语法

echo -n  字符串

输出演示

1.创建echo1.sh

touch echo1.sh

2.编辑文件内容并保存

vim echo1.sh

文件内容

#!/bin/bash
echo "hello"
echo "world"
echo -n "itheima "
echo -n "shell "

3.运行echo1.sh文件观察效果
在这里插入图片描述

itheima shell输出为一行

echo输出转义字符

\n 转义字符

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

演示
在这里插入图片描述

-e 参数

-e 参数用于解析转义字符

echo -e '字符串中含有转义字符'

演示
在这里插入图片描述

/c 转义字符

/c 用于强制清除echo的结尾换行输出

演示
在这里插入图片描述

小结

1.echo输出不换行的字符串

echo -n 输出的数据

2.echo输出转义字符有哪些

\n 换行字符

\c 清除echo结尾的换行

echo -e 含有转义字符的数据

7、Shell内置命令:read读取控制台输入

目标

理解read命令的作用

使用read给多个变量赋值

使用read读取1个字符

使用read限制时间输入

介绍

read 是 Shell 内置命令,用于从标准输入中读取数据并赋值给变量。如果没有进行重定向,默认就是从终端控制台读取用户输入的数据;如果进行了重定向,那么可以从文件中读取数据。

后续讲解Shell重定向

语法

read [-options] [var1 var2 ...]

options表示选项,如下表所示;var表示用来存储数据的变量,可以有一个,也可以有多个。

optionsvar都是可选的,如果没有提供变量名,那么读取的数据将存放到环境变量 REPLY 变量中。

$REPLY保存read最后一个读入命令的数据

options支持的参数

选项说明
-a array把读取的数据赋值给数组 array,从下标 0 开始。
-d delimiter用字符串 delimiter 指定读取结束的位置,而不是一个换行符(读取到的数据不包括 delimiter)。
-e在获取用户输入的时候,对功能键进行编码转换,不会直接显式功能键对应的字符。
-n num读取 num 个字符,而不是整行字符。
-p prompt显示提示信息,提示内容为 prompt。
-r原样读取(Raw mode),不把反斜杠字符解释为转义字符。
-s静默模式(Silent mode),不会在屏幕上显示输入的字符。
当输入密码和其它确认信息的时候,这是很有必要的。
-t seconds设置超时时间,单位为秒。如果用户没有在指定时间内输入完成,
那么 read 将会返回一个非 0 的退出状态,表示读取失败。
-u fd使用文件描述符 fd 作为输入源,而不是标准输入,类似于重定向。

示例1:多个变量赋值

需求

使用 read 命令给多个变量赋值

步骤

编辑文件read1.sh脚本文件

# 使用read命令读取数据,要有提示信息"请输入姓名,年龄,爱好:" 将数据赋值给多个变量
# 打印每一个变量的值

演示

创建文件

touch read1.sh

编辑文件

vim read1.sh

read1.sh文件内容

#!/bin/bash
read -p "请输入姓名,年龄,爱好: " name age hobby
echo "姓名:$name"
echo "年龄:$age"
echo "爱好:$hobby"

运行效果
在这里插入图片描述

示例2:读取一个字符

需求

从终端控制台只读取一个字符

步骤

编辑文件read2.sh脚本文件

# 使用read命令读取数据,要有提示信息"您确定要删除数据吗?(请输入y/n):" 并且设置读取一个字符
# 打印这个字符输出

演示

创建文件

touch read2.sh

编辑文件

vim read2.sh

read2.sh文件内容

#!/bin/bash
read -n 1 -p '请输入一个字符: ' char
printf '\n'
echo '你输入的字符为:'$char

注意

-n 1只读取一个字符。运行脚本后,只要输入的一个字符,立即读取结束,不用等待用户按下回车键。

printf '\n'语句用于换行,否则 echo 的输出结果会和用户输入的内容位于同一行,不容易区分

运行效果
在这里插入图片描述

示例3:限制时间输入

需求

在终端控制台输入时, 设置指定时间内输入密码

步骤

编辑文件read3.sh脚本文件

# 使用read命令读取数据,要有提示信息"请输入密码(20秒内):" 并且设置限制时间20秒
# 输出一个换行
# 使用read命令读取数据,要有提示信息"请再次输入密码(20秒内):" 并且设置限制时间20秒
# 输出一个换行
# 校验密码与再次输入的密码是否一致
演示

创建文件

touch read3.sh

编辑文件

vim read3.sh

read3.sh文件内容

#!/bin/bash
read -t 20 -sp '请输入密码(20秒内):' pwd1
printf '\n'
read -t 20 -sp '请再次输入密码(20秒内):' pwd2
printf '\n'
if[ $pwd1 == $pwd2 ]
thenecho '密码与确认密码一致, 验证通过'
elseecho '密码与确认密码不一致,验证失败'
fi

执行文件运行效果
在这里插入图片描述

小结

read命令是什么

用于读取标准输入(终端控制台用户输入的数据)

read给多个变量赋值

read var1 var2 ...

read读取1个字符

read -n 1 var1

read限制时间输入

read -t 秒数 var1

8、Shell内置命令:exit退出

目标

掌握exit的应用场景

介绍

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

语法

正确退出语法

exit  # 默认返回状态码0, 一般代表命令执行成功

错误退出语法

exit 非0数字 # 数字建议的范围0~255,  一般代表命令执行失败

exit应用场景

1.结束当前Shell进程

2.当Shell 进程执行出错退出时,可以返回不同的状态值代表不同的错误

比如执行一个脚本文件里面操作一个文件时,可以返回1 表示文件不存在,2 表示文件没有读取权限,3 表示文件类型不对。

示例:Shell脚本文件中使用exit退出

需求

编写Shell脚本使用exit 退出, 退出时返回一个非0数字状态值, 执行脚本文件并打印返回状态值

步骤

1.创建exit.sh文件

2.编辑exit.sh文件, 使用exit 数字 退出结束当前Shell

3.执行文件,打印返回状态值

演示

创建文件

touch exit.sh

编辑文件

vim exit.sh

exit.sh文件内容: 使用exit 数字 退出结束当前Shell

#!/bin/bash
echo 'one'
exit 6
echo 'two'

运行效果
在这里插入图片描述

小结

exit的应用场景

1.结束当前Shell进程

2.可以返回不同的状态码, 用于不同的业务处理

9、Shell内置命令:declare设置变量

目标

1.能够使用declare设置变量的属性

2.能够使用declare查看全部Shell变量与函数

3.能够使用declare实现索引数组与关联数组变量

介绍

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

declare命令作用

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

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

3.实现关联数组变量[重要]

declare设置变量的属性语法

declare [+/-][aArxif][变量名称=设置值]

+/-  "-“可用来指定变量的属性,”+"则是取消变量所设的属性。

a array,设置为普通索引数组

A Array,设置为key-value关联数组

r  readonly,将变量设置为只读, 也可以使用readonly

x  exprot,设置变量成为全局变量,也可以使用export

i  int,设置为整型变量。

f function,设置为一个函数变量

示例1:设置变量属性

需求

操作一个变量属性, 设置为整型\ 取消整型\设置为只读等操作

步骤

  1. 使用declare设置一个整型变量并赋值
  2. 取消变量的整型类型, 尝试设置其他类型值尝试
  3. 设置变量只读, 尝试赋值测试

演示

在这里插入图片描述

查看全部Shell变量与函数定义语法

declare [-fF]

declare 后无参数, 查询全部Shell变量与函数定义, 与set功能一模一样

-f  查询仅显示函数定义。

-F 查询仅显示函数名字

示例2:查看当前Shell所有函数名

查看所有变量与所有函数

declare

在这里插入图片描述

查看所有函数与定义

declare -f

在这里插入图片描述

查询所有函数名列表

declare -F

在这里插入图片描述

实现key-value关联数组变量语法

关联数组也称为“键值对(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
${关联数组变量名[@]} # 方式2

示例3:实现普通索引数组

需求

使用declare定义一普通数组,并获取打印元素数据的值

步骤

1.创建declare1.sh文件

2.编辑declare1.sh文件内容, 使用declare定义普通数组数据与打印

2.执行文件

演示

创建文件

touch declare1.sh

编辑文件

vim declare1.sh

declare1.sh文件内容

#!/bin/bash
declare -a arr1=(1 2 3 aa)
echo ${arr1[1]}
echo ${arr1[*]}declare -a arr2=([0]=1 [1]=2  [2]=3  [4]=aa)
echo ${arr2[1]}
echo ${arr2[*]}declare -a arr2[3]=4
echo ${arr2[*]}

运行结果
在这里插入图片描述

示例4:实现key-value关联数组

需求

使用declare定义关联数组并打印输出

演示

在这里插入图片描述

注意: 使用参数-A 才是关联数组 , 关联数组无法使用索引获取

在这里插入图片描述

小结

1.使用declare设置变量的属性(重点)

declare [+/-][aArxif] 变量名=变量值

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

declare

declare -f 查询所有函数的定义

declcare -F 查询所欲函数的名称列表

3.使用declare实现普通索引数组和关联数组变量(重点)

索引数组: declare -a array_name=(item1 item2 ...)

关联数组: declare -A array_name=([字符串key1]=item1 [字符串key2]=item2 ...)

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

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

相关文章

恶意代码防范技术原理

恶意代码概述 定义与分类 恶意代码:指违背目标安全策略的程序代码,会造成目标系统信息泄露、资源滥用,破坏系统的完整性及可用性。 传播途径:经过存储介质或网络进行传播,在计算机系统之间传播,未经授权…

【Word与WPS如何冻结首行首列及窗口】

1.Word如何冻结首行首列及窗口 microsoft word 中锁定表头是一项实用的功能,可让您在滚动文档时保持表头可见。这在处理大型文档或包含大量数据的表格时非常有用。php小编柚子将为您详细介绍 word 锁定表头位置的方法,帮助您轻松掌握这项实用技巧。 1.…

认知杂谈43

今天分享 有人说的一段争议性的话 I I 年轻:潜力如海,挑战重重,绝非轻易挥霍的资本 I 咱都觉得年轻好像一张白纸,能在上面画出精彩人生呢。可实际上,年轻可不是啥简单的好事儿,它更像是个宝库&#xff0…

x264 编码器 AArch64汇编系列:DCT 变换相关汇编函数

DCT变换 在x264_dct_init函数中初始化具体的 dct 实现函数。 4x4 块DCT 变换 c 语言版本实现 4x4DCT 变换函数:sub4x4_dct。pixel_sub_wxh 函数: 这个函数的作用是从两个像素块中减去一个像素块,得到差分值,这些差分值将用于DCT变换。参数: diff:指向存储结果差分值的数组…

OHIF Viewers 项目介绍

项目结构 项目架构 │ ├── extensions │ ├── default # 默认功能 │ ├── cornerstone # 使用 Cornerstonejs 处理 2D/3D 图像 │ ├── cornerstone-dicom-sr # 结构化报告 (DICOM SR) │ ├── measurement-tracking # 测量追…

FTP服务器(服务名vsftpd,端口tcp/20和tcp/21)

目录 前言 配置文件 FTP服务器的配置 FTP服务的下载 配置防火墙 编辑配置文件 常用字段: 常用字段(匿名用户): 常用字段(系统用户): 指定系统用户访问: 编辑名单/etc/vsf…

leetcode_001_两数之和解析

两数之和解析 题目: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。你可以按任意顺序…

代码随想录(day8)—环形链表

题目 预备知识点: for和while的区别 while语句属于循环语句,在判断是,如果条件为true,则会继续判断,直到false为止,即会进行多次判断(除非一开始条件就是错的)。 if语句属于条件判…

【Material-UI】Slider中的 Continuous Sliders 与 Sizes 详解

文章目录 一、Slider 组件概述1. 组件介绍2. 使用场景 二、Continuous Sliders 的详解1. Continuous Sliders 的作用2. Continuous Sliders 的基本用法3. 禁用状态下的 Continuous Sliders4. Continuous Sliders 的实际应用5. Continuous Sliders 的优缺点 三、Slider 的尺寸控…

005-CircuitBreaker断路器-Resilience4J

文章目录 1 CircuitBreaker1.1 实现原理1.2 一句话 2 Resilience4J2.1 是什么2.2 能干嘛2.3 怎么用 3 熔断(CircuitBreaker)(服务熔断服务降级)3.1 断路器三大状态3.2断路器3大状态之前的转换3.3断路器所有配置参数参考3.4 熔断降级案例需求说明3.5 COUNT_BASED(计数的滑动窗口…

科讯档案管理系统存在SQL注入漏洞(0day)

漏洞描述 安徽科迅教育装备20年来来始终坚持智慧校园集成方案产品的开发和部署应用,我们有完善的智慧校园和数字校园建设方案,根据不同的学校不同的实际情况量身定做系统集成方案。产品主要是为了实现校园的智慧网络、智慧OA、智慧教学、智慧学习、数字医…

整理了100个Python精选库,建议收藏!

Python为啥这么火,这么多人学,就是因为简单好学,功能强大,整个社区非常活跃,资料很多。而且这语言涉及了方方面面,比如自动化测试,运维,爬虫,数据分析,机器学…

三. Spring Boot 当中的“容器功能” 和 “配置绑定” 的详细剖析(附+源代码流程)

三. Spring Boot 当中的“容器功能” 和 “配置绑定” 的详细剖析(附源代码流程) 文章目录 三. Spring Boot 当中的“容器功能” 和 “配置绑定” 的详细剖析(附源代码流程)1. Spring Boot 是继续支持了 Spring 当中的注解的1.2 Spring 当中的 Component,Controller…

Unraid 手动安装docker

目录 常用镜像链接一.安装示例1[firefox浏览器]:1.离线下载docker镜像2.将xxx.tar镜像数据加载到 Docker 中3.手动添加docker 二.安装示例2[等我有东西需要安装再回来补教程吧]:三.获取UDI和GID 常用镜像链接 特别版 emby 文件管理器 filebrowser内外穿透 zerotierNAS媒体库管…

JavaEE 第16节 线程安全的集合类

目录 前言 顺序表 队列 哈希表 1、Hashtable 2、ConcurrentHashMap(重点) 前言 本文章主要介绍在多线程环境下,如何线程安全的使用一些常用的集合类(顺序表和哈希表)。 顺序表 1、自己使用同步锁机制&#xff…

大数据技术

4v特点 volume(体量大) velocity(处理速度快) variety(数据类型多) value(价值密度低) 核心设计理念 并行化 规模经济 虚拟化 分布式系统满足需求 系统架构 大数据处理流程 结构化…

CocosCreator 3.8 IOS 热更新失败问题解决方案

CocosCreator 3.8 IOS 热更新失败问题解决方案 问题描述 Creator 版本: 3.8.0目标平台: ios 模拟器/真机重现方式:安卓构建版本生成的热更新包,上传到OSS,使用ios进行更新。 19:18:36 [ERROR]: [ERROR] file /Applica…

动态读取nacos中修改的项目配置文件

本项目用的还是springboot项目,咱们直接上代码 一:首先看下nacos中需要动态获取的属性 二:把需要动态读取的配置类中的属性整理一个实体类 mport lombok.Data; import org.springframework.boot.context.properties.ConfigurationPropert…

PyCharm汉化:简单一步到胃!PyCharm怎么设置中文简体

最近在弄python的项目 一起加油哦 步骤: PyCharm的汉化可以通过两种主要方法完成: 方法一:通过PyCharm内置的插件市场安装中文语言包 1. 打开PyCharm,点击File -> Settings(在Mac上是PyCharm -> Preferences…

[报错] nvcc -V 找不到

报错: nvcc : 无法将“nvcc”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,ObjectNotFound: (nvcc:String) [], CommandNotFoundExceptionFullyQualifiedErrorId : CommandNotFoundException 找不到 nvcc -V,试过…