歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> Shell十三問學習筆記

Shell十三問學習筆記

日期:2017/3/1 14:14:50   编辑:SHELL編程
Shell十三問學習筆記 1. echo 命令所支持的反斜線控制字符如下表: \a:ALERT / BELL (從系統喇叭送出鈴聲) \b:BACKSPACE ,也就是向左刪除鍵 \c:取消行末之換行符號 \E:ESCAPE,跳脫鍵 \f:FORMFEED,換頁字符 \n:NEWLINE,換行字符 \r:RETURN,回車鍵 \t:TAB,表格跳位鍵 \v:VERTICAL TAB,垂直表格跳位鍵 \n:ASCII 八進位編碼(以 x 開首為十六進制) \\:反斜線本身 2. 常用meta IFS:由 <space> 或 <tab> 或 <enter> 三者之一組成(我們常用 space )。 CR: 由 <enter> 產生。 3. 除了IFS與CR,常用的meta還有: = :設定變量。 $ :作變量或運算替換(請不要與 shell prompt 搞混了)。 > :重導向stdout。 < :重導向stdin。 | :命令管道。 & :重導向file descriptor,或將命令置於後台執行。 () :將其內的命令置於nested subshell執行,或用於運算或命令替換。 {} :將其內的命令置於non-named function中執行,或用在變量替換的界定范圍。 ; :在前一個命令結束時,而忽略其返回值,繼續執行下一個命令。 && :在前一個命令結束時,若返回值為true,繼續執行下一個命令。 || :在前一個命令結束時,若返回值為false,繼續執行下一個命令。 ! :執行history列表中的命令 4. quoting的三種方法 hard quote:' '(單引號),凡在hard quote中的所有meta均被關閉。 soft quote:“”(雙引號),在soft quote中大部份 meta 都會被關閉,但某些 則保留(如$)。 escape:\(反斜線),只有緊接在escape(跳脫字符)之後的單一meta才被關閉。 [sql] 4.1 示例1 [test@rhel5 ~]$ A="B C" [test@rhel5 ~]$ echo "'$A'" 'B C' [test@rhel5 ~]$ echo '"$A"' "$A" [test@rhel5 ~]$ A=B\ C [test@rhel5 ~]$ echo "'$A'" 'B C' [test@rhel5 ~]$ echo '"$A"' "$A" 4.2 示例2 [test@rhel5 ~]$ A=" > B > C" [test@rhel5 ~]$ echo $A B C [test@rhel5 ~]$ echo "$A" B C # $A 時的變量沒至於 soft quote 中,因此當變量替換完成後並作命令行重組時,<enter> 會被解釋為 IFS ,而不是解釋為 New Line 字符。 5. ()與{}這兩對符號的差異 ()將command group置於sub-shell去執行,也稱nested sub-shell。 {}則是在同一個shell內完成,也稱為non-named command group。 所謂function,就是用一個名字去命名一個command group,然後再調用這個名字去執行command group。 6. $(( ))與$( )還有${ }的區別 $( )與` `(反引號)都是用來做命令替換用(command substitution)的。在多層次的復合替換中,``須要額外的跳脫(\`)處理,而$()則比較直觀。 ${ }是用來作變量替換用的。 $(( ))用來作整數運算的。 7. ${ }的一些特異功能 詳見"shell中${}的妙用 " 8. $$, $#, $@, $*區別? $$: 進程ID $#: 參數的數量 $?: 上一條命令的返回值 my.sh p1 "p2 p3" p4 "$@" 則可得到 "p1" "p2 p3" "p4" 這三個不同的詞段(word)﹔ "$*" 則可得到 "p1 p2 p3 p4" 這一整串單一的詞段。 9. 命令的返回值 Return Value的作用,是用來判斷行程的退出狀態(exit status),只有兩種: 0的話為"真"(true) 非0的話為"假"(false) 10. &&和|| && 與 || 都是用來"組建"多個 command line 用的: command1 && command2:其意思是command2只有在RV為0(true)的條件下執行。 command1 || command2:其意思是command2只有在RV為非0(false)的條件下執行。 11. < 和 > 標准輸出: 1> 錯誤輸出: 2> 兩個輸出合並: 1>file.both 2>&1 輸出到空設備: &>/dev/null 12. 管道pipe 上一個命令的stdout接到下一個命令的stdin 13. if與case [sql] if comd1; then comd2 elif comd3; then comd4 else comd5 fi case "$1" in start) start ;; stop) stop ;; status) rhstatus ;; restart|reload) restart ;; condrestart) [ -f /var/lock/subsys/syslog ] && restart || : ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart}" exit 1 esac 13. for, while, until [sql] for var; do ...... done for var in one two three four five do echo '$var is '$var done for ((i=1;i<=10;i++)) do echo "num is $i" done num=1 while [ "$num" -le 10 ]; do echo "num is $num" num=$(($num + 1)) done
Copyright © Linux教程網 All Rights Reserved