KSH 學習
ksh[@more@]複製程式碼
- Korn Shell
- 1.語法
- 特殊的檔案
- /etc/profile 在登入時首先自動執行。
- $HOME/.profile 在登入時第二個自動執行。
- $ENV 在建立一個新的KShell時指定要讀的一個檔案。
- 檔名元字元
- * 匹配有零或零個以上字元的字串
- ? 匹配任何單個字元
- [abc…] 匹配括號內任何一個字元,也可用連字元指定一個範圍(例如,a-z,A-Z,0-9)
- [!abc…] 匹配任何不包括在括號內的字元
-
- ?(pattern) 匹配模式的零個或一個例項
- *(pattern) 匹配指定模式的零個或多個例項
- +(pattern) 匹配指定模式的一個或多個例項
- @(pattern) 只匹配指定模式的一個例項
- !(pattern) 匹配任何不匹配模式的字串
- n 匹配與(…)中的第n個子模式匹配的文字。
- ~ 當前使用者的主目錄
- ~name 使用者name的主目錄
-
- 這個模式pattern可能是由分隔符“|”或“&”分隔的模式的序列,
- 例:pr !(*.o|core) | lp
- 引用
- ; 命令分隔符
- & 後臺執行
- ( ) 命令分組
- | 管道
- <> & 重定向符號
- * ? [ ] ~ + - @ ! 檔名元字元
- ““ 中間的字元會逐字引用,除了`` 替換命令和$ 替換變數.
- ‘’ 中間的所有字元都會逐字引用
- 在其後的字元會按其原來的意義逐字採用.如在””中使用 ”,`,$
- a 警告,b退格,f 換頁,n 換行,r 回車, 製表符,v 垂直製表符,
- nnn 八進位制值,xnn 十六進位制值,’ 單引號,” 雙引號, 反斜線,
- `` 命令的替換
- $ 變數的替換
- 命令形式
- Cmd & 在後臺執行
- Cmd1;cmd2 命令序列,依次執行
- {cmd1;cmd2;} 將命令做為一組來執行
- (cmd1;cmd2) 在子shell中,將命令做為一組執行
- Cmd1|cmd2 管道;將cmd1的輸出作為cmd2的輸入
- Cmd1 `cmd2` 命令替換;用cmd2的輸出作為cmd1的引數
- Cmd1$(cmd2) 命令替換,可以巢狀
- Cmd$((expression)) 運算替換。用表示式結果作為引數
- Cmd1&&cmd2 邏輯與。如果cmd1成功才執行cmd2
- Cmd1||cmd2 邏輯或。如果cmd1成功則不會執行cmd2
- 重定向形式
- 檔案描述符:
- 0 標準輸入 stdin 預設為鍵盤
- 1 標準輸出 stdout
- 2 標準錯誤 stderr
-
- Cmd > file 將cmd的結果輸出到file(覆蓋)
- Cmd >> file 將cmd的結果輸出到file(追加)
- Cmd < file 從file中獲取cmd 的輸入
- Cmd << text 將shell指令碼的內容(直到遇見一個和text一樣的標記為止)作為cmd的輸入
- Cmd <> file 在標準輸入上開啟檔案以便讀寫
-
- Cmd >&n 將輸出傳送到檔案描述符n。ll >&1
- Cmd m>&n 將本來輸出的m中的內容轉發到n中。Ll 3>&2
- Cmd >&- 關閉標準輸出
- Cmd
- Cmd m
- Cmd
- 在檔案描述符和一個重定向符號間不允許有空格。
-
- Cmd 2>file 將標準錯誤發到file中
- Cmd > file 2>&1 將標準錯誤和標準輸出都發到file
- Cmd > f1 2>f2 將標準輸出發到f1,標準錯誤發到f2
- Cmd | tee files 將輸出傳送到標準輸出和files中
- Cmd 2>&1 | tee files 將輸出和錯誤同時發到標準輸出和files中
- 2.變數
- 變數替換
- 下列表示式中不允許使用空格。冒號是可選的,如果用冒號那麼變數必須是非空的並設定了初始值。
- Var=value… 將變數var 設為value
- ${var} 使用變數var的值;如果變數和其後面的文字是分開的則可以不加大括號。
- ${var:-value} 如果變數var已設定則使用它,否則使用值value
- ${var:=value} 如果變數var已設定則使用它,否則使用值value並將value賦給變數var
- ${var:+value} 如果變數var已設定則使用value,否則什麼也不使用
-
- 例:echo ${u-$d};echo ${tmp-`date`}如果沒設tmp,則執行date;
- 內建變數
- $# 命令列引數的個數
- $? 上一條命令執行後返回的值
- $ 當前程式的程式號(PID), 通常用於在shell指令碼中建立臨時檔案的名稱
- $0 第一個引數即命令名
- $n 命令列上的第n個引數
- $* 將命令列上所有引數作為一個字串
- $@ 命令列上所有引數,但每個引數都被引號引起來
-
- LINENO 指令碼或函式內正在執行的命令的行號
- OLDPWD 前一個工作目錄(由CD設定)
- PPID 當前SHELL的父程式的程式號
- PWD 當前工作目錄(由CD設定)
- RANDOM[=n] 每次引用時產生一個隨機數,如果給定n則以整數n開始
- SECONDS 這個整型變數的值是指從這個shell會話啟動算起所過去的秒數。但它更有用的是用指令碼中的計時。
- 例:start=$SECONDS
- read answer
- finish=$SECONDS
- TMOUT 如果設定了該變數,則在沒有輸入的情況下經過TMOUT變數所指定的秒數後,shell退出。值為0時無效。
- CDPATH
- 允許使用者使用簡單檔名作為CD的引數,從而快速改變目錄。設定方法與PATH類似,通常在啟動檔案中設定。如果CD的引數是一個絕對路徑,則不會查詢CDPATH.
- 例:CDPATH=:/u1/nr:/u1/progs:
- export CDPATH
- cd nr
- 就會進到nr中去。
- 注意:變數必須大寫,定義後必須匯出.
- 陣列
- Kshell支援一維陣列,最多支援1024個元素。第一個元素為0。
- Set –A name value0 value1 …
- 宣告陣列,指定的值就成為name的元素。
-
- ${name[i]} i為0至1023的值,可以是表示式。返回陣列元素i
- ${name} 返回陣列元素0
- ${name[*]},${name[@]} 返回所有元素
- 下標[*]和[@]都可以提取整個陣列的內容。但當它們在引號中使用時其行為是不同的。使用@可生成一個陣列,這個陣列是原始陣列的副本,而使用*,則生成的僅僅是具有單一元素的陣列(或者是一個普通變數)。
- 例:set -A a "${names[*]}"
- set -A b "${names[@]}"
- set|head -5
- a[0]='alex helen jenny scott'
- b[0]=alex
- b[1]=helen
- b[2]=jenny
- b[3]=scott
- ${#name[*]} 返回陣列元素個數
- 運算子
- Kshell使用C語言中的運算子。
- + 加;- 減;! 邏輯非;~ 按進製取反;* 乘;/ 除;% 求餘;<< 左移;>> 右移;<= 小於等於;>= 大於等於;< 小於;
- > 大於;== 相等;!= 不等;&& 邏輯與;|| 邏輯或;
- 3.內建命令
- # 註釋後面的一行
-
- Break [n] 從for while select until迴圈中退出或從n次迴圈中退出
-
- Case value in
- Pattern1) cmds1;;
- Pattern2) cmds2;;
- …
- …
- Esac
- 類似於select case.例:
- Case $1 in
- No|yea) response=1
- break;;
- -[tT]) table=TRUE;;
- *) echo “unknown option”;exit 1;;
- Esac
-
- Continue [n] 在for while select until迴圈中跳過餘下的命令,繼續下一次迴圈(或跳過n次迴圈)
-
- Eval args args是一行包含shell變數的程式碼.eval首先進行變數擴充套件,並且執行由此產生的命令。在shell變數包括了重定向符號,別名或其他變數時是有用的。
- 例:
- For option
- Do
- Case “$option” in
- Save) out=’ > $newfile’;;
- Show) out=’ | more’;;
- Esac
- Done
- Eval sort $file $out
-
- Exit [n] 退出指令碼,退出狀態為n.
-
- Export [name=[value]…]
- 定義全域性變數,讓其它shell指令碼也可以使用。無引數時輸出當前定義的全域性變數。
-
- For x [in list]
- Do
- Commands
- Done
- 使變數x(在可選的值列表中)執行commands,省略時假定為”$@”位置引數
- 例:
- For item in `cat program_list`
- Do
- Grep –c “$item.[co]” chap*
- Done
-
- Function name{commands;} 定義一個函式
-
- If condition1
- Then commands1
- [elif condition2
- Then commands2]
- …
- …
- [else commands3]
- Fi
- 條件執行語句。
-
- Let expressions 執行一個或多個表示式。表示式中的變數前不必有$.如果表示式中包含了空格或其他特殊字元,則必須引起來。
- 例:let “I = I + 1” 或 let i=i+1
-
- Read [var1[?string]] [var2 …] 從標準輸入讀入一行給相應的變數,並把剩餘的單詞給最後一個變數。String為相應的提示資訊.無參時只等待一次輸入。
-
- Readonly [var1[=value] var2[=value] …] 設定只讀變數,無參時顯示所有隻讀變數
-
- Return [n] 用於一個函式里面返回狀態
-
- repeat word
- do
- commands
- done
- 指定一個命令序列執行的次數。
- 例:
- repeat 3
- do
- echo "bye"
- done
-
- Select x [in list]
- Do
- Commands
- Done
- 顯示一列按list中順序編號的選單項。讓使用者鍵入行號選擇或按return重新顯示。
- 例:
- Ps3=”select thd item number:”
- Select event in format page view exit
- Do
- Case “event” in
- Format) nroff $file | lp;;
- Page) pr $file | lp;;
- View) more $file;;
- Exit) exit 0;;
- *) echo “invalid selection”;;
- Esac
- Done
- 輸出為:
- 1. format
- 2. page
- 3. view
- 4. exit
- select the item number:
-
- set [options arg1 arg2 …] 無參時輸出所有已知變數的值。
-
- Shift [n] 交換位置引數(如將$2變為$1).如果給出n,則向左移動n個位置。通常用於在while迴圈中迭代命令列引數。N可以是一個整數表示式。
-
- Sleep [n] 睡眠n秒鐘
-
- Test condition 或[ condition ] 判斷條件,為真返回0,否則返回非0.
- 檔案:
- -a filename 如果該檔案存在而為真
- -d filename 如果該檔案存在且為一個目錄,則為真
- -f filename 如果該檔案存在且為一個常規檔案,則為真
- -L filename 如果該檔案存在且為一個符號連結,為真
- -r filename 如果該檔案存在且使用者對其有讀取許可權,真
- -s filename 如果該檔案存在且包含資訊(大於0位元組),真
- -w filename 如果該檔案存在且對其有寫入權,真
- -x filename 如果該檔案存在且對其有執行權,真
- File1 -nt file2 如果file1存在且在file2後修改則值為真(指修改時間)
- File1 -ot file2 如果file1存在且在file2前修改則值為真(指修改時間)
- 字串:
- string 如果string不為空字串則值為真
- -n string 如果string字元長度大於0則值為真
- -z string 如果string字元長度等於0則值為真
- string1=sting2 如果string1等於string2則值為真
- string1!=string2 如果string1不等於string2則值為真
- string2可以是萬用字元模式。
- 整數比較:
- -gt 大於;-ge 大於或等於;-eq 等於;-ne 不等於; -le 小於或等於; -lt 小於
- 組合:
- ! condition 如果condition為假則為真
- condition1 –a condition2 如果兩個條件都為真則為真
- condition1 –o condition2 如果兩個條件有一個為真則為真
-
- trap [[commands] signals] 如果接收到任何的訊號signals則執行命令commands.如果完全忽略commands則會重新設定由預設行為處理指定的訊號。
- 例:
- Trap “” 2 ;忽略訊號2(中斷,通常是ctrl+c)
- Trap 2 ;恢復中斷2
- Trap “rm –f $tmp;exit” 0 1 2 15 ;當shell程式退出,使用者退出,按ctrl+c或執行kill時刪除$tmp.
-
- Typeset [options] [var [var]…]設定變數屬性
- -u 將變數值中所有字母全部轉換成大寫
- -l 將變數值中所有字母全部轉換成小寫
- -i 將變數值設為整數型別.-ix x為相應的進位制,表示時為x#變數值,可用於進位制轉換。
- 例:typeset -i2 vv vv=2 echo $vv 2#10
- typeset -i 相當於integer
- -L width 在width寬度之內左對齊
- -R width 在width寬度之內右對齊,前面空位用空格填充
- -Z width 在width寬度之內右對齊,變數如果是數字,則前面空位用零填充
- 如果忽略width,將使用賦給這個變數的第一個值的寬度。
- -x 設定一個變數全域性。typeset -x 相當於 export
- -r 設定一個變數具有隻讀屬性,在設定的同時或之前,要先給這些變數賦值。
- 例:typeset -r PATH FPATH=/usr/local/funcs
- typeset -r 相當於 readonly
- 不帶引數的typeset可以列出變數和變數的屬性。檢視指定的變數屬性可用type|grep day
- 使用帶有某一選項的typeset來看看哪一個變數具有特定的屬性:typeset -z
-
- Unset var 刪除一個變數,將它置為空
-
- Until condition
- Do
- Commands
- Done
- 執行命令command直到滿足條件condition.
-
- While condition
- Do
- Commands
- Done
- 如果滿足條件condition則執行commands
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/66634/viewspace-1057151/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE dump kshOracle
- DB2:ksh: db2: not found.DB2
- 學習學習再學習
- 獲取兩天內的告警日誌(AIX|ksh|shell|oracle)AIOracle
- 深度學習——學習目錄——學習中……深度學習
- 深度學習(一)深度學習學習資料深度學習
- 深度學習學習框架深度學習框架
- 強化學習-學習筆記3 | 策略學習強化學習筆記
- /bin/bash 和 /bin/ksh使用的使用者配置檔案的比較
- 學習產品快報09 | “CSDN學習”:增加學習提醒,提示學習不忘記
- 【強化學習】強化學習/增強學習/再勵學習介紹強化學習
- 學習ThinkPHP,學習OneThinkPHP
- 前端學習之Bootstrap學習前端boot
- 學而習之,成就學習
- 前端週刊第62期:學習學習再學習前端
- 深度學習+深度強化學習+遷移學習【研修】深度學習強化學習遷移學習
- 強化學習-學習筆記2 | 價值學習強化學習筆記
- Golang 學習——interface 介面學習(一)Golang
- Golang 學習——interface 介面學習(二)Golang
- 深度學習學習7步驟深度學習
- 《JAVA學習指南》學習筆記Java筆記
- Go學習【二】學習資料Go
- java學習之道 --- 如何學習java?Java
- 免殺學習-基礎學習
- 強化學習10——迭代學習強化學習
- 程式設計學習MarkDown學習程式設計
- this學習
- 學習
- 【區塊鏈學習】《區塊鏈學習指南》學習筆記區塊鏈筆記
- Flutter學習記錄(一)Dart學習FlutterDart
- 從學習語文聊聊如何學習
- kitten 學習教程(一) 學習筆記筆記
- 整合學習(一):簡述整合學習
- 學習態度和學習計劃
- 學習筆記----圖論學習中筆記圖論
- 酷學習:學習可以很酷很好玩
- aix6.1安裝oracle10.2.0.5報錯BEFORE CONTINUING:JAVA KSHAIOracleUIJava
- 強化學習-學習筆記13 | 多智慧體強化學習強化學習筆記智慧體