一、特殊符號
參考文獻:http://hi.baidu.com/04202009/blog/item/d6fb90868c1f5831c65cc311.html
1、#
a、註釋,行首以#開頭作註釋(#!例外)
b、註釋也可以存在於本行命令的右邊,例如 echo the # 。。。。。
c、命令是不能出現在同一行命令的右邊的
d、echo命令中的轉義#是不能作爲註釋的
e、#也可以出現在特定的參數結構中或者數字常量表達式中.例如 $((2#110101))-----2進制
2、;
a、命令分隔符
3、;;
case語句中會用到
4、.
正則表達式用來匹配單個字符,例如 ,ls -l |grep ^...X ----篩選第四位爲X的
5、*
冪運算:2**10
6、&
一個命令後面跟&,表示命令在後臺運行
7、
``=$()
二、I/O重定向
參考文獻:http://www.yuanma.org/data/2006/1116/article_1827.htm
常用FD有3個,爲0(stdin,標準輸入)、1(stdout,標準輸出)、2(stderr,標準錯誤輸出),默認與keyboard、monitor、monitor有關
cmd > file 把 stdout 重定向到 file 文件中
cmd >> file 把 stdout 重定向到 file 文件中(追加)
cmd 1> fiel 把 stdout 重定向到 file 文件中
cmd > file 2>&1 把 stdout 和 stderr 一起重定向到 file 文件中
cmd 2> file 把 stderr 重定向到 file 文件中
cmd 2>> file 把 stderr 重定向到 file 文件中(追加)
cmd >> file 2>&1 把 stderr 和 stderr 一起重定向到 file 文件中(追加)
cmd < file >file2 cmd 命令以 file 文件作爲 stdin,以 file2 文件作爲 stdout
cat <>file 以讀寫的方式打開 file
cmd < file cmd 命令以 file 文件作爲 stdin
cmd << delimiter Here document,從 stdin 中讀入,直至遇到 delimiter 分界符
三、輸入和輸出(echo,read,cat,管道,tee,重定向等)
1、echo
echo 該命令的一般格式爲: echo [ -n ] 字符串其中選項n表示輸出文字後不換行;字符串能加引號,也能不加引號。用echo命令輸出加引號的字符串時,
將字符串原樣輸出;用echo命令輸出不加引號的字符串時,將字符串中的各個單詞作爲字符串輸出,各字符串之間用一個空格分割。
功能說明:顯示文字。
語 法:echo [-ne][字符串]或 echo [--help][--version]
補充說明:echo會將輸入的字符串送往標準輸出。輸出的字符串間以空白字符隔開, 並在最後加上換行號。
參 數:-n 不要在最後自動換行
-e 若字符串中出現以下字符,則特別加以處理,而不會將它當成一般
文字輸出:
\a 發出警告聲;
\b 刪除前一個字符;
\c 最後不加上換行符號;
\f 換行但光標仍舊停留在原來的位置;
\n 換行且光標移至行首;
\r 光標移至行首,但不換行;
\t 插入tab;
\v 與\f相同;
\\ 插入\字符;
\nnn 插入nnn(八進制)所代表的ASCII字符;
–help 顯示幫助
–version 顯示版本信息
2、read
語法
read [options]
-a 後跟一個變量,該變量會被認爲是個數組,然後給其賦值,默認是以空格爲分割符。
-d 後面跟一個標誌符,其實只有其後的第一個字符有用,作爲結束的標誌,會舉例說 明。
-p 後面跟提示信息,即在輸入前打印提示信息。
-e 在輸入的時候可以時候命令補全功能。
-n 後跟一個數字,定義輸入文本的長度,很實用。
-r 屏蔽\,如果沒有該選項,則\作爲一個轉義字符,有的話 \就是個正常的字符了。
-s 安靜模式,在輸入字符時不再屏幕上顯示,例如login時輸入密碼。
-t 後面跟秒數,定義輸入字符的等待時間。
-u 後面跟fd,從文件描述符中讀入,該文件描述符可以是exec新開啓的。
例子:
-a舉例:
root@localhost:~/test#read -a tao
qq ww ee rr
root@localhost:~/test#echo ${tao[1]}
Ww
-b舉例:
root@localhost:~/test#read -d eof -a tao
ww
dd
gg
hh (輸入一個e)
root@localhost:~/test#echo ${tao[3]}
Hh
-n舉例:
root@localhost:~/test#read -n3 -p "you can input 3 word:"
you can input 3 word:xxx
(輸入3個字符後自動退出!)
-s舉例:
root@localhost:~/test#read -p password: -s passwd
password:
(這時候輸入就不再顯示在屏幕上了!)
-e舉例:
root@localhost:~/test#read -e file
(tab鍵補全)
exp1 file ngis_post.sh text
exp5 linux-2.6.27.54/ test xen-3.0.1-install/
-u舉例:
root@localhost:~/test#exec 3<file
root@localhost:~/test#read -u 3 tao
root@localhost:~/test#echo $tao
hello world!
root@localhost:~/test#
注意看下讀入的次序:
root@localhost:~/test#cat file
hello world!
i am good
root@localhost:~/test#exec 3<file
root@localhost:~/test#read -u 3 tao
root@localhost:~/test#echo $tao
hello world!
root@localhost:~/test#read -u 3 tao
root@localhost:~/test#echo $tao
i am good
root@localhost:~/test#
3、cat
作用:顯示文件,創建文件,顯示控制字符
注意:在文件分頁符處不會停下來;會一下顯示完整個文件。因此,可以使用m o r e命令或把c a t命令的輸出通過管道傳遞到另外一個具有分頁功能的命令中,使用命令less file可實現相同的功能。
例如:$ cat myfile | more或者 $ cat myfile | pg
例子:
a、顯示名爲m y f i l e的文件 :$ cat myfile
b、顯示m y f i l e 1、m y f i l e 2、m y f i l e 3這三個文件,可以用: $ cat myfile1 myfile2 myfile3
c、創建一個包含上述三個文件的內容,名爲b i g f i l e的文件,可以用輸出重定向到新文件中:$ cat myfile1 myfile2 myfile3 > bigfile
d、如果cat的命令行中沒有參數,輸入的每一行都立刻被cat命令輸出到屏幕上,輸入完畢後按結束:
$ cat
Hello world
Hello world
e、新建文件
$cat >myfile
This is great
$cat myfile
This is great
cat具體命令格式爲 : cat [-AbeEnstTuv] [--help] [--version] fileName
說明:把檔案串連接後傳到基本輸出(屏幕或加 > fileName 到另一個檔案)
參數:
-n 或 –number 由 1 開始對所有輸出的行數編號
-b 或 –number-nonblank 和 -n 相似,只不過對於空白行不編號
-s 或 –squeeze-blank 當遇到有連續兩行以上的空白行,就代換爲一行的空白行
-v 或 –show-nonprinting
例如:
cat -n linuxfile1 > linuxfile2 把 linuxfile1 的檔案內容加上行號後輸入 linuxfile2 這個檔案裏
cat -b linuxfile1 linuxfile2 >> linuxfile3 把 linuxfile1 和 linuxfile2 的檔案內容加上行號(空白行不加)之後將內容附加到linuxfile3 裏。
cat /dev/null > /etc/test.txt 此爲清空/etc/test.txt檔案內容
補充:
-T 將製表符顯示爲 ^I
-v 顯示非打印字符,除了換行符和製表符,它們使用各自效果相當的“控制序列”。
4、tee
功能說明:讀取標準輸入的數據,並將其內容輸出成文件。
語 法:tee [-ai][--help][--version][文件…]
補充說明:tee指令會從標準輸入設備讀取數據,將其內容輸出到標準輸出設備,同時保存成文件。我們可利用tee把管道導入的數據存成文件,甚至一次保存數份文件
參 數:
-a或–append 附加到既有文件的後面,而非覆蓋它.
-i-i或–ignore-interrupts 忽略中斷信號。
–help 在線幫助。
–version 顯示版本信息。
範 例:
列出文本文件slayers.story的內容,同時複製3份副本,文件名稱分別爲ss-copy1、ss-copy2、ss-copy3:
$ cat slayers.story |tee ss-copy1 ss-copy2 ss-copy3
5、exec
shell的內建命令exec將並不啓動新的shell,而是用要被執行命令替換當前的shell進程,並且將老進程的環境清理掉,而且exec命令後的其它命令將不再執行。
因此,如果你在一個shell裏面,執行exec ls那麼,當列出了當前目錄後,這個shell就自己退出了,因爲這個shell進程已被替換爲僅僅執行ls命令的一個進程,執行結束自然也就退出了。爲了避免這個影響我們的使用,一般將exec命令放到一個shell腳本里面,用主腳本調用這個腳本,調用點處可以用bash a.sh,(a.sh就是存放該命令的腳本),這樣會爲a.sh建立一個sub shell去執行,當執行到exec後,該子腳本進程就被替換成了相應的exec的命令。
source命令或者".",不會爲腳本新建shell,而只是將腳本包含的命令在當前shell執行。
不過,要注意一個例外,當exec命令來對文件描述符操作的時候,就不會替換shell,而且操作完成後,還會繼續執行接下來的命令。
exec 3<&0:這個命令就是將操作符3也指向標準輸入。
別處,這個命令還可以作爲find命令的一個選項,如下所示:
(1)在當前目錄下(包含子目錄),查找所有txt文件並找出含有字符串"bin"的行
find ./ -name "*.txt" -exec grep "bin" {}
(2)在當前目錄下(包含子目錄),刪除所有txt文件
find ./ -name "*.txt" -exec rm {}