2013-01-24 174 views
0

我應該在前面說我從未使用過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

你有什麼問題嗎? – Satish

+0

基本上,是否有一個更聰明的方式來做到這一點... – ricco19

+0

那怎麼辦呢http://stackoverflow.com/questions/1624480/c-terminating-the-program-by-pressing-a-key – Satish

回答

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!" 

順便說一下,在舊炮彈,其中[...]沒有內置,免去如果與此運行速度更快:

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

真棒,正是我所需要的。謝謝。 – ricco19