shell 脚本-06输出命令(echo 和 printf)

shell 脚本-输出命令(echo 与 printf)

用于字符串的输出

echo 命令

基本输出

使用 echo string 命令输入 string 内容, 内容中的转义字符, 使用变量等规则参考字符串规则

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

运行结果:

Hello World
“Hello World”
Hello World
Hello World"

使用转义

使用参数 -e 可以使 echo 命令启用转义
例如: 可以使用转义进行换行或不换行操作

# 换行
echo -e "Line 1\nLine 2"
# 不换行
echo -e "Hello \c"
echo "World"

运行结果:

Line 1
Line 2
Hello World

##$ 输出到文件

使用 echo string > file 可以将字符串内容输入到文件中, file 为文件路径, 当路径表示的文件不存在时, 会自动生成文件, 当 file 为相对路径时, 相对的时执行命令的环境而不是文件所在的环境

例如: 在 /a 目录下执行 /b/test.sh, test.sh 内容为 echo "Hello World" > ./log.txt, 执行后会生成文件 /a/log.txt 而不是 /b/log.txt

echo "Hello World" > ./log.txt

如果 file 已经存在, 输出内容将直接覆盖 file 内容

显示命令执行结果

使用 反引号 ` 包裹可以在 echo 中执行一些命令

echo "当前时间: `date`"
echo "1 + 2 = `expr 1 + 2`"

运行结果:

当前时间: 2022年 2月23日 星期三 15时53分25秒 CST
1 + 2 = 3

printf 命令

printfecho 都是对字符串进行输出的命令, printecho 的不同点:

  1. printf 可以对字符串进行格式化, 定制字符串的宽度, 对齐等
  2. 默认的 printf 不会像 echo 自动添加换行符,我们可以手动添加 \n
  3. printfPOSIX 标准所定义,因此使用 printf 的脚本比使用 echo 移植性好

直接输入

如果直接使用 printf string 会直接输出 string 内容

printf "Hello World\n"

运行结果:

Hello World

格式化输出

如果需要格式化输出, 则需要使用 printf format-string [arguments...], format-string: 为格式控制字符串, arguments: 为参数列表;

printf "%s %d\n" "Hello World" 123

格式控制字符串

控制符 说明 用法
%s 输出一个字符串 %s 或 %-ns, - 表示左对齐,没有则表示右对齐, n 表示以n个字符宽显示, 如果不足则自动以空格填充,超过也会将内容全部显示出来。
%c 输出一个字符 %c, 如果对应参数是字符串, 则显示第一个字符
%d 输出一个整型 %d, 如果对应参数应该是整型或整型字符串, 否则报错, 空字符串转化为 0
%f 以小数形式输出 %f 或 %-n.mf, - 表示左对齐, n 表示显示长度, m 表示小数的位数
printf "%-10s %-10s\n" "Hello" "World" # 每个字符串10个字符宽度
printf "%c\n" "c"
printf "%c\n" "chart" # 只会输出 chart 的第一个字符 c
printf "%d\n" 123
printf "%d\n" "123"
printf "%d\n" "a" # 报错
printf "%f\n" 123
printf "%-10.2f %-10.2f\n" '123' 123 # 每个数字10个字符宽度并保留两位小数

运行结果:

Hello      World     
c
c
123
123
xxxxxxx printf: a: invalid number
0
123.000000
123.00     123.00

当参数少于格式控制符

当对应位置没有参数是, 那么就用 NULL 代替

printf "%s NULL 转字符串为 \"%s\" %c %d %f\n" "empty-test: "

运行结果:

empty-test:    0 0.000000

NULL 转化为字符串或字符显示是空字符, 转化为数字显示为 0

当参数多于格式控制符

如果参数多于格式控制符指定时, 多于参数任会按照既定格式输出, 剩余参数不够, 按照参数少于格式控制符的规则, 既为 NULL

printf "%s %s %c %d %f\n" "str1" "str2" "c" 123 123 "string"

运行结果:

str1 str2 c 123 123.000000
string 0 0.000000

上面代码相当于

printf "%s %s %c %d %f\n" "str1" "str2" "c" 123 123
printf "%s %s %c %d %f\n" "string"

你可能感兴趣的:(shell,脚本语言,shell)