Shell编程-Printf

时间:2020-02-23 14:45:08  来源:igfitidea点击:

在本教程中,我们将学习Shell编程中的printf命令。

关于printf

printf命令用于打印预格式化的输出。
它类似于C编程语言的printf()函数。

我们可以说printf是echo命令的后继。

printf语法

printf <format> <arguments>

其中,format是参数中使用的格式字符串。

格式是可选的,可以省略。

示例1

在以下示例中,我们将打印用户输入的名称和分数。

#!/bin/sh

# take user name
printf "Enter name: "
read name

# take user score
printf "Enter score: "
read score

# display result
echo "---Result---"
printf "Name: %s\n" "$name"
printf "Score: %d\n" "$score"
$sh example01.sh 
Enter name: theitroad
Enter score: 8
---Result--
Name: theitroad
Score: 8

其中,\ n打印新行,即,将光标移至下一行。

%s是字符串的格式。
%d是整数格式。

格式

以下是我们可用于printf命令中的参数的格式。

格式说明
%d用于带符号的十进制数字
%i用于带符号的十进制数字
%u用于无符号十进制数字
%o用于无符号八进制数
%x用于带小写字母(a-f)的无符号十六进制数字
%X用于带大写字母(A-F)的无符号十六进制数字
%f用于浮点数
%s用于字符串
%%用于百分比%符号

修饰符

我们使用带有格式的修饰符来修改输出。

格式说明
N这指定要输出的字段的宽度。
*这是宽度的占位符。
-在字段中将输出左对齐。 (默认:右对齐)
0填充结果前导0。
+在正数前加+号,在负数前加-号。

示例2

在下面的示例中,我们将以十进制,八进制和十六进制格式打印100。

#!/bin/sh

num=100

# output in decimal, octal, hex form
printf "Decimal: %d\n" "$num"
printf "Octal: %o\n" "$num"
printf "Hex: %X\n" "$num"
$sh example02.sh 
Decimal: 100
Octal: 144
Hex: 64

如果要为八进制数字添加前导0,为十六进制添加0x,则将添加"#",如下所示。

#!/bin/sh

num=100

# output in decimal, octal, hex form
printf "Decimal: %d\n" "$num"
printf "Octal: %#o\n" "$num"
printf "Hex: %#X\n" "$num"
$sh example02-1.sh 
Decimal: 100
Octal: 0144
Hex: 0X64

示例3

在下面的示例中,我们将从用户处获得两个整数并将它们相除并显示5个小数位。

#!/bin/sh

# get the first number
printf "Enter first integer number: "
read a

# get the second number
printf "Enter second integer number: "
read b

# if b is 0
if [ $b == 0 ]
then
  printf "Division by 0 not allowed.\n"
  exit	# exit the script
fi

# perform division
result=`expr "$a/$b" | bc -l`

printf "%d/%d = %.5f\n" "$a" "$b" "$result"
$sh example03.sh 
Enter first integer number: 5
Enter second integer number: 2
5/2 = 2.50000

$sh example03.sh 
Enter first integer number: 5
Enter second integer number: 0
Division by 0 not allowed.

在上面的代码中,我们首先从用户那里获取a和b的值。

然后,我们正在检查b的值。
如果b为0,那么我们将输出一条错误消息,并使用"退出"命令退出脚本。
我们正在使用if语句执行此检查。

然后,我们将a除以b,然后将bc命令与-l方法一起使用以获取十进制值,并将结果存储在result变量中。

然后,我们使用printf命令打印结果。

格式为"%d /%d =%.5f \ n",其中,第一个%d用于a,第二个'%d'用于b。

%.5f用于结果。
注意! .5表示我们希望结果中小数点后5位。

示例4

在下面的示例中,我们将a除以b,然后让用户确定结果的小数位数。

#!/bin/sh

# get the first number
printf "Enter first integer number: "
read a

# get the second number
printf "Enter second integer number: "
read b

# get the decimal place
printf "Enter decimal place for the result: "
read d

# if b is 0
if [ $b == 0 ]
then
  printf "Division by 0 not allowed.\n"
  exit	# exit the script
fi

# perform division
result=`expr "$a/$b" | bc -l`

printf "%d/%d = %.*f\n" "$a" "$b" "$d" "$result"
$sh example04.sh 
Enter first integer number: 5
Enter second integer number: 2
Enter decimal place for the result: 1
5/2 = 2.5

$sh example04.sh 
Enter first integer number: 5
Enter second integer number: 2
Enter decimal place for the result: 3
5/2 = 2.500

$sh example04.sh 
Enter first integer number: 5
Enter second integer number: 2
Enter decimal place for the result: 0
5/2 = 2

在上面的脚本中,格式字符串中包含%.* f
*替换为$d,它告诉我们最终结果中的小数位数。