「Linux系列」Shell echo命令/printf命令/test命令

文章目录

  • 一、Shell echo命令
  • 二、Shell printf命令
  • 三、Shell test命令
  • 四、相关链接

一、Shell echo命令

echo 是 Unix 和 Linux 系统中常用的一个命令,用于在终端输出字符串或变量的值。这个命令非常基础且常用,通常用于脚本编写、命令行操作等场合。

下面是一些 echo 命令的基本用法示例:

  1. 输出简单的字符串
echo "Hello, World!"

这会输出:

Hello, World!
  1. 输出变量的值
    假设你有一个变量 name,它的值为 “Alice”,你可以这样输出它的值:
name="Alice"
echo "My name is $name."

这会输出:

My name is Alice.
  1. 启用或禁用换行
    默认情况下,echo 命令在输出后会添加一个换行符。如果你想避免这个换行符,可以使用 -n 选项:
echo -n "This is without a newline."
echo "This is on a new line."

输出会是:

This is without a newline.This is on a new line.
  1. 启用或禁用解释反斜杠转义字符
    默认情况下,echo 会解释反斜杠转义字符(例如 \n 表示换行,\t 表示制表符)。如果你想避免这种解释,可以使用 -e 选项:
echo -e "This is a tab:\tAnd this is after the tab."

输出会是:

This is a tab:    And this is after the tab.
  1. 输出多行文本
    你可以直接在 echo 命令中写入多行文本,但每行都需要一个 echo 命令。如果你想用单个 echo 命令输出多行文本,可以使用转义字符 \n-e 选项:
echo -e "Line 1\nLine 2\nLine 3"

输出会是:

Line 1
Line 2
Line 3
  1. 输出带有颜色的文本
    在某些终端模拟器中,你可以使用 ANSI 转义序列来输出带有颜色的文本。虽然这不是 echo 命令的直接功能,但你可以结合 echo 和 ANSI 转义序列来实现:
echo -e "\033[31mThis is red text.\033[0m"

上述命令会输出红色的文本 “This is red text.”,然后重置为默认颜色。不同的系统和终端模拟器可能对 ANSI 转义序列的支持程度不同,因此这种颜色输出可能不是在所有环境中都有效。

二、Shell printf命令

printf 是 Unix 和 Linux 系统中另一个用于格式化输出的命令,它比 echo 命令提供了更多的功能和灵活性。printf 允许你使用格式说明符来控制输出的格式,这在编写脚本或生成特定格式的报告时非常有用。

下面是一些 printf 命令的基本用法示例:

  1. 基本用法

printf 的基本语法是:printf FORMAT STRING ARGUMENTS

printf "Hello, %s!\n" "World"

输出会是:

Hello, World!

在上面的例子中,%s 是一个格式说明符,表示一个字符串,而 "World" 是对应的参数。

  1. 格式化整数

你可以使用 %d 来格式化整数。

number=42
printf "The number is %d.\n" $number

输出会是:

The number is 42.
  1. 格式化浮点数

使用 %f 来格式化浮点数。

pi=3.14159
printf "Pi is approximately %.2f.\n" $pi

输出会是:

Pi is approximately 3.14.

%.2f 中,.2 表示保留两位小数。

  1. 格式化宽度和对齐

你可以指定字段的宽度和对齐方式。

name="Alice"
printf "%-10s is a nice person.\n" $name
printf "%10s is a nice person.\n" $name

输出会是:

Alice      is a nice person.Alice is a nice person.

%-10s 中,- 表示左对齐,10 表示字段宽度为 10 个字符。没有 - 则表示右对齐。

  1. 输出多行文本

你可以直接在 printf 命令中使用换行符 \n

printf "Line 1\nLine 2\nLine 3\n"

输出会是:

Line 1
Line 2
Line 3
  1. 输出带有颜色的文本

echo 一样,printf 也可以结合 ANSI 转义序列来输出带有颜色的文本。

printf "\033[31mThis is red text.\033[0m\n"

这将输出红色的文本 “This is red text.”,然后重置为默认颜色。

printf 提供了大量的格式说明符和选项,允许你以几乎任何你想要的方式格式化输出。你可以通过查阅相关的 man 页面(通过运行 man printf)来获取关于 printf 命令的更多详细信息和选项。

在编写脚本或进行复杂的文本处理时,printf 通常比 echo 更受欢迎,因为它提供了更强大和灵活的格式化功能。

三、Shell test命令

test 是 Unix 和 Linux 系统中用于条件测试的命令。它用于评估表达式并返回相应的退出状态,通常与 shell 脚本中的控制结构(如 if 语句)一起使用。test 命令的语法是:

test EXPRESSION

或者,更常见的是使用方括号 [ ] 来包围表达式,这是 test 命令的等价形式:

[ EXPRESSION ]

注意,方括号 [ ] 和表达式之间必须有空格。

如果 EXPRESSION 为真,则 test 命令返回退出状态 0;如果为假,则返回非零状态。

以下是一些常见的 test 表达式示例:

  1. 字符串比较
if [ "$string1" = "$string2" ]; thenecho "Strings are equal."
fiif [ -z "$string" ]; thenecho "String is empty."
fi
  • = 用于检查两个字符串是否相等。
  • -z 用于检查字符串是否为空。
  1. 整数比较
number1=5
number2=10if [ $number1 -lt $number2 ]; thenecho "$number1 is less than $number2."
fi
  • -lt 用于检查一个整数是否小于另一个整数。还有其他整数比较运算符,如 -gt(大于)、-eq(等于)、-ne(不等于)、-le(小于或等于)和 -ge(大于或等于)。
  1. 文件测试
file="/path/to/file"if [ -e $file ]; thenecho "File exists."
fiif [ -f $file ]; thenecho "File is a regular file."
fiif [ -d $file ]; thenecho "File is a directory."
fi
  • -e 检查文件或目录是否存在。
  • -f 检查是否是普通文件。
  • -d 检查是否是目录。

还有很多其他的文件测试选项,比如 -r(可读)、-w(可写)、-x(可执行)等。

  1. 复合条件

你可以使用逻辑运算符(如 !-a-o)来组合多个条件。

if [ -f $file1 ] && [ -f $file2 ]; thenecho "Both files exist."
fi

在上面的例子中,&& 表示逻辑与,只有当 $file1$file2 都存在时,才会执行 echo 语句。

现代 shell(如 bash、zsh)通常还支持更简洁的语法,例如使用 [[ ]] 而不是 [ ],它提供了更多的功能和更灵活的字符串处理。

当使用 test[ ] 时,总是要确保变量和操作符之间有空格,否则 shell 可能会解释错误。

四、相关链接

  1. Linux官网
  2. Linux常用命令
  3. CentOS官网下载地址
  4. 「Linux系列」Linux简介及常见的Linux系统
  5. 「Linux系列」Linux 系统启动过程
  6. 「Linux系列」Linux 系统目录结构/忘记密码解决方法
  7. 「Linux系列」Linux 远程登录/文件基本属性
  8. 「Linux系列」Linux 文件与目录管理
  9. 「Linux系列」Linux 如何学习用户和用户组管理
  10. 「Linux系列」聊聊Linux磁盘管理的事
  11. 「Linux系列」聊聊vi/vim的3种命令模式
  12. 「Linux系列」了解下Linux yum(包管理工具)

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

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

相关文章

UE5 GameMode C++函数 学习

已经尝试,确实能重启游戏 类描述符加了noplaceable过后即使是Actor也不能放到场景中了,关卡蓝图,GameMode,GameState这些就不能放场景中了 UFUNCTION(exec)

ruoyi-nbcio-plus基于vue3的flowable增加开始节点的表单绑定修改

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…

Android Studio Gradle设置查看全部task

如果你在 Android Studio 的 Gradle 窗口中看不到所有的任务,你可以尝试以下步骤来解决这个问题 android studio 版本: Android Studio Iguana | 2023.2.1 Build #AI-232.10227.8.2321.11479570, built on February 22, 2024 打开 Android Studio 的设置…

行业官网:律师行业官网解决方案和案例

hello,我是大千UI工厂,从此篇开始介绍各行业官网建设的解决方案 和经典案例,本期介绍律师行业,欢迎老铁们关注、评论、如有设计需求可以私信我们。 一、高大上律师官网有什么作用 高大上官网对律师行业的作用主要体现在以下几个…

eNSP学习——GVRP基础配置

目录 一、什么是GVRP 二、实验内容 三、实验目的 四、实验步骤 五、实验拓扑 六、实验编址 七、实验步骤 7.1、基本配置 7.2、配置GVRP单向注册 7.3、配置GVRP双向注册 7.4、配置GVRP的Fixed模式 7.5、配置GVRP的Forbidden模式 需要完整的配置命令大全的可以点击链…

传输线和串扰(一):串扰的叠加以及耦合的起源

串扰是六大信号完整性问题之一。它是将不需要的信号从一个网络传输到相邻网络,并且发生在每对网络之间。网络包括信号路径和返回路径,它连接系统中的一个或多个节点。我们通常将具有噪声源的网络称为主动网络或攻击网络。产生噪声的网络称为安静网络或受…

Linux mkswap命令教程:如何设置Linux交换区(附实例详解和注意事项)

Linux mkswap命令介绍 mkswap命令用于在设备或文件上设置Linux交换区。设备参数通常是磁盘分区(例如/dev/sdb7),但也可以是文件。Linux内核不查看分区ID,但许多安装脚本假定十六进制类型82(LINUX_SWAP)的分…

机器学习 - 训练模型

接着这一篇博客做进一步说明: 机器学习 - 选择模型 为了解决测试和预测之间的差距,可以通过更新 internal parameters, the weights set randomly use nn.Parameter() and bias set randomly use torch.randn(). Much of the time you won’t know what…

STM32之HAL开发——手动移植HAL库

HAL库移植步骤 创建目录 配置启动文件 在\Drivers\CMSIS\Device\ST\stm32f1xx\Source\Templates\ARM目录下,根据你的芯片型号选择对应的启动文件,不同容量大小的芯片,对应的启动文件也不一样。 注意:在HAL库中,不同容…

HTML网页文档和DOM结构介绍

HTML网页文档和DOM结构介绍 HTML网页文档 HTML,全称为超文本标记语言(Hypertext Markup Language),是用来描述并定义内容结构的标记语言,它是构建任何网页和网络应用的最基础的组成部分。HTML文档由一系列的元素构成…

[SAP ABAP] SE11查询数据库表中的数据

我们可以通过事务码SE11查询对应数据库表中的详细数据 本次查询使用的数据库表名为MARA,具体操作如下所示: ① 输入事务码SE11进入ABAP字典操作界面,在数据库表搜索框中输入目标表名MARA,并点击【显示】按钮 ② 进入到显示表界面&#xff0…

c++翁恺

1、面向对象 Data:杯子的属性 Opera:杯子提供的服务 老师上课: C:按流程执行 C:定一个教室,有很多学生,投影仪,灯,每个学生反映不一样。 这个场景有什么东西&#xff0c…

关于Rust的项目结构的笔记

层级 PackageCrateModulePath Package cargo的特性, 构建、测试、共享Crate 组成: 一个 Cargo.toml 文件, 描述了如何构建这些 Crates至少包含一个 crate最多只能包含一个 library crate可以包含任意个 binary crate cargo new demo-pro 会产生一个名为 demo-pro 的 Packa…

【自记录】VS2022编译OpenSSL1.0.2u

因为突然要编译一个老工程,老工程里面用到了OpenSSL 1.0.x。 于是官网下载了最后一个1.0.x版本1.0.2u。 1 下载安装Perl 去Perl官网下载即可。 使用vcpkg直接安装也可以,比前者更方便 vcpkg install perl #根据实际路径调整 set PATHD:\vcpkg\downloa…

【C语言】linux内核pci_set_master

一、__pci_set_master static void __pci_set_master(struct pci_dev *dev, bool enable) {u16 old_cmd, cmd;pci_read_config_word(dev, PCI_COMMAND, &old_cmd); // 读取设备的PCI命令寄存器的当前值if (enable)cmd old_cmd | PCI_COMMAND_MASTER; // 如果要启用总线…

力扣● 503.下一个更大元素II ● 42. 接雨水

503.下一个更大元素II 与496.下一个更大元素 I的不同是要循环地搜索元素的下一个更大的数。那么主要是对于遍历结束后,单调栈里面剩下的那些元素。 如果直接把两个数组拼接在一起,然后使用单调栈求下一个最大值就可以。 代码实现的话,不用直…

蓝桥杯练习——神秘咒语——axios

目标 完善 index.js 中的 TODO 部分,通过新增或者修改代码,完成以下目标: 点击钥匙 1 和钥匙 2 按钮时会通过 axios 发送请求,在发送请求时需要在请求头中添加 Authorization 字段携带 token,token 的值为 2b58f9a8-…

瑞_23种设计模式_状态模式

文章目录 1 状态模式(State Pattern)1.1 介绍1.2 概述1.3 状态模式的结构1.4 状态模式的优缺点1.5 状态模式的使用场景 2 案例一2.1 需求2.2 代码实现(未使用状态模式)2.3 代码实现(状态模式) 3 案例二3.1 …

[BT]BUUCTF刷题第4天(3.22)

第4天(共两题) Web [极客大挑战 2019]Upload 这是文件上传的题目,有一篇比较详细的有关文件上传的绕过方法文件上传漏洞详解(CTF篇) 首先直接上传带一句话木马的php文件,发现被拦截,提示不是图…

vue3 使用element-plus 如何再次封装table组件

• vue3 使用element-plus 如何再次封装table组件 • 基本步骤 • 创建子组件: • 默认数据配置 • 在需要使用自定义 Table 组件的地方引入并使用: 创建子组件: 创建一个新的 .vue 文件,例如子组件 baseTable.vue&#xff0c…