命令简介

echo 是一个非常基本且常用的命令,它用于在终端或者文件中输出字符串。虽然功能简单,但是 echo 命令在 Shell 脚本编程中扮演着重要角色,可以用于输出信息、设置变量值、进行字符串操作等。此外,echo 还可以结合其他命令和特殊字符使用,实现更加强大的功能。

命令格式

echo 命令的基本语法格式如下:

1
echo [options] [string]

其中:

  • options: 用于指定 echo 命令的选项,例如 -n 去掉自动换行。
  • string: 需要输出的字符串。

参数说明

echo 命令提供了多个可选参数,下表列出了常用的参数及其说明:

选项 功能 备注
-n 不输出结尾的换行符 -
-e “\a” 发出警告音 -
-e “\b” 删除前面的一个字符 -
-e “\c” 结尾不加换行符 -
-e “\f” 换行,光标扔停留在原来的坐标位置 -
-e “\n” 换行,光标移至行首 -
-e “\r” 光标移至行首,但不换行 -
-E 禁止反斜杠转移,与-e参数功能相反 -
—version 查看版本信息 -
–help 查看帮助信息 -

命令实例

基本用法

1.输出字符串

1
2
leazhi@leazhi-ubuntu2310:~$ echo "Hello, World!"
Hello, World!

2.输出环境变量的值

1
2
leazhi@leazhi-ubuntu2310:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin:/usr/local/apache2/bin:/usr/local/jre1.8.0_391/bin:/usr/local/apache2/bin:/usr/local/jre1.8.0_391/bin

3.输出命令执行结果

1
2
leazhi@leazhi-ubuntu2310:~$ echo "Current directory: $(pwd)"
Current directory: /home/leazhi

不换行输出

1.不换行输出 “Hello”

1
2
leazhi@leazhi-ubuntu2310:~$ echo -n "Hello" 
Helloleazhi@leazhi-ubuntu2310:~$

使用反斜线转义

1.输出两行文本

1
2
3
leazhi@leazhi-ubuntu2310:~$ echo -e "Line 1\nLine 2"
Line 1
Line 2

2.使用 ANSI 转义码输出红色文本

1
echo -e "\033[31mRed Text\033[0m"

3.搭配转义符一起使用,输出纯字符串内容:

1
2
[root@linuxcool ~]# echo \$PATH
$PATH

设置变量值

1
2
3
name="John Doe"
echo $name # 输出变量值
echo "Hello, $name" # 插入变量值到字符串中

文件操作

1.将字符串写入文件

1
echo "Content" > file.txt

2.将字符串追加到文件

1
echo "More content" >> file.txt

3.逐行读取文件内容并输出

1
cat file.txt | while read line; do echo $line; done 

4.删除字符串中某个字符,随后将内容输出:

1
2
[root@linuxcool ~]# echo -e "123\b456" 
12456

进阶用法

1.执行算术运算并输出结果

1
2
leazhi@leazhi-ubuntu2310:~$ echo $(( 2 + 3 ))
5

2.搭配反引号执行命令,并将执行结果输出:

1
2
leazhi@leazhi-ubuntu2310:~$ echo `date`
Sun Mar 10 05:48:50 PM CST 2024

3.搭配 $? 返回上一条命令执行的状态

1
2
leazhi@leazhi-ubuntu2310:~$ echo $?
0

4.替换字符串中的模式

1
echo "${string//pattern/replacement}"  

5.输出字符串的子串

1
echo "${string:position:length}"

通过上述实例,你可以看到 echo 命令在输出字符串、设置变量值、文件操作以及与其他命令结合使用时的灵活应用。虽然 echo 命令功能简单,但在 Shell 脚本编程中扮演着重要角色,可以帮助你完成各种任务。

扩展用法

输出颜色文本

关于 echo 命令中颜色配置和字体粗细配置参数的表如下:

参数 说明 备注
\e[0m 重置所有属性,即取消颜色和字体粗细的设置 -
\e[1m 设置粗体字 -
\e[2m 设置淡色(不常用) -
\e[3m 设置斜体字(不常用) -
\e[4m 设置下划线 -
\e[7m 反白显示(前景色和背景色交换) -
\e[8m 隐藏文本(不可见) -
\e[30m 设置前景色为黑色 -
\e[31m 设置前景色为红色 -
\e[32m 设置前景色为绿色 -
\e[33m 设置前景色为黄色 -
\e[34m 设置前景色为蓝色 -
\e[35m 设置前景色为洋红色(紫色) -
\e[36m 设置前景色为青色 -
\e[37m 设置前景色为白色 -
\e[40m 设置背景色为黑色 -
\e[41m 设置背景色为红色 -
\e[42m 设置背景色为绿色 -
\e[43m 设置背景色为黄色 -
\e[44m 设置背景色为蓝色 -
\e[45m 设置背景色为洋红色(紫色) -
\e[46m 设置背景色为青色 -
\e[47m 设置背景色为白色 -

请注意:

  • 这些参数在终端中使用时,需要使用 \e\033 这样的转义序列来表示 ANSI 转义码,例如 \e[31m 表示将字体颜色设置为红色。而 \e[0m 则用于重置所有属性,包括颜色和字体粗细。

  • 如果要复用参数,比如设置字体为粗体,字体颜色为红色,则要先将粗体代码写在字体颜色的前面,同时粗体代码中的 m 字母要去掉,并且粗体代码和颜色代码中间要以 ; 分割,而后面的颜色代码要不再需要 \e[ 。最终的参数应该写成这样 \033[1;31m

使用 ANSI 转义码,你可以在终端输出彩色文本。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
echo -e "\033[30m 黑色字 \033[0m"
echo -e "\033[31m 红色字 \033[0m"
echo -e "\033[32m 绿色字 \033[0m"
echo -e "\033[33m 黄色字 \033[0m"
echo -e "\033[34m 蓝色字 \033[0m"
echo -e "\033[35m 紫色字 \033[0m"
echo -e "\033[36m 天蓝字 \033[0m"
echo -e "\033[37m 白色字 \033[0m"

echo -e "\033[40;37m 黑底白字 \033[0m"
echo -e "\033[41;37m 红底白字 \033[0m"
echo -e "\033[42;37m 绿底白字 \033[0m"
echo -e "\033[43;37m 黄底白字 \033[0m"
echo -e "\033[44;37m 蓝底白字 \033[0m"
echo -e "\033[45;37m 紫底白字 \033[0m"
echo -e "\033[46;37m 天蓝底白字 \033[0m"
echo -e "\033[47;30m 白底黑字 \033[0m"

echo -e "\033[1;31m 红色粗体字 \033[0m"

read 搭配 echo 命令输出带颜色的文本:

1
read -p "$(echo -e "\033[31mEnter your name: \033[0m")" name && echo -e "\033[33mHello,${name}. Nice to meet you! \033[0m"

输出进度条

使用循环和特殊字符,你可以创建一个简单的进度条。例如:

1
2
3
4
5
6
7
8
9
count=0
total=100
while [ $count -lt $total ]; do
count=$((count+1))
percent=$((count * 100 / total))
echo -ne "\r[###########] $percent%"
sleep 0.1
done
echo ""

输出对齐文本

使用格式化字符串,你可以输出对齐的文本。例如:

1
2
3
printf "%-10s %-10s %-10s\n" "Name" "Age" "City"
printf "%-10s %-10d %-10s\n" "John" 25 "New York"
printf "%-10s %-10d %-10s\n" "Jane" 30 "London"

总之,echo 命令虽然简单,但它在 Shell 脚本编程中扮演着重要角色,并且有很多扩展用法,值得你深入学习和掌握。