#----------------------------------------------------------#shell
# ====>
紅色字體 -特指煮酒我的所見。加粗則爲須要重點注意。 #
# ====>
藍色加粗 -特指與本文相關人員,包括參與修正的朋友。 #
# ====> 煮酒品茶 -Http://cwtea.blog.51cto.com
#
#----------------------------------------------------------#
echo 與printf I/0重定向等
語 法:echo [-ne][字符串]或 echo [--help][--version]
補充說明:echo會將輸入的字符串送往標準輸出。輸出的字符串間以空白字符隔開, 並在最後加上換行號。
參 數:-n 不要在最後自動換行
-e 若字符串中出現如下字符,則特別加以處理,而不會將它當成通常文字輸出:
\a 發出警告聲;
\b 刪除前一個字符;
\c 最後不加上換行符號;
\f 換行但光標仍舊停留在原來的位置;
\n 換行且光標移至行首;
\r 光標移至行首,但不換行;
\t 插入tab;
\v 與\f相同;
\\ 插入\字符;
\nnn 插入nnn(八進制)所表明的ASCII字符;
–help 顯示幫助
–version 顯示版本信息
煮酒品茶:死記硬背不是個辦法,咱們也不可能記得這麼多參數,最好的辦法就是請求幫助,man echo echo -help再不行百度。echo的具體做用在於輸入信息,如提示用戶到哪裏了,提示用戶該輸入什麼信息了。這個比較適合加\a參數,響一下來讓用戶知道該作什麼該做,但更多的腳本最好少一些交互吧。\n換行,我想輸出信息也是爲了美觀吧。或者提示用戶信息到哪了,要出錯在以前或以後。
printfr wt
說明:甚本複製了C程序庫裏的printf()庫程序的功能,因此基本能夠通用。與echo不一樣的是它不提供換行操做。
%s 用於字符串的輸出
如:
--------------------------------
[root@localhost test]# cat printf
printf "hello 123 '%s,%s'" Love 51cto
[root@localhost test]# ./printf
hello 123 'Love,51cto'[root@localhost test]#
------------------------------------
煮酒品茶,並無提供換行符,因此輸出的信息連在一塊兒了。這個%s的做用個人理解是用做多個同種格式下文本的定義還不錯,這樣會省於不少代碼,和省下不少心。
---------------------------------
[root@localhost test]# cat printf
i='%s,%s!'
printf "$i" ni hao zhongguo
printf "$i" ni hao cwtea
printf "$i" love you
[root@localhost test]# ./printf
ni,hao!zhongguo,!ni,hao!cwtea,!love,you![root@localhost test]#
---------------------------------------
基本的I/O重定向
概念:程序應該有數據的來源端和目地端,以及報告問題的地方,稱之爲標準輸入,標準輸出,標準錯誤輸出、
輸入輸出能夠是任何文件終端硬件等,而以Linux一切皆文件,那麼就是任何文件嘍。
例:
-------------------------
[root@localhost test]# cat
11234 #手工輸入的
11234 #cat輸出的
[root@localhost test]#
-------------------
重定向符號:
< > >>
< 的做用是調取後面的文件而後用<前進行操做。
例:
-----------------------------------
[root@localhost test]# cat ts
#! /bin/sh
hello 51CTO
[root@localhost test]# tr -d "hello" < ts
#! /bin/s
51CTO
[root@localhost test]#
-----------------------------------------
> 的做用就是把前面的內容輸出到後面的文件中,若是目的地不存在,那麼建立,已存在那麼替換掉原數據。
如
-------------------------------
[root@localhost test]# cat ts
#! /bin/sh
hello 51CTO
[root@localhost test]# cat ts >123
[root@localhost test]# ls
123 printf ts
[root@localhost test]# cat 123
#! /bin/sh
hello 51CTO
[root@localhost test]#
-----------------------------------
>>是添加文件到末尾,這個對配置文件頗有效啊。
如:
------------------------------------
[root@localhost test]# tr -d "hello" <ts >>123
[root@localhost test]# ls
123 printf ts
[root@localhost test]# cat 123
#! /bin/sh
hello 51CTO
#! /bin/s
51CTO
[root@localhost test]#
----------------------------------------
煮酒品茶:這個過分多加了一行,先是取ts裏面的值並執行tr -d "hello"並輸出到123的末端。因爲是一路操做下來的,那麼123和ts文件就不cat了。tr命令,請tr -help或百度查。tr的做用,更改文件,特別是配置文件特別不錯,注意的是在有管道時,咱們應該體現數據效率,儘量的把少的數據移交給後面的管道。
特珠文件:/dev/null與/dev/tty
煮酒品茶:/dev/null這個你們最多見,特別是任務計劃中。
/dev/null 位桶,把數據寫入此文件,系統將認爲數據已完成寫入操做,並把數據給丟掉。
/dev/tty:打開此文件,系統就重定向到另外一個終端與程序相結合。
/dev/null 這個用的比較廣,好比任務計劃每五分鐘執行一次程序,那麼產生的信息太多,而咱們又不須要,這時能夠
直接給它寫到位桶裏面。
/dev/tty 這個我的認爲在安全方面不錯,當A要輸入密碼時能夠切換到另外一終端,讓另外一終端來輸入密碼而後確認後返
回。原Shell.
-----------------------------------
[root@localhost test]# cat tty
echo "Input Pass1:"
stty -echo
#關閉echo
read pass </dev/tty
#接怍數據從/dev/tty新終端
echo pass2 "Input Enter"
read pass2 </dev/tty
stty echo
[root@localhost test]# ./tty
Input Pass1:
pass2 Input Enter
[root@localhost test]#
-----------------------------------
Shell每次登錄都要讀取.profile文件,後面的版本好像是在根目錄的.bash_profile
--------------------------
[root@localhost ~]# cat .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
#
export PATH
unset USERNAME
[root@localhost ~]#
---------------------------
若是你要定義shell找你本身定義的目錄的話,或者也能夠在開頭的第一行加上#!/你的目錄話加
---------------------------
PATH=:/bin 先找這目錄
PATH=/bin 中間找這目錄
PATH=/bin:
最後找這個目錄
--------------------------
因此位置的排例是以:號爲基準。
簡單的執行跟蹤:
set -x
set +x
煮酒品茶:這個做用蠻大的,還有一個test也蠻強的,但我喜歡set -x ,在執行程序每一行都會提示Shell進行的什麼
操做,已經操做完的內容。
--------------------------------
[root@localhost test]# ./tty
++ echo 'Input Pass1:'
Input Pass1:
++ stty -echo
++ read pass
++ echo pass2 'Input Enter'
pass2 Input Enter
++ read pass2
++ stty echo
[root@localhost test]#
----------------------------------
國際化與本地化:這個過高尚了,因此沒記任何筆記。
(完)