1. 程式人生 > >學習Linux中ksh的用法

學習Linux中ksh的用法

熟悉Linux的朋友肯定都知道bash,它是Linux預設的命令列解釋程式,熟悉Solaris的也應該知道csh,

但是csh用起來比較費勁,於是乎產生了Korn Shell (http://www.kornshell.com),ksh綜合了csh的強

大功能和bash的易用性,作為一名忠實的Linuxer,你不得不把這一強大的工具牢牢掌握!
關於shell的用法及shell程式設計方面的資料很多,但是專門講解ksh的似乎挺少的,強子在此也結合幾篇E

文加上一些自己的實踐盡最大努力給大家講解一下ksh,望對你能起到一定的作用,文末附上E文地址。
 
1. 準備工作
首先請確保ksh程式已經安裝在/bin/目錄下,強子前幾天裝Fedora7卻沒有發現ksh被安裝,如果沒有則

直接上ksh官方網站上去下一個,然後重新命名成ksh並拷貝到/bin目錄下。
跟大多數指令碼解釋程式一樣,可以選擇互動式或者批處理執行,如果是互動式則直接在bash提示符下輸

入#ksh,然後便進入ksh互動模式,如果是批處理,則:
先得建立一個ksh指令碼檔案:#vi myscript.ksh
然後在檔案裡新增指令碼程式碼,Esc+:+wq儲存,然後給予可執行許可權: #chmod 777 myscript.ksh
最後直接執行便可:#./myscript.ksh 或者 #ksh ./myscript.ksh,如果需要引數,則直接在執行命令

後面輸入:#ksh ./myscript.ksh arg1 arg2 arg3 ...
當然這些引數可以直接在程式體裡面使用$1, $2, $3來呼叫,特別地:$0始終表示指令碼檔名,因為它

其實才是真正的第一個引數(ksh命令後的第一個引數始終是指令碼檔名)
注:為了確保批處理檔案100%是被ksh解釋的,最好在每個批處理的第一行加上
#!/bin/ksh (該行表示用ksh來解釋下面的程式體,它是備註的一種特殊方式#!)
 
2. 變數
如何定義變數:myval = "hello world"
呼叫:echo $myval 則輸出: hello world
如果是要執行數字運算,則我們必須顯式宣告變數型別,如:
integer val1=1
integer val2=2
integer val3=$val1+$val2
print $val3
該段程式如果不顯式指明型別,則輸出會是1+2而不是3
備註:通用的備註方法:# my comment
換行:\n
注意:ksh區分大小定,所有Linux的程式好像都區分大小寫,這點強子並未確認
 
3. 流程控制

if...else...fi語句
 if ((ANIMAL=="cat")) then
    print "Good"
 else
    print "Bad"
 fi
判斷條件:
== Equal
> Greater than
< Less than
>= Greater than or equal to
<= Less than or equal to
!= Not equal to
 
case...in...esac語句(條件判斷中可使用萬用字元)
 echo input yes or no
 read answer
 case $answer in
  yes|Yes|y)
   echo got a positive answer;;
  no)
   echo got a 'no';;
  q*|Q*)
   exit;;
  *)
   ;;
 esac

while...do...done語句
 keeplooping=1;
 while [[ $keeplooping -eq 1 ]] ; do
 read quitnow
  if [[ "$quitnow" = "yes" ]] ; then
   keeplooping=0
  fi
  if [[ "$quitnow" = "q" ]] ; then
   break;
  fi
 done

util...do...done...語句
 until [[ $stopnow -eq 1 ]] ; do
  echo just run this once
  stopnow=1;
  echo we should not be here again.
 done

for...do...done語句
 list="one two three"
 for var in $list ; do
  echo $var
  list="nolist"
 done

或者

for ((i=0; i<5; i++))
do
       echo `date`
       sleep 1.5
done

4. 陣列
定義陣列:
array[1]="one"
array[2]="two"
array[3]="three"
three=3
呼叫陣列:
print ${array[1]}
print ${array[2]}
print ${array[3]}
print ${array[three]}

5. 一些內建的常量

PWD - 當前目錄
RANDOM - 產生一個隨機數
$$ - 輸出當前程序號
PPID - 你程序ID 
$1 to $9 - 引數
$? - 退出程式碼
$REPLY - 數字選單的選擇項

$# - 命令引數的數量

$* - 按空格分隔的引數的值,如果是"$*"則有所不同

[email protected] - 按空格分隔的引數的值,如果是"[email protected]"則有所不同

至於ksh的$*, [email protected], "$*"和"[email protected]"的區別,可參考以下程式碼:

set 'apple pie' pears peaches
for i in $* ; do
       echo $i
done

# apple
# pie
# pears
# peaches

set 'apple pie' pears peaches
for i in "$*" ; do
       echo $i
done

# apple pie pears peaches

set 'apple pie' pears peaches
for i in [email protected] ; do
       echo $i
done

# apple
# pie
# pears
# peaches

set 'apple pie' pears peaches
for i in "[email protected]" ; do
       echo $i
done
# apple pie
# pears
# peaches

6. 函式
printmessage() {
 echo "Hello, this is the printmessage function"
}

printmessage

內建的函式:
read varname -- 從終端讀取標準輸入並賦值給varname
set $varname -- 為引數設定值,如果呼叫set $val="first second third",則$1="first"
eval -- 直接執行命令如:eval 'print hello'則直接執行命令print hello
文字位置,顏色調整 -- 用法:
tput init
tput clear
tput cup 3 2
print -n "Here is a clean screen, with these words near the top"
endline=`tput cols`
tput cup $(($endline - 2))
print "and now, back to you"
sleep 2
構建自己的數字選單選擇項:
select word in one two three exit; do
 echo word is $word
 echo reply is $REPLY
 if [[ "$word" = "exit" ]] ; then
  break;
 fi
done
執行這段指令碼,將輸出並等待使用者作出選擇
1) one
2) two
3) three
4) exit
#?


7. 在Ksh裡面呼叫其它Linux系統工具
如cut, join, comm, fmt, grep, egrep, sed, awk
強子現在正在研究awk,一個文字分析處理工具,很強大,稍後附上研究心得

8. exit和return的區別
exit會退出整個程式體,而return則只是退出當前函式體而非程式體,並有返回值

關於ksh的詳細用法可參考線上手冊:

http://www.cs.princeton.edu/~jlk/kornshell/doc/man93.html

相關推薦

學習Linuxksh用法

熟悉Linux的朋友肯定都知道bash,它是Linux預設的命令列解釋程式,熟悉Solaris的也應該知道csh, 但是csh用起來比較費勁,於是乎產生了Korn Shell (http://www.kornshell.com),ksh綜合了csh的強 大功能和bash的易用性,作為一名忠實

Linuxwget用法

wordpress 用戶名 targe 是否 之前 get robot c斷點續傳 常用語法 Wget簡介:Linux系統中wget是一個下載文件的工具,它用在命令行下。對於Linux用戶是必不可少的工具,我們經常要下載一些軟件或從遠程服務器恢復備份到本地服務器。wget支

linuxsed用法

命令一、sed命令介紹:1、含義:Stream Editor文本流編輯,sed是一個“非交互式的”面向字符流的編輯器。能同時處理多個文件多行的內容,可以不對原文件改動,把整個文件輸入到屏幕,可以把只匹配到模式的內容輸入到屏幕上。還可以對原文件改動,但是不會再屏幕上返回結果。2、功能:主要用來自動編輯一個或多個

Linuxdate用法

date1、命令:date2、命令功能:date 可以用來顯示或設定系統的日期與時間。3、命令參數-d<字符串>:顯示字符串所指的日期與時間。字符串前後必須加上雙引號; -s<字符串>:根據字符串來設置日期與時間。字符串前後必須加上雙引號; -u:顯示GMT; --help:在線幫助;

Linuxawk用法

awk1、awk簡介:awk是一個強大的文本分析工具,相對於grep的查找,sed的編輯,awk在其對數據分析並生成報告時,顯得尤為強大。簡單來說awk就是把文件逐行的讀入,以空格為默認分隔符將每行切片,切開的部分再進行各種分析處理。2、awk格式:awk是由模式,動作,或者模式和動作的組合組成。模式patt

Linuxrpm用法

rpm 安裝 Linux rpm -i 安裝--test 僅測試,不安裝--nodeps 忽略依賴性(忽略依賴性安裝)--replacepkgs 重復安裝已安裝過的包,文件覆蓋(修改文件重裝覆蓋。即恢復軟件安裝初始狀態)--replacefiles 將要安裝包的部分文件與其他已安裝的包文件沖突,可

linuxvim用法

Vim是從 vi 發展出來的一個文字編輯器。程式碼補完、編譯及錯誤跳轉等方便程式設計的功能特別豐富,可以說是程式開發者的一項很好用的工具。 vi/vim 按鍵說明 除了上面簡易範例的 i, Esc, :wq 之外,其實 vim 還有非常多的按鍵可以使用。 第一部份:一般模式可用的游

三劍客-sed linuxsed用法

linux中sed用法   sed是一個很好的檔案處理工具,本身是一個管道命令,主要是以行為單位進行處理,可以將資料行進行替換、刪除、新增、選取等特定工作,下面先了解一下sed的用法sed命令列格式為:     &n

linux export 用法及環境變數

 Linux export命令用於設定或顯示環境變數。 在shell中執行程式時,shell會提供一組環境變數。export可新增,修改或刪除環境變數,供後續執行的程式使用。 一、語法如下: export [-fnp][變數名稱]=[變數設定值] 引數說明: -f  代表[

linuxcut用法

cut cut命令可以從一個文字檔案或者文字流中提取文字列。 cut語法 [[email protected] ~]# cut -d'分隔字元' -f fields <==用於有特定分隔字元 [[email protected] ~]# cut

Linux命令學習Linuxmore和less命令以及查詢用法

** 一、more命令 ** more功能類似 cat ,cat命令是整個檔案的內容從上到下顯示在螢幕上。 more會以一頁一頁的顯示方便使用者逐頁閱讀,而最基本的指令就是按空白鍵(space)就往下一頁顯示,按 b 鍵就會往回(back)一頁顯示,而且還有搜尋字串的功能 。mo

Linuxrename和mv命令用法學習修改檔名區別和總結

如何用命令修改檔名呢?在Linux下可以用rename命令,當然還可以使用mv命令,這裡分享下Linux rename命令的用法。 有一部分人說Linux下沒有rename命令,建議大家用mv命令。 對rename命令和mv命令在重新命名檔案方面做一個比較,大家根據個人

Linuxgrep搜索用法

輸出 ber linu 大小 magic add option 正則表達 查找 有測試文件test.txt一枚,內容如下 aaabbbcccAAADDDEEEabcsdfjasldjfbcdokmABC 一、基本搜索常用1、現在想把abc okm篩選出來 grep "abc

Linuxyum和apt-get用法及區別

記錄 auto yum安裝軟件 mirror 內核 epo 綁定 提示 們的 Linux中yum和apt-get用法及區別 一般來說著名的linux系統基本上分兩大類: 1.RedHat系列:Redhat、Centos、Fedora等 2.Debian系列:De

Linuxsudo的用法

ber code als 安裝 有效 ould using span 帶來 在linux中的用戶只有2種:root和非root。而非root即普通用戶的權限非常低,基本處理自己的home目錄,其他好多地方連查看的權利也沒有,更不要說安裝軟件了。 為了避免來回切換root,l

Linuxmore和less命令用法

時間 quit ron 忽略 分頁 page tab 易用 linux中 一、more命令 more功能類似 cat ,cat命令是整個文件的內容從上到下顯示在屏幕上。 more會以一頁一頁的顯示方便使用者逐頁閱讀,而最基本的指令就是按空白鍵(space)就往下一頁顯示,按

Linuxfind的用法

查找1、使用find命令可以解決,find語法如下:find命令選項-name:按照文件名查找文件。-perm:按照文件權限來查找文件。-prune:使用這一選項可以使find命令不在當前指定的目錄中查找,如果同時使用-depth選項,那麽-prune將被find命令忽略。-user: 按照文件屬主來查找文件

linux的if用法和簡單的循環

linux if if用法來一波今天來一波在linux總if的簡單用法,實用與否還需要自己來判定。上一次在for中沒有提及shell腳本中格式問題,今天來補一下如若知道的,略過就好。。。在linux中,shell開頭一般是很重要的,但是卻又都是註釋要不要都行!這是為什麽呢?在上圖中顯示第一行#!/bin/ba

Linuxawk命令的簡單用法

.cn inux total com mage 簡單 image 用法 int 一、用例1:   cat /proc/meminfo|grep "MemTotal"|awk ‘{print $2}‘   說明,$2表示第2位,$0表示全部,如需表示$,可用$$轉義。

linux快捷鍵的用法

linux中快捷鍵的用法linux中快捷鍵的用法1.1 常見快捷鍵ctrl + a 把光標移動到行首ctrl + e 把光標移動到行尾ctrl + c 撤銷當前的操作=cancelctrl + d logout命令(當前行沒有任何內容,退出當前用戶),刪除光標所在位置後面的一個符號,文本ctrl + l(小寫