在寫安裝程式免不了要輸入密碼一類的,c裡比較直白,getchar()加printf()一想就可以了,具體的邏輯實現也不會多難。可是在shell這種限制性語言裡可沒那麼簡單了,比如你想下輸入命令read,怎麼能唯讀入乙個字元就退出呢?
於是我上網搜了搜,改了改,感興趣的不如一起來學習下。
getchar()
while
: ;
doret
=`getchar`
case
"$ret"in
^h) str
=$(echo $str
|sed
's/.$//')
echo
-ne
"\b \b";;
"")
break
;;;
*) str="
$str$ret
"echo -n
"*"esac
done
getchar()函式就仿c語言的自己做了乙個,每次輸入乙個字元就退出。
具體的stty的設定
可以自己man,這裡第一行設定了「擊一下鍵盤輸入乙個字元就會響
應,而不是等到輸入回車按
行響應」。第三行恢復設定。第二行dd是個linux命令:
dd命令:
功能說明:讀取,轉換並輸出資料。
語 法:dd [bs=《位元組數》][cbs=《位元組數》][conv=《關鍵字》][count=《區塊數》][ibs=《位元組數》][if=《檔案》][obs=《位元組數》][of=《檔案》][seek=《區塊數》][skip=《區塊數》][--help][--version]
補充說明:dd可從標準輸入或檔案讀取資料,依指定的格式來轉換資料,再輸出到檔案,裝置或標準輸出。
參 數:
bs=《位元組數》 將ibs( 輸入)與obs(輸出)設成指定的位元組數。
cbs=《位元組數》 轉換時,每次只轉換指定的位元組數。
conv=《關鍵字》 指定檔案轉換的方式。
count=《區塊數》 僅讀取指定的區塊數。
ibs=《位元組數》 每次讀取的位元組數。
if=《檔案》 從檔案讀取。
obs=《位元組數》 每次輸出的位元組數。
of=《檔案》 輸出到檔案。
seek=《區塊數》 一開始輸出時,跳過指定的區塊數。
skip=《區塊數》 一開始讀取時,跳過指定的區塊數。
--help 幫助。
--version 顯示版本資訊。
主程式包含了乙個while迴圈來使你不斷輸入密碼。
ret=
`getchar` #取出輸入的值放到ret變數裡。這裡你需要了解``和$()的意思。
然後根據ret的值來相應的處理:
^h代表backspace。為什麼要對退格鍵進行特殊處理呢,你可以試一下,如果不特殊處理的話是不能發揮退格的功效的。為什麼不能發揮退格的功效呢,那是因為此時處於raw mode下,而非cooked mode下。精彩的就在特殊處理的部分,需要清楚的是所謂的特殊處理就是「刪除輸入backspace代表的字元(在raw模式下backpace鍵輸入的是^h),刪除乙個*號」 echo $str|
sed
's/.$// $代表最後一行,echo $str最後一行就是換行。.$就是倒數第二行最後乙個字元(即str最後乙個字元^h)。。替換成空就完成了「刪除輸入backspace代表的字元」,然後在echo "\b"刪除乙個*號就ok了。。。
在此不得不感嘆一下linux下這些命令功能的強大,聊聊兩句想實現什麼功能實現什麼功能,再感嘆設計者的強大。
然後輸入為空(回車)時退出迴圈,其他情況都是密碼顯示*號。
用pyinstaller打包乙個exe程式
f選項可以打出乙個exe檔案,預設是 d,意思是打成乙個資料夾。pyinstaller f testdatagen.py w選項可以打桌面程式,去掉命令列黑框 pyinstaller f w testdatagen.py i可以設定圖示路徑,將圖示放在根目錄 pyinstaller f w i ge...
shell實現輸入密碼顯示星號
shell指令碼可以使用read s來預設禁止回顯輸入字元,這樣做一定程度上可以保證安全性。但這並不是乙個好的互動,因為對於輸入密碼並不能知道已經輸入了多少個字元。而使用 星號 來代替輸入的字元是乙個很不錯的想法,即保證安全又有好的互動性。程式的實現 首先要實現不顯示輸入字元,這個可以使用命令stt...
用shell 實現自動ftp的乙個例項
bin bash echo echo cintel ftp test tool echo please input hostip c read hostip echo please input username c read username echo please input password c...