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,它告诉我们最终结果中的小数位数。