歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> SHELL編程

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