轉自:http://www.cnblogs.com/stephen-liu74/archive/2011/11/10/2240461.html
Linux系統提供了兩個對Shell編程非常有用的特殊文件,/dev/null和/dev/tty。其中/dev/null將會丟掉所有寫入它的數據,換句換說,當程序將數據寫入到此文件時,會認為它已經成功完成寫入數據的操作,但實際上什么事都沒有做。如果你需要的是命令的退出狀態,而非它的輸出,此功能會非常有用,見如下Shell代碼:
/> vi test_dev_null.sh
#!/bin/bash
if grep hello TestFile > /dev/null
then
echo "Found"
else
echo "NOT Found"
fi
在vi中保存並退出后執行以下命令:
/> chmod +x test_dev_null.sh #使該文件成為可執行文件
/> cat > TestFile
hello my friend
CTRL + D #退出命令行文件編輯狀態
/> ./test_dev_null.sh
Found #這里並沒有輸出grep命令的執行結果。
將以上Shell腳本做如下修改:
/> vi test_dev_null.sh
#!/bin/bash
if grep hello TestFile
then
echo "Found"
else
echo "NOT Found"
fi
在vi中保存退出后,再次執行該腳本:
/> ./test_dev_null.sh
hello my friend #grep命令的執行結果被輸出了。
Found
下面我們再來看/dev/tty的用途。當程序打開此文件是,Linux會自動將它重定向到一個終端窗口,因此該文件對於讀取人工輸入時特別有用。見如下Shell代碼:
/> vi test_dev_tty.sh
#!/bin/bash
printf "Enter new password: " #提示輸入
stty -echo #關閉自動打印輸入字符的功能
read password < /dev/tty #讀取密碼
printf "\nEnter again: " #換行后提示再輸入一次
read password2 < /dev/tty #再讀取一次以確認
printf "\n" #換行
stty echo #記着打開自動打印輸入字符的功能
echo "Password = " $password #輸出讀入變量
echo "Password2 = " $password2
echo "All Done"
在vi中保存並退出后執行以下命令:
/> chmod +x test_dev_tty.sh #使該文件成為可執行文件
/> ./test_dev_tty
Enter new password: #這里密碼的輸入被讀入到腳本中的password變量
Enter again: #這里密碼的輸入被讀入到腳本中的password2變量
Password = hello
Password2 = hello
All Done