欢迎光临
我们一直在努力

shell命令“三板斧”:read、printf、test

今天深入学习了 Shell 脚本中三个核心命令:read、printf 和 test。它们是让脚本从“能跑”到“好用”的关键,我把课堂笔记和实战心得整理成这篇博客,和大家一起巩固学习。

一、read:让脚本和用户“聊起来”

1.read 是实现脚本交互的基础,它能读取用户输入并保存到变量中。

基础语法:read [-options] [variables]

• options表示选项,如下表所示;variables表示用来存储数据的变量,可以有一个,也可以有多个。

• options和variables都是可选的,如果没有提供变量名,那么读取的数据将存放到环境变量 REPLY 中。

2.read命令支持的选项

选项 说明
-a array 把读取的数据赋值给数组array,从下标0开始。
-d delimiter 用字符串delimiter指定读取结束的位置,而不是一个换行符(读取到的数据不包括delimiter)。
-e 在获取用户输入的时候,对功能键进行编码转换,不会直接显示g功能键对应的字符。
-n num 读取num个字符,而不是整行字。
-p prompt 显示提示信息,提示内容为prompt。
-r 原样读取(Raw mode),不把反斜杠字符解释为转义字符。
-s 静默模式(Slient mode),不会在屏幕上显示输入内容。当输入密码和其他确认信息的时候,这是很有必要的。
-t seconds 设置超时时间,单位为秒。如果用户没有在指定时间内输入完成,那么read将会返回一个非0的状态,表示读取失效。
-u fd 使用文件描述fd作为输入源,而不是标准输入,类似于重定向。

课堂实战:超时密码验证
#!/bin/bash
if read -t 20 -sp "Enter password in 20 seconds(once): " pass1 && printf "\\n" &&
   read -t 20 -sp "Enter password in 20 seconds(again): " pass2 && printf "\\n"; then
    if [ "$pass1" == "$pass2" ]; then
        echo "Valid password"
    else
        echo "Invalid password"
    fi
else
    echo -e "\\nInput timeout!"
fi
这个例子里,&& 串联了多个命令,只要其中一个失败,后续命令就不会执行,非常适合做条件判断。

 

二、printf:让输出更“规整”

比起 echo,printf 支持丰富的格式化功能,是生成清晰报表和日志的首选。

基础语法
printf format-string [arguments…]
核心格式化规则

• %s:输出字符串

• %d:输出整数

• %f:输出浮点数(%4.2f 表示保留2位小数)

• %-10s:左对齐并占用10字符宽度,不足用空格填充

课堂实战:生成人员信息表
printf "%-10s %-8s %-4s\\n" 姓名 性别 体重kg
printf "%-10s %-8s %-4.2f\\n" 郭靖 男 66.1234
printf "%-10s %-8s %-4.2f\\n" 杨过 男 48.6543
printf "%-10s %-8s %-4.2f\\n" 郭芙 女 47.9876
执行后会输出一个对齐工整的表格,可读性比 echo 高很多。

 

三、test:脚本的“逻辑大脑”

test 命令(或等价的 [ ] 语法)用来判断条件是否成立,支持数值、字符串和文件三类测试。

1. 数值测试
参数 说明 
-eq 等于为真 
-ne 不等于为真 
-gt 大于为真 
-ge 大于等于为真 
-lt 小于为真 
-le 小于等于为真 

2. 字符串测试

• =:字符串相等

• !=:字符串不等

• -z:字符串为空

• -n:字符串非空

3. 文件测试

• -e:文件存在

• -f:普通文件

• -d:目录

• -r/-w/-x:文件可读/可写/可执行

课堂实战:文件存在性判断
cd /bin
if test -e ./bash; then
    echo "文件已存在!"
else
    echo "文件不存在!"
fi
还可以用逻辑操作符 -a(与)、-o(或)、!(非)来组合条件,比如:
if test -e ./notFile -o -e ./bash; then
    echo "至少有一个文件存在!"
fi
总结:脚本进阶的“三板斧”

这三个命令各有侧重,组合起来能让你的脚本更强大:

• read 负责输入交互,让脚本更懂用户

• printf 负责输出美化,让结果更易阅读

• test 负责逻辑判断,让脚本更会思考

赞(0)
未经允许不得转载:171主机测评 » shell命令“三板斧”:read、printf、test
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址