1. A yes/no dialog box
dialog --common-options --yesno text height width
e.g.
dialog --title "Confirm Infomation" --yesno "Are you sure to continue?" 7 60
(我想到,利用Linux C和shell混合編程能夠比較容易得作到和用戶經過這種dialog交互。好比Linux 程序須要用戶輸入,能夠調用shell中的dialog命令,獲取用戶輸入,而後將結果返回給shell
主進程。這避免了利用GTK或者QT編程的麻煩。回想學校裏的BBS客戶端TERM,徹底就是在控制檯下跑的,既能夠查看貼子,又能夠回覆,發帖,發郵件,真的很強大。若是在和用戶的交互中編程
沒有多媒體信息的話,利用這種方式已經足夠了。另外,這種程序的移植性很是高。只要是支持標準c庫、支持shell的Linux平臺,均可以跑這種程序。)bash
2. 得到文件或者目錄的絕對路徑
root@localhost :/home/James/mypro/shell# ./getrealpath.sh menu.sh TryOut/ ../Linux-Pro/pipe/test.c
menu.sh -- /home/James/mypro/shellmenu.sh
TryOut/ -- /home/James/mypro/shell/TryOut
../Linux-Pro/pipe/test.c -- /home/James/mypro/Linux-Pro/pipetest.capp
#!/bin/bash #get realpath of a file or a directory #getrealpath filename1 dirname1 .... #realpath() takes one para, that is a file name or a dirctory name realpath() { name=$1 if [ -d $name ]; then old_pwd=$(pwd) cd $name new_pwd=$(pwd) cd $old_pwd echo $new_pwd fi if [ -f $name ]; then base=$(basename $name) dir=$(dirname $name) old_pwd=$(pwd) cd $dir new_pwd=$(pwd) new_name=$new_pwd$base cd $old_pwd echo $new_name fi } for file in $@; do real_path=$(realpath $file) echo "${file} -- ${real_path}" done
3. Input Dialog Box
dialog --title "PASSWORD" --inputbox "Enter your password " 8 60 2>/dev/null
(注意最後的2>/dev/null,它的做用是將標準錯誤輸出重定向到/dev/null,若是沒有這句話,2將會被默認輸出到標準輸出上,產生奇怪的現象。
因而可知,inputbox是經過標準錯誤輸出來傳回信息的。雖然有點取巧,可是應用起來很方便。Good!)spa
4. 得到用戶密碼(若是要回顯*號的話,加上--insecure選項)
.net
#!/bin/bash # a sample file to read user's password # password storage data=$(tempfile 2>/dev/null) #trap signals trap 'rm -f $data' 0 1 2 5 15 # the 0 signal is trapped so that the temp file will be automatically removed when the script exits successfully #get passwd dialog --title "Password" \ --clear \ --passwordbox "Enter Your Password" 10 30 2>$data ret=$? #make decision case $ret in 0) echo "Password is $(cat $data)";; 1) echo "Cancel pressed.";; 255) [ -s $data ] && cat $data || echo "ESC pressed.";;#if size of $data is not zero, print out $data's content#!/bin/bash esac
5. 如何在腳本中創建臨時文件,而且能自動清除?
如上例,tmpfilename=$(tempfile 2>/dev/null) #將錯誤輸出重定向到/dev/null中,以避免影響結果。
trap 'rm -f $tmpfilename' 0 1 ..
那麼此時程序正常退出的時候,或者exit 1的時候,都會清除臨時文件。code
6. 打印一個棋盤
進程
#!/bin/bash ###print out a chess board for ((i=1; i<=8; i++)); do for ((j=1; j<=8; j++)); do total=$(($i+$j)) tmp=$((total%2)) if [ $tmp -eq 0 ]; then echo -e -n "\033[47m \033[0m" else echo -e -n "\033[40m \033[0m" fi done echo "" done
(放上此實例是爲了從此寫Linux C語言和Shell混合編程作準備)ip
7. 得到當前terminal的名字
tty
ci