Shell学习(4/6) printf 命令-test 命令

七、printf 命令

printf 是一个功能强大的命令,用于格式化输出。它类似于 C 语言中的 printf 函数,允许开发者按照指定的格式打印文本和变量。

语法

printf FORMAT [ARGUMENT]...
  • FORMAT: 一个字符串,指定输出的格式。
  • ARGUMENT: 可选的参数,用于替换 FORMAT 中的占位符。

常用占位符

占位符描述
%s输出字符串
%d输出整数(十进制)
%f输出浮点数
%x输出整数(十六进制,字母小写)
%X输出整数(十六进制,字母大写)
%o输出整数(八进制)
%c输出字符,对应 ASCII 值
%e输出浮点数(科学计数法,小写 e)
%E输出浮点数(科学计数法,大写 E)
%%输出一个 % 符号

重要特性

  1. 格式字符串不需要换行
    • 默认情况下,printf 不会在末尾自动添加换行符。
    • 如果需要换行,请在格式字符串中显式加入 \n
  2. 支持字符串格式化
    • 可以通过占位符和格式说明符控制输出格式,例如宽度、对齐、精度等。
  3. 精度控制
    • 可以指定输出的宽度和精度,例如 %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%

注意事项

  1. echo 的对比
    • echo 适合简单输出,但在格式化和控制输出方面不如 printf
    • printf 的功能更强大,尤其适合需要格式化输出的场景。
  2. 参数过多或过少
    • 如果格式字符串中占位符的数量多于参数数量,printf 会重复使用参数,或者输出空。
    • 如果参数多于占位符数量,printf 会忽略多余参数。
  3. 不支持动态格式
    • printf 的格式字符串必须是静态的,不能通过变量动态生成格式。

八、Shell test 命令

test 是 Shell 脚本中用于条件测试的命令,通常用于判断文件属性、字符串比较和数值比较。它可以与 ifwhile 等语句结合使用,进行条件判断。

基本语法

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 脚本中用于条件判断的重要工具,掌握其用法有助于编写更复杂的脚本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值