在shell脚本中重复变量

时间:2013-01-24 16:57:25

标签: linux bash shell

我应该先说明我以前从未使用过shell脚本,所以这对我来说都是新手。我能够制作出有效的东西,但是非常优化,我不知道如何改进它。如果有的话,这是一个非常有趣的剧本:

#/bin/bash

get_char() {
    old_tty_settings=`stty -g`
    stty -icanon min 0 time 1
    stty cbreak
    grabbed_char=`dd if=/dev/tty bs=1 count=1 2>/dev/null`
    stty -cbreak
    stty "$old_tty_settings"
}

while true; do

    unset char00
    unset char01
    unset char02
    unset char03
    unset char04
    unset char05

    echo -e "\nWaiting for keystroke..."
    read -n 1 char00

    while true; do

        get_char; char01=$grabbed_char

        if [ "$char01" != "" ]; then get_char; char02=$grabbed_char
            else break
        fi
        if [ "$char02" != "" ]; then get_char; char03=$grabbed_char
            else break
        fi
        if [ "$char03" != "" ]; then get_char; char04=$grabbed_char
            else break
        fi
        if [ "$char04" != "" ]; then get_char; char05=$grabbed_char
            else break
        fi

    done

    fullstring=$char00$char01$char02$char03$char04$char05
    echo -e "\nFULLSTRING:  !$fullstring!"

done

这份名单要长得多,但我没有让你幸免。

基本上,程序需要永远坐在终端等待击键。在初始击键后,需要等待很短的时间(在这种情况下为1/10秒)进行另一次击键。如果在这么短的时间内没有注册击键,它会回显输出(将使用sed命令进行管道传输),然后重新启动。

它适用于条形码扫描仪,您可以扫描4个字符或100个字符。我们希望尽快处理数据,这意味着我们不希望扫描一些东西后延迟1秒。

一个好的解决方案是,如果收到一个角色就可以创建“charXX”。谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

用这个替换你的内心会做你想要的吗?

read -n 1 fullstring

while true; do
    get_char
    if [ -n "$grabbed_char" ] ; then
        fullstring="$fullstring$grabbed_char"
    else
        break
    fi
done
echo -e "\nFULLSTRING:  !$fullstring!"

顺便说一句,在没有内置的旧shell上,用这个替换if会运行得更快:

case "$grabbed_char" in
    "")  break ;;
    *) fullstring="$fullstring$grabbed_char" ;;
esac