第三章、read、echo、printf命令
本篇博客主要目的是介绍 linux
中的输入输出方法,涉及到的指令为 read
, echo
, printf
。下面我们以几个通俗易懂的例子来讲以下。
1、read 命令
read
命令用于从标准输入中读取单行数据,然后赋值给指定的变量。当读到文件结束符时,exit code
为 1 ,否则为 0。exit code
在 ubuntu
中是 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