第三章、read、echo、printf命令

本篇博客主要目的是介绍 linux 中的输入输出方法,涉及到的指令为 read, echo, printf。下面我们以几个通俗易懂的例子来讲以下。

1、read 命令

read命令用于从标准输入中读取单行数据,然后赋值给指定的变量。当读到文件结束符时,exit code为 1 ,否则为 0。exit codeubuntu 中是 ctrl + d

read 命令的一般格式为

read 变量1 [变量2 ...]

当变量个数和给定数据的个数相同时,依次对应赋值。
当变量个数少于给定数据个数,则从左到右对应赋值,最后一个变量被赋予剩余所有数据。
当变量个数多于给定数据个数,则依次赋值,没有数据与之对应的变量取空值。

参数说明

  • -p: 后面可以接提示信息;
  • -t: 后面跟秒数,定义输入字符的等待时间,超过等待时间后会自动忽略此命令。

实例:
当个变量

# 简单的 read
xyg@vivo-xyg:~$ read name  # 读取 name 
My name is xyg  # 标准输入
xyg@vivo-xyg:~$ echo ${name}  # 输出name数值
My name is xyg  # 标准输出

# 使用 -p 和 -t 的 read 命令
xyg@vivo-xyg:~$ read -p "please input your name:" -t 60 name  # 读入name的值,等待时间60秒
please input your name:my name is xyg  # 标准输入
xyg@vivo-xyg:~$ echo ${name}  # 输出 name 数值
my name is xyg  # 标准输出

多个变量:
变量个数和给定数据个数相同

xyg@vivo-xyg:/dev$ read x y z
Today is Monday  # 标准输入
xyg@vivo-xyg:/dev$ echo $z $x $y
Monday Today is  # 标准输出

变量个数大于给定数据个数

xyg@vivo-xyg:/dev$ read x y z
Today is  # 标准输入
xyg@vivo-xyg:/dev$ echo -e "$z\n$x\n$y"  
       # 空串,没有被赋值
Today  # 标准输出
is

变量个数小于给定数据个数

xyg@vivo-xyg:/dev$ read x y z
So Lucky! Today is Friday  # 标准输入
xyg@vivo-xyg:/dev$ echo -e "$z\n$x\n$y" 
Today is Friday  # 标准输出
So
Lucky!

2、echo 命令

echo用于输出字符串,命令格式为

echo STRING1 STRING2 STRING3 ...

backslash escapes: 反斜杠转义
Options:
-n do not append a newline
-e enable interpretation of the following backslash escapes
-E explicitly suppress interpretation of backslash escapes

震惊,转义字符居然无视单引号

(base) xyg@vivo-xyg:~/xyg/test$ echo -e '123\n${i}123123'
123
${i}123123
(base) xyg@vivo-xyg:~/xyg/test$ echo -e "123\n${i}123123"
123
5123123

显示普通字符串

echo "It's a big big big world"
echo It\'s a big big big world  # 注意这里使用了一个转义

显示转义字符串

echo "\"Hello World\""
echo \"Hello World\"

显示变量

name=xyg
echo "My name is ${name}" # 输出 My name is xyg

显示换行

echo -e "Hello World\n"
echo "acwing"

输出结果:

Hello World

acwing

显示不换行

echo -n 'xyg'  # 使用 -n 的方法
echo -e "xyg\c" # \c 使用转义字符suppress further output

显示结果定向至文件

echo "Hello World" > output.txt  # 将内容以覆盖的方式输出到output.txt中

原样输出字符串,不进行转义或取变量(用单引号)

name=acwing
echo '$name\"'

输出结果:

$name\"

显示命令的执行结果

echo `date`

输出结果:

2022年 07月 04日 星期一 20:18:11 CST

3、printf 命令

printf命令用于格式化输出,类似于C/C++中的printf函数。

默认不会在字符串末尾添加换行符。

命令格式:

printf format-string [arguments...]

这个 format 格式也和 C/C++一样
用法实例
脚本内容:

printf "%10d.\n" 123  # 占10位,右对齐
printf "%-10.2f.\n" 123  # 占10位,保留两位小数,左对齐
printf "My name is %s\n" "xyg"  # 格式化输出字符串
printf "%d * %d = %d\n" 2 3 `expr 2 \* 3`

输出结果:

       123.
123.00    .
My name is xyg
2 * 3 = 6

4、参考文献

推荐报名 Y 总的 linux 基础课

posted @ 2022-07-04 20:30  lucky_light  阅读(138)  评论(0编辑  收藏  举报