七、printf 命令
printf
是一个功能强大的命令,用于格式化输出。它类似于 C 语言中的 printf
函数,允许开发者按照指定的格式打印文本和变量。
语法
printf FORMAT [ARGUMENT]...
- FORMAT: 一个字符串,指定输出的格式。
- ARGUMENT: 可选的参数,用于替换 FORMAT 中的占位符。
常用占位符
占位符 | 描述 |
---|---|
%s | 输出字符串 |
%d | 输出整数(十进制) |
%f | 输出浮点数 |
%x | 输出整数(十六进制,字母小写) |
%X | 输出整数(十六进制,字母大写) |
%o | 输出整数(八进制) |
%c | 输出字符,对应 ASCII 值 |
%e | 输出浮点数(科学计数法,小写 e) |
%E | 输出浮点数(科学计数法,大写 E) |
%% | 输出一个 % 符号 |
重要特性
- 格式字符串不需要换行:
- 默认情况下,
printf
不会在末尾自动添加换行符。 - 如果需要换行,请在格式字符串中显式加入
\n
。
- 默认情况下,
- 支持字符串格式化:
- 可以通过占位符和格式说明符控制输出格式,例如宽度、对齐、精度等。
- 精度控制:
- 可以指定输出的宽度和精度,例如
%10.2f
表示宽度为 10,总共保留 2 位小数。
- 可以指定输出的宽度和精度,例如
示例
1. 打印简单字符串
printf "Hello, Shell!\n"
输出:
Hello, Shell!
2. 使用占位符
printf "Name: %s, Age: %d\n" "Alice" 30
输出:
Name: Alice, Age: 30
3. 控制输出宽度
printf "|%10s|\n" "Shell"
输出:
| Shell|
4. 控制浮点数精度
printf "%.2f\n" 3.14159
输出:
3.14
5. 使用多个参数
printf "%s\n" "Line1" "Line2" "Line3"
输出:
Line1
Line2
Line3
6. 打印特殊字符
printf "Tab\tNewline\n"
输出:
Tab Newline
7. 打印百分号
printf "Progress: 50%%\n"
输出:
Progress: 50%
注意事项
- 与
echo
的对比:echo
适合简单输出,但在格式化和控制输出方面不如printf
。printf
的功能更强大,尤其适合需要格式化输出的场景。
- 参数过多或过少:
- 如果格式字符串中占位符的数量多于参数数量,
printf
会重复使用参数,或者输出空。 - 如果参数多于占位符数量,
printf
会忽略多余参数。
- 如果格式字符串中占位符的数量多于参数数量,
- 不支持动态格式:
printf
的格式字符串必须是静态的,不能通过变量动态生成格式。
八、Shell test 命令
test
是 Shell 脚本中用于条件测试的命令,通常用于判断文件属性、字符串比较和数值比较。它可以与 if
、while
等语句结合使用,进行条件判断。
基本语法
test EXPRESSION
或
[ EXPRESSION ]
[
是 test
的另一种形式,注意 [
后和 ]
前必须有空格。
常见用法
1. 文件测试
-e FILE
:文件存在。-f FILE
:是普通文件。-d FILE
:是目录。-r FILE
:文件可读。-w FILE
:文件可写。-x FILE
:文件可执行。-s FILE
:文件大小大于 0。-L FILE
:是符号链接。
示例:
if [ -f /mnt/e/Android-NDK-C/sh/test.txt ]; then
echo "文件存在且是普通文件"
fi
2. 字符串测试
-z STRING
:字符串长度为 0。-n STRING
:字符串长度不为 0。STRING1 = STRING2
:字符串相等。STRING1 != STRING2
:字符串不等。
示例:
if [ -z "$var" ]; then
echo "变量为空"
fi
var="XAYE"
if [ -n "$var" ]; then
echo "变量不为空"
fi
3. 数值比较
INT1 -eq INT2
:等于。INT1 -ne INT2
:不等于。INT1 -gt INT2
:大于。INT1 -ge INT2
:大于等于。INT1 -lt INT2
:小于。INT1 -le INT2
:小于等于。
示例:
a=110
b=100
if [ "$a" -gt "$b" ]; then
echo "a 大于 b"
fi
4. 逻辑操作
! EXPRESSION
:逻辑非。EXPRESSION1 -a EXPRESSION2
:逻辑与。EXPRESSION1 -o EXPRESSION2
:逻辑或。
其优先级为:
!
最高,-a
次之,-o
最低。a 就是 and 类似于 Java 的 &&,o 就是 or 类似于 Java 的 ||
示例:
a=8
if [ "$a" -gt 0 -a "$a" -lt 10 ]; then
echo "a 在 0 到 10 之间"
fi
a=8
if [[ "$a" -gt 0 && "$a" -lt 10 ]]; then
echo "a 在 0 到 10 之间"
fi
注意事项
- 空格:
[
后和]
前必须有空格。 - 引号:变量引用时建议加双引号,避免空值或空格问题。
- 逻辑操作:
-a
和-o
在[ ]
中使用,&&
和||
在[[ ]]
中使用。
总结
test
命令是 Shell 脚本中用于条件判断的重要工具,掌握其用法有助于编写更复杂的脚本。