当前位置: 首页 > news >正文

linux shell 入门学习笔记10内置shell命令

bash基础的内置命令

  • echo
  • eval
  • exec
  • export
  • read
  • shift

echo命令
-n 不换行输出
-e 解析字符串中的特殊符号\n 换行
\r 回车
\t 制表符 四个空格
\b 退格

-n参数演示

xiao123@xiao123:~/Downloads$ echo 你真胖;echo 你还挺可爱;
你真胖
你还挺可爱
xiao123@xiao123:~/Downloads$ echo -n 你真胖;echo 你还挺可爱;
你真胖你还挺可爱
xiao123@xiao123:~/Downloads$ echo -n 你真胖;echo -n 你还挺可爱;
你真胖你还挺可爱xiao123@xiao123:~/Downloads$

-e参数演示

xiao123@xiao123:~/Downloads$ echo "我看你挺\n好的"
我看你挺\n好的
xiao123@xiao123:~/Downloads$ echo -e "我看你挺\n好的"
我看你挺
好的
xiao123@xiao123:~/Downloads$ printf "我看你挺\n好的"
我看你挺
好的xiao123@xiao123:~/Downloads$ printf "我看你挺\n好的\n"
我看你挺
好的
xiao123@xiao123:~/Downloads$
eval命令

执行多个命令

xiao123@xiao123:~/Downloads$ eval ls;cd /tmp
different.sh  make_vars.sh  nohup.out  special_test.sh  t1.sh  test.sh
xiao123@xiao123:/tmp$
exec命令

不创建子进程,执行后续命令,且执行完毕后,自动exit。

xiao123@xiao123:~/Downloads$ su - root
Password:
root@xiao123:~# exec date
2023年 02月 25日 星期六 10:45:02 CST
xiao123@xiao123:~/Downloads$
export命令

查找和设置环境变量的值

read 命令

用于接收标准输入或者其他文件描述符的输入,并且可以和用户进行交互。如果没有指定变量名,读取的数据将被自动赋值给特定的变量$REPLY。read每次调用读取一行。

-a	指定变量为数组
-r	反斜杠转义不会生效,意味着行末的’\’成为有效的字符,例如使 \n 成为有效字符而不是换行
-p	指定输出提示信息
-d	输入结束符,当输入的内容出现这个字符时,立即结束。一般情况下是以IFS为参数的间隔,但是通过-d自定义
-n	指定输入的字符长度
-t	指定读取值时等待的时间(秒),read命令会一直等待用户输入,时间到自动退出
-s	不显示输入的值,一般用于密码
IFS (Internal Field Separator)输入字段分隔符,Bash 会根据 IFS 中定义的字符来进行字符串拆分。

无选项单参数
不带参数,输入值都用空格隔开

xiao123@xiao123:~/Downloads$ read ARGS
11 22 33
xiao123@xiao123:~/Downloads$ echo ${ARGS}
11 22 33
xiao123@xiao123:~/Downloads$

无选项多参数
定义多个变量,变量和输入值都用空格隔开。

xiao123@xiao123:~/Downloads$ read ARG1 ARG2
11 22 33 44
xiao123@xiao123:~/Downloads$ echo ${ARG1} ${ARG2}
11 22 33 44
xiao123@xiao123:~/Downloads$ echo ${ARG1}
11
xiao123@xiao123:~/Downloads$ echo ${ARG2}
22 33 44
xiao123@xiao123:~/Downloads$

-a展示
将接收到的数据看作一个数组。使用IFS定义的分割符分割。

xiao123@xiao123:~/Downloads$ read -a ARGS
11 22 33 44 55
xiao123@xiao123:~/Downloads$ echo ${ARGS[*]}
11 22 33 44 55
xiao123@xiao123:~/Downloads$ echo ${ARGS[1]} ${ARGS[2]}
22 33
xiao123@xiao123:~/Downloads$

-r展示
字符串原样输出,不转义特殊字符。

xiao123@xiao123:~/Downloads$ read -r ARGS
\b\narg
xiao123@xiao123:~/Downloads$ echo ${ARGS}
\b\narg
xiao123@xiao123:~/Downloads$

-d展示
指定read命令的结束符。

xiao123@xiao123:~/Downloads$ read -d "-" ARG
arg1
arg2
arg3
-xiao123@xiao123:~/Downloads$ echo ${ARG}
arg1 arg2 arg3
xiao123@xiao123:~/Downloads$

-p展示
指定输出提示信息。

xiao123@xiao123:~/Downloads$ read -p "请输入一个字符:" ARG
请输入一个字符:a
xiao123@xiao123:~/Downloads$ echo ${ARG}
a
xiao123@xiao123:~/Downloads$

-t展示
指定输入的超时时间。单位:s

xiao123@xiao123:~/Downloads$ read -t 3 ARG
xiao123@xiao123:~/Downloads$

-s展示
不显示输入的字符。

xiao123@xiao123:~/Downloads$ read -s ARG
xiao123@xiao123:~/Downloads$ echo ${ARG}
1234567890
xiao123@xiao123:~/Downloads$

IFS展示

xiao123@xiao123:~/Downloads$ IFS='|'
xiao123@xiao123:~/Downloads$ read ARG1 ARG2 ARG3
1|2|3
xiao123@xiao123:~/Downloads$ echo ${ARG1}
1
xiao123@xiao123:~/Downloads$ echo ${ARG2}
2
xiao123@xiao123:~/Downloads$ echo ${ARG3}
3
xiao123@xiao123:~/Downloads$

IFS文件实验展示

xiao123@xiao123:~/Downloads$ cat ./file.csvcyberciti.biz|202.54.1.1|/home/httpd|ftpcbzuser
nixcraft.com|202.54.1.2|/home/httpd|ftpnixuser
xiao123@xiao123:~/Downloads$ cat ./ifstest.sh
file=./file.csvIFS='|'
printf "domain\t\tip\t\twebroot\t\tusername\n"
while read -r domain ip webroot username;
doprintf "%s\t%s\t%s\t%s\n" ${domain} ${ip} ${webroot} ${username}
done < "${file}"
xiao123@xiao123:~/Downloads$ bash ./ifstest.sh
domain          ip              webroot         usernamecyberciti.biz   202.54.1.1      /home/httpd     ftpcbzuser
nixcraft.com    202.54.1.2      /home/httpd     ftpnixuser
xiao123@xiao123:~/Downloads$
shift命令

移动命令行参数,默认命令shift=shift 1
shift例子1

xiao123@xiao123:~/Downloads$ cat shift.sh
echo ">>没有使用shift"
echo "输入的参数数量: $#"
echo '$1 $2 $3是:' $1, $2, $3
shift 2
echo ">>使用了shift2之后"
echo "剩余输入的参数数量:$#"
echo '$1 $2 $3是:' $1, $2, $3
xiao123@xiao123:~/Downloads$ bash ./shift.sh 11 22 33
>>没有使用shift
输入的参数数量: 3
$1 $2 $3是: 11, 22, 33
>>使用了shift2之后
剩余输入的参数数量:1
$1 $2 $3是: 33, ,
xiao123@xiao123:~/Downloads$

shift例子2

xiao123@xiao123:~/Downloads$ cat ./shift2.sh
until [ -z "$1" ]
doecho "$@"shift
done
xiao123@xiao123:~/Downloads$ bash ./shift2.sh 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
2 3 4 5 6 7 8 9
3 4 5 6 7 8 9
4 5 6 7 8 9
5 6 7 8 9
6 7 8 9
7 8 9
8 9
9
xiao123@xiao123:~/Downloads$

相关文章:

linux shell 入门学习笔记10内置shell命令

bash基础的内置命令 echoevalexecexportreadshift echo命令 -n 不换行输出 -e 解析字符串中的特殊符号\n 换行 \r 回车 \t 制表符 四个空格 \b 退格-n参数演示 xiao123xiao123:~/Downloads$ echo 你真胖;echo 你还挺可爱; 你真胖 你还挺可爱 xiao123xiao123:~/Downloads$ ec…...

[动手写操作系统]-02-开机运行系统并打印‘hello‘

文章目录 理解三个概念: 中断interrupts, CPU,寄存器registers 目标:让上一个静默的界面打印一些文本 我们将改进我们的无限循环引导扇区并在屏幕上打印一些东西。我们将为此提出中断。 我们尝试将"Hello"写到寄存器al, 字节0x0e写到ah (the higher part of ax),并…...

Delete `␍`eslint(prettier/prettier) in vscode 的解决方案

错误描述从 Github 仓库拉取代码&#xff0c;使用 vscode 打开&#xff0c;页面报错&#xff0c;每一行都爆红 &#xff08;如下图&#xff09;问题原因由于历史原因&#xff0c;windows下和linux下的文本文件的换行符不一致。Windows在换行的时候&#xff0c;使用了换行符CRLF…...

gof23 设计模式 各个模式代码demo

Gof23 设计模式&#xff0c;也叫Gang of Four&#xff08;GoF&#xff09;设计模式&#xff0c;是由四位设计模式大师&#xff08;Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides&#xff09;撰写的一本书——《设计模式&#xff1a;可复用面向对象软件的基础》所…...

0 初识Kotlin

0 基本介绍 相信很多开发者对Kotlin还是比较陌生的。 Kotlin是一种新型的编程语言&#xff0c;由JetBrains公司开发与设计&#xff0c;在2012年开源&#xff0c; 但没引起什么注意。 直到2017年google宣布将Kotlin作为Android开发的首选语言&#xff0c;Kotlin才开始大放异彩。…...

阿里云服务器部署SpringBoot+Vue项目(宝塔面板傻瓜式操作)

准备工作 一台服务器(我用的是阿里云)SpringBoot项目的jar包Vue项目的dist包 一、购买服务器 然后重置实例密码。 远程连接 登陆成功后安装宝塔面板 二、安装宝塔面板(无账号的注册一个账号) 地址&#xff1a;https://www.bt.cn/new/download.html 选择对应的镜像、不知道…...

27. 移除元素 26. 删除有序数组中的重复项 88. 合并两个有序数组(双指针遍历)

目录[27. 移除元素-力扣](https://leetcode.cn/problems/remove-element/description/?languageTagsc)[26. 删除有序数组中的重复项](https://leetcode.cn/problems/remove-duplicates-from-sorted-array/)[88. 合并两个有序数组](https://leetcode.cn/problems/merge-sorted-…...

什么时候用std::move()?

文章目录1. "是什么?"2. "有何用?"3. "什么时候用?"1. “是什么?” 虽然 std::move() 从技术角度上是一个函数 &#xff0c;但我认为它不是真正的函数。 它是编译器考虑表达式值的方式之间的转换器。 2. “有何用?” 首先要注意的是 std…...

建立做机器学习项目的范式

建立起做机器学习项目的范式&#xff0c;萃取出核心步骤&#xff0c;避免后面做项目没有明确的方向。 核心步骤&#xff1a; 1、明确自己想做什么样的项目&#xff0c;感兴趣的领域&#xff1b; 2、找到满足项目的数据集&#xff0c;开源的或者自建数据集&#xff1b; 数据…...

搭建k8s高可用集群—20230225

文章目录多master&#xff08;高可用&#xff09;介绍高可用集群使用技术介绍搭建高可用k8s集群步骤1. 准备环境-系统初始化2. 在所有master节点上部署keepalived3.1 安装相关包3.2 配置master节点3.3 部署haproxy错误解决3. 所有节点安装Docker/kubeadm/kubelet4. 部署Kuberne…...

Java 修饰符和多态

文章目录一、修饰符1. 权限修饰符2. 状态修饰符2.1 final2.2 static二、多态1. 成员访问特点2. 多态中的转型3. 多态案例一、修饰符 1. 权限修饰符 2. 状态修饰符 2.1 final final 关键字是最终的意思&#xff0c;可以修饰成员方法、成员变量及类。 //1.修饰成员变量 publi…...

学了一年Java的我,想转嵌入式了

秋名山码民的主页 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f64f;作者水平有限&#xff0c;如发现错误&#xff0c;还请私信或者评论区留言&#xff01; 目录前言为啥我想去转行&#xff1f;如果我现在选择转硬件&#xff0c;我…...

【Git】Git冲突与解决方法

目录 一、Git冲突如何产生&#xff1f; 二、解决Git冲突—手动修改冲突 【第一步】在 hot-fix 分支上增加如下代码&#xff0c;并且提交。 【第二步】在master 分支上同样的地方增加如下代码&#xff0c;并且提交。 【第三步】 我们现在在 master 分支上合并 hot-fix 分支&a…...

深度剖析数据在内存的存储

目录1.深度剖析数据在内存的存储(前言)数据类型介绍类型的基本归类整形在内存中的存储原码、反码、补码大小端练习总结1.深度剖析数据在内存的存储(前言) 今天就让我戴佳伟给大家讲一下数据在内存中的存储。之中有好多让我们深思的点&#xff0c;大家都拿起笔记本&#xff0c;…...

身高排序(绝对值大的排后面,小的排前面)

题目描述 小明今年升学到了小学一年级&#xff0c;来到新班级后&#xff0c;发现其他小朋友身高参差不齐&#xff0c;然后就想基于各小朋友和自己的身高差&#xff0c;对他们进行排序&#xff0c;请帮他实现排序 输入描述 第一行为正整数H和N 0 < H < 200 为小明的身高…...

高频前端面试题之HTML篇(三)

11. label的作用是什么&#xff1f;是怎么用的&#xff1f; label元素不会向用户呈现任何特殊效果&#xff0c;但是&#xff0c;它为鼠标用户改进了可用性&#xff0c;当我们在label元素内点击文本时就会触发此控件。也就是说&#xff0c;当用户选择该标签时&#xff0c;浏览器…...

使用DG备份恢复测试库的流程以及可能出现的问题

使用DG备份恢复测试库的流程以及可能出现的问题 评估数据量和服务器存储空间从DG备库备份全库和归档日志清理测试库环境测试库恢复备份(一)从DG主库备份控制文件测试库恢复备份(二)从DG备库备份最新的归档日志测试库恢复备份(三)需要单独备份数据文件的情况思路:从DG备库…...

Springboot注释解析

SpringBootApplication 标注主程序类 说明一个spring boot应用 SpringBootConfiguration 标注为spring boot配置类 EnableAutoConfiguration 开启自动配置功能 AutoConfigurationPackage 自动配置包 Import({Registrar.class}) 导入一个容器到组件 Registrar.class&#xf…...

C语言之通讯录(动态 存储文件版)

目录 前言 一.基本思路 二.代码的实现 2.1通讯录菜单 2.2通讯录的定义及功能 2.3函数实现 2.3.1初始化通讯录 2.3.2文件信息传递到通讯录里 2.3.3扩容通讯录 2.3.4增加联系人 2.3.5删除联系人 2.3.6查询联系人 2.3.7修改联系人 2.3.8打印通讯录 2.3.9信息保留在文…...

Linux 工具

文章目录一、软件包管理&#xff1a;yum1. 软件的生态环境2. yum 的使用3. yum 源及分类4. 在 centos 7.6 下更新 yum 源到国内镜像5. yum 命令二、编辑器&#xff1a;vim1. 命令模式2. 底行模式3. 插入模式4. 替换模式和视图模式5. vim 配置三、编译器&#xff1a;gcc/g1. C语…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...