shell 读取一个字符

应用环境linux sh

在嵌入式linux中读取一个字符,开始想用read来实现的,但是发现read输入需要回车才能结束,查了下read用法,

read: 用法: read [-ers] [-a 数组] [-d 分隔符] [-i 缓冲区文字] [-n 读取字符数] [-N 读取字符数] [-p 提示符] [-t 超时] [-u 文件描述符] [名称 ...]

,read -n可以解决,但是问题来,read加了参数貌似不支持sh终端,只能在bash中使用,只能换其他的方法了,方法如下


test.sh


#!/bin/sh

echo "Press 'y' or 'Y' to enter test mode:"

getchar()
{
    k=`stty -g` #获取当前stty设置
    stty -echo #禁用echo
    stty raw
    stty min 0 time 1 #设置超时时间为1/10秒
    dd if=/dev/tty bs=1 count=1 2>/dev/null  #读取一个字符
    stty -raw
    stty echo
    stty $k
}
 

Ecounter=0
date #测试开始时间
while [ 1 ]; do
    if [ $Ecounter -ge 30 ]; then break; fi
    Ecounter=`expr $Ecounter + 1`;
    char=`getchar`
    if [ "$char" = 'y' ] || [ "$char" = 'Y' ] ; then
        echo "char=$char"
        break;
    fi
done
date #测试结束时间

测试结果

./test.sh
Press 'y' or 'Y' to enter test mode:
2016年 09月 18日 星期日 11:26:08 CST
2016年 09月 18日 星期日 11:26:11 CST
lqj@lqj:~/socket$ ./test.sh
Press 'y' or 'Y' to enter test mode:
2016年 09月 18日 星期日 11:26:13 CST
ychar=y
2016年 09月 18日 星期日 11:26:13 CST

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值